diff options
author | Fong Lin <pflin@novell.com> | 2010-10-08 17:04:46 +0100 |
---|---|---|
committer | Michael Meeks <michael.meeks@novell.com> | 2010-10-08 17:04:46 +0100 |
commit | cc316b39d9110c536e1758a4f814738ca209bb02 (patch) | |
tree | 0ff290d366ff8fea16ebc7e7781cc14b563f9b37 /lotuswordpro/source/filter | |
parent | 949fa63a66adc1ba54a0c353afd66bb863024d27 (diff) |
Port of Lotus Word Pro filter, by Fong Lin and Noel Power
Diffstat (limited to 'lotuswordpro/source/filter')
420 files changed, 93381 insertions, 0 deletions
diff --git a/lotuswordpro/source/filter/LotusWordProImportFilter.cxx b/lotuswordpro/source/filter/LotusWordProImportFilter.cxx new file mode 100644 index 000000000000..dfac30f395d1 --- /dev/null +++ b/lotuswordpro/source/filter/LotusWordProImportFilter.cxx @@ -0,0 +1,400 @@ +#include <osl/diagnose.h> +#include <rtl/tencinfo.h> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/io/XInputStream.hpp> +#include <com/sun/star/xml/sax/XAttributeList.hpp> +#include <com/sun/star/xml/sax/XDocumentHandler.hpp> +#include <com/sun/star/xml/sax/XParser.hpp> +#include <com/sun/star/ucb/XCommandEnvironment.hpp> +#include <com/sun/star/io/XInputStream.hpp> +#include <com/sun/star/uno/Reference.hxx> +#include <xmloff/attrlist.hxx> + +#include <ucbhelper/content.hxx> + +#include <tools/stream.hxx> + +#include "LotusWordProImportFilter.hxx" + +#include <vector> + +#include "lwpfilter.hxx" + +using namespace ::rtl; +using namespace com::sun::star; +using rtl::OString; +using rtl::OUStringBuffer; +using rtl::OUString; +using com::sun::star::uno::Sequence; +using com::sun::star::lang::XComponent; +using com::sun::star::uno::Any; +using com::sun::star::uno::UNO_QUERY; +using com::sun::star::uno::XInterface; +using com::sun::star::uno::Exception; +using com::sun::star::uno::RuntimeException; +using com::sun::star::io::XInputStream; +using com::sun::star::lang::XMultiServiceFactory; +using com::sun::star::beans::PropertyValue; +using com::sun::star::document::XFilter; +using com::sun::star::document::XExtendedFilterDetection; +using com::sun::star::ucb::XCommandEnvironment; + +using com::sun::star::document::XImporter; +using com::sun::star::xml::sax::XAttributeList; +using com::sun::star::xml::sax::XDocumentHandler; +using com::sun::star::xml::sax::XParser; + +// W o r d P r o +static const sal_Int8 header[] = { 0x57, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f }; + +const sal_Int32 MAXCHARS = 65534; + + // Simple xml importer, currently the importer is very very simple + // it only extracts pure text from the wordpro file. Absolutely no formating + // information is currently imported. + // To reflect the current state of this importer the sax events sent + // to the document handler are also the simplest possible. In addition to + // the the basic attributes set up for the 'office:document' element + // all the imported text is inserted into 'text:p' elements. + // The parser extracts the pure text and creates simple a simple 'text:p' + // element to contain that text. In the event of the text exceeding + // MAXCHARS new 'text:p' elements are created as needed +class SimpleXMLImporter +{ +private: + + uno::Reference< XDocumentHandler > m_xDocHandler; + std::vector< OUString > m_vStringChunks; + SvStream& m_InputStream; + + bool CheckValidData( sal_Int8 nChar ) + { + if( ( nChar >= 0x20 && nChar <= 0x7E ) && ( nChar != 0X40 ) ) + return true; + return false; + } + + void addAttribute( SvXMLAttributeList* pAttrList, const char* key, const char* val ) + { + pAttrList->AddAttribute( OUString::createFromAscii( key ), OUString::createFromAscii( val ) ); + } + + void writeTextChunk( const OUString& sChunk ) + { + SvXMLAttributeList *pAttrList = new SvXMLAttributeList(); + uno::Reference < XAttributeList > xAttrList(pAttrList); + + pAttrList->AddAttribute( OUString(RTL_CONSTASCII_USTRINGPARAM("text:style-name")), OUString(RTL_CONSTASCII_USTRINGPARAM("Standard"))); + + m_xDocHandler->startElement( OUString(RTL_CONSTASCII_USTRINGPARAM("text:p")), xAttrList ); + m_xDocHandler->characters( sChunk ); + m_xDocHandler->endElement( OUString(RTL_CONSTASCII_USTRINGPARAM("text:p") ) ); + } + + void writeDocContentPreamble() + { + SvXMLAttributeList *pDocContentPropList = new SvXMLAttributeList(); + uno::Reference < XAttributeList > xDocContentList(pDocContentPropList); + addAttribute( pDocContentPropList, "xmlns:office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0" ); + addAttribute( pDocContentPropList, "xmlns:style", "urn:oasis:names:tc:opendocument:xmlns:style:1.0"); + addAttribute( pDocContentPropList, "xmlns:text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0" ); + addAttribute( pDocContentPropList, "xmlns:table", "urn:oasis:names:tc:opendocument:xmlns:table:1.0" ); + addAttribute( pDocContentPropList, "xmlns:draw", "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" ); + addAttribute( pDocContentPropList, "xmlns:fo", "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" ); + addAttribute( pDocContentPropList, "xmlns:xlink", "http://www.w3.org/1999/xlink" ); + addAttribute( pDocContentPropList, "xmlns:dc", "http://purl.org/dc/elements/1.1/" ); + addAttribute( pDocContentPropList, "xmlns:meta", "urn:oasis:names:tc:opendocument:xmlns:meta:1.0" ); + addAttribute( pDocContentPropList, "xmlns:number", "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" ); + addAttribute( pDocContentPropList, "xmlns:svg", "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" ); + addAttribute( pDocContentPropList, "xmlns:chart", "urn:oasis:names:tc:opendocument:xmlns:chart:1.0" ); + addAttribute( pDocContentPropList, "xmlns:dr3d", "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" ); + addAttribute( pDocContentPropList, "xmlns:math", "http://www.w3.org/1998/Math/MathML" ); + addAttribute( pDocContentPropList, "xmlns:form", "urn:oasis:names:tc:opendocument:xmlns:form:1.0" ); + addAttribute( pDocContentPropList, "xmlns:script", "urn:oasis:names:tc:opendocument:xmlns:script:1.0" ); + addAttribute( pDocContentPropList, "xmlns:ooo", "http://openoffice.org/2004/office" ); + addAttribute( pDocContentPropList, "xmlns:ooow", "http://openoffice.org/2004/writer" ); + addAttribute( pDocContentPropList, "xmlns:oooc", "http://openoffice.org/2004/calc" ); + addAttribute( pDocContentPropList, "xmlns:dom", "http://www.w3.org/2001/xml-events" ); + addAttribute( pDocContentPropList, "xmlns:xforms", "http://www.w3.org/2002/xforms" ); + addAttribute( pDocContentPropList, "xmlns:xsd", "http://www.w3.org/2001/XMLSchema"); + addAttribute( pDocContentPropList, "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" ); + addAttribute( pDocContentPropList, "office:version", "1.0"); + m_xDocHandler->startElement(OUString(RTL_CONSTASCII_USTRINGPARAM("office:document-content" ) ), xDocContentList ); + } + + void parseDoc() + { + UINT8 nDelim, nDummy, nLen, nData; + UINT16 nOpcode; + int nCount = 0; + OUStringBuffer sBuf( MAXCHARS ); + sal_Int32 nChars = 0; + + while( !m_InputStream.IsEof()) + { + m_InputStream >> nDelim; + if( nDelim == 0x40 ) + { + m_InputStream >> nDummy >> nOpcode; + switch( nOpcode ) + { + case 0xC00B: // Dictionary Word + m_InputStream >> nLen >> nDummy; + while( nLen > 0 && !m_InputStream.IsEof() ) + { + UINT8 nChar; + m_InputStream >> nChar; + if( CheckValidData( nChar ) ) + { + sBuf.appendAscii( (sal_Char*)(&nChar),1 ); + if ( ++nChars >= MAXCHARS ) + { + m_vStringChunks.push_back( sBuf.makeStringAndClear() ); + nChars = 0; + } + } + nLen--; + } + break; + + case 0x0242: // Non Dictionary word + m_InputStream >> nData; + if( nData == 0x02 ) + { + m_InputStream >> nLen >> nDummy; + while( nLen > 0 && !m_InputStream.IsEof() ) + { + m_InputStream >> nData; + if( CheckValidData( nData ) ) + { + sBuf.appendAscii( (sal_Char*)(&nData),1 ); + if ( ++nChars >= MAXCHARS ) + { + m_vStringChunks.push_back( sBuf.makeStringAndClear() ); + nChars = 0; + } + } + nLen--; + } + } + break; + } + } + } + if ( nChars ) + m_vStringChunks.push_back( sBuf.makeStringAndClear() ); + } + + void writeXML() + { + if ( m_vStringChunks.size() ) + { + m_xDocHandler->startDocument(); + SvXMLAttributeList *pAttrList = new SvXMLAttributeList(); + writeDocContentPreamble(); // writes "office:document-content" elem + uno::Reference < XAttributeList > xAttrList(pAttrList); + + m_xDocHandler->startElement( OUString(RTL_CONSTASCII_USTRINGPARAM("office:body")), xAttrList ); + + // process strings imported + std::vector< OUString >::const_iterator it = m_vStringChunks.begin(); + std::vector< OUString >::const_iterator it_end = m_vStringChunks.end(); + for ( ; it!=it_end; ++it ) + writeTextChunk( *it ); + + m_xDocHandler->endElement( OUString(RTL_CONSTASCII_USTRINGPARAM("office:body") ) ); + m_xDocHandler->endElement( OUString(RTL_CONSTASCII_USTRINGPARAM("office:document-content"))); + m_xDocHandler->endDocument(); + } + } +public: + + SimpleXMLImporter( const uno::Reference< XDocumentHandler >& xDocHandler, SvStream& rStream ) : m_xDocHandler( xDocHandler ), m_InputStream( rStream ) {} + + void import() + { + parseDoc(); + writeXML(); + } +}; + +sal_Bool SAL_CALL LotusWordProImportFilter::importImpl( const Sequence< ::com::sun::star::beans::PropertyValue >& aDescriptor ) + throw (RuntimeException) +{ + + sal_Int32 nLength = aDescriptor.getLength(); + const PropertyValue * pValue = aDescriptor.getConstArray(); + OUString sURL; + uno::Reference < XInputStream > xInputStream; + for ( sal_Int32 i = 0 ; i < nLength; i++) + { + if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "InputStream" ) ) ) + pValue[i].Value >>= xInputStream; + else if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "URL" ) ) ) + pValue[i].Value >>= sURL; + rtl_TextEncoding encoding = RTL_TEXTENCODING_INFO_ASCII; + } + if ( !xInputStream.is() ) + { + OSL_ASSERT( 0 ); + return sal_False; + } + + OString sFileName; + sFileName = OUStringToOString(sURL, RTL_TEXTENCODING_INFO_ASCII); + + SvFileStream inputStream( sURL, STREAM_READ ); + if ( inputStream.IsEof() || ( inputStream.GetError() != SVSTREAM_OK ) ) + return sal_False; + + // An XML import service: what we push sax messages to.. + OUString sXMLImportService ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.XMLImporter" ) ); + + uno::Reference< XDocumentHandler > xInternalHandler( mxMSF->createInstance( sXMLImportService ), UNO_QUERY ); + uno::Reference < XImporter > xImporter(xInternalHandler, UNO_QUERY); + xImporter->setTargetDocument(mxDoc); +/* + SimpleXMLImporter xmlImporter( xInternalHandler, inputStream ); + xmlImporter.import(); + return sal_True; +*/ + return ( ReadWordproFile( &inputStream, xInternalHandler) == 0 ); + +} + +sal_Bool SAL_CALL LotusWordProImportFilter::filter( const Sequence< ::com::sun::star::beans::PropertyValue >& aDescriptor ) + throw (RuntimeException) +{ + return importImpl ( aDescriptor ); +} +void SAL_CALL LotusWordProImportFilter::cancel( ) + throw (RuntimeException) +{ +} + +// XImporter +void SAL_CALL LotusWordProImportFilter::setTargetDocument( const uno::Reference< ::com::sun::star::lang::XComponent >& xDoc ) + throw (::com::sun::star::lang::IllegalArgumentException, RuntimeException) +{ + meType = FILTER_IMPORT; + mxDoc = xDoc; +} + +// XExtendedFilterDetection +OUString SAL_CALL LotusWordProImportFilter::detect( com::sun::star::uno::Sequence< PropertyValue >& Descriptor ) + throw( com::sun::star::uno::RuntimeException ) +{ + + OUString sTypeName = OUString( RTL_CONSTASCII_USTRINGPARAM ( "" ) ); + sal_Int32 nLength = Descriptor.getLength(); + sal_Int32 location = nLength; + OUString sURL; + const PropertyValue * pValue = Descriptor.getConstArray(); + uno::Reference < XInputStream > xInputStream; + for ( sal_Int32 i = 0 ; i < nLength; i++) + { + if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "TypeName" ) ) ) + location=i; + else if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "InputStream" ) ) ) + pValue[i].Value >>= xInputStream; + else if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "URL" ) ) ) + pValue[i].Value >>= sURL; + + rtl_TextEncoding encoding = RTL_TEXTENCODING_INFO_ASCII; + } + + uno::Reference< com::sun::star::ucb::XCommandEnvironment > xEnv; + if (!xInputStream.is()) + { + try + { + ::ucbhelper::Content aContent(sURL, xEnv); + xInputStream = aContent.openStream(); + } + catch ( Exception& ) + { + return ::rtl::OUString(); + } + + if (!xInputStream.is()) + return ::rtl::OUString(); + } + + Sequence< ::sal_Int8 > aData; + sal_Int32 nLen = sizeof( header ) / sizeof( header[0] ); + if ( ( nLen == xInputStream->readBytes( aData, nLen ) ) ) + if ( memcmp( ( void* )header, (void*) aData.getConstArray(), nLen ) == 0 ) + sTypeName = OUString( RTL_CONSTASCII_USTRINGPARAM ( "writer_LotusWordPro_Document" ) ); + return sTypeName; +} + + +// XInitialization +void SAL_CALL LotusWordProImportFilter::initialize( const Sequence< Any >& aArguments ) + throw (Exception, RuntimeException) +{ + Sequence < PropertyValue > aAnySeq; + sal_Int32 nLength = aArguments.getLength(); + if ( nLength && ( aArguments[0] >>= aAnySeq ) ) + { + const PropertyValue * pValue = aAnySeq.getConstArray(); + nLength = aAnySeq.getLength(); + for ( sal_Int32 i = 0 ; i < nLength; i++) + { + if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "Type" ) ) ) + { + pValue[i].Value >>= msFilterName; + break; + } + } + } +} +OUString LotusWordProImportFilter_getImplementationName () + throw (RuntimeException) +{ + return OUString ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.LotusWordProImportFilter" ) ); +} + +#define SERVICE_NAME1 "com.sun.star.document.ImportFilter" +#define SERVICE_NAME2 "com.sun.star.document.ExtendedTypeDetection" +sal_Bool SAL_CALL LotusWordProImportFilter_supportsService( const OUString& ServiceName ) + throw (RuntimeException) +{ + return (ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SERVICE_NAME1 ) ) || + ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SERVICE_NAME2 ) ) ); +} +Sequence< OUString > SAL_CALL LotusWordProImportFilter_getSupportedServiceNames( ) + throw (RuntimeException) +{ + Sequence < OUString > aRet(2); +// Sequence < OUString > aRet(1); + OUString* pArray = aRet.getArray(); + pArray[0] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME1 ) ); + pArray[1] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME2 ) ); + return aRet; +} +#undef SERVICE_NAME2 +#undef SERVICE_NAME1 + +uno::Reference< XInterface > SAL_CALL LotusWordProImportFilter_createInstance( const uno::Reference< XMultiServiceFactory > & rSMgr) + throw( Exception ) +{ + return (cppu::OWeakObject*) new LotusWordProImportFilter( rSMgr ); +} + +// XServiceInfo +OUString SAL_CALL LotusWordProImportFilter::getImplementationName( ) + throw (RuntimeException) +{ + return LotusWordProImportFilter_getImplementationName(); +} +sal_Bool SAL_CALL LotusWordProImportFilter::supportsService( const OUString& rServiceName ) + throw (RuntimeException) +{ + return LotusWordProImportFilter_supportsService( rServiceName ); +} +Sequence< OUString > SAL_CALL LotusWordProImportFilter::getSupportedServiceNames( ) + throw (RuntimeException) +{ + return LotusWordProImportFilter_getSupportedServiceNames(); +} diff --git a/lotuswordpro/source/filter/LotusWordProImportFilter.cxx.orig b/lotuswordpro/source/filter/LotusWordProImportFilter.cxx.orig new file mode 100644 index 000000000000..481e214b7941 --- /dev/null +++ b/lotuswordpro/source/filter/LotusWordProImportFilter.cxx.orig @@ -0,0 +1,396 @@ +#include <osl/diagnose.h> +#include <rtl/tencinfo.h> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/io/XInputStream.hpp> +#include <com/sun/star/xml/sax/XAttributeList.hpp> +#include <com/sun/star/xml/sax/XDocumentHandler.hpp> +#include <com/sun/star/xml/sax/XParser.hpp> +#include <com/sun/star/ucb/XCommandEnvironment.hpp> +#include <com/sun/star/io/XInputStream.hpp> +#include <com/sun/star/uno/Reference.hxx> +#include <xmloff/attrlist.hxx> + +#include <ucbhelper/content.hxx> + +#include <tools/stream.hxx> + +#include "LotusWordProImportFilter.hxx" + +#include <vector> + +using namespace ::rtl; +using namespace com::sun::star; +using rtl::OString; +using rtl::OUStringBuffer; +using rtl::OUString; +using com::sun::star::uno::Sequence; +using com::sun::star::lang::XComponent; +using com::sun::star::uno::Any; +using com::sun::star::uno::UNO_QUERY; +using com::sun::star::uno::XInterface; +using com::sun::star::uno::Exception; +using com::sun::star::uno::RuntimeException; +using com::sun::star::io::XInputStream; +using com::sun::star::lang::XMultiServiceFactory; +using com::sun::star::beans::PropertyValue; +using com::sun::star::document::XFilter; +using com::sun::star::document::XExtendedFilterDetection; +using com::sun::star::ucb::XCommandEnvironment; + +using com::sun::star::document::XImporter; +using com::sun::star::xml::sax::XAttributeList; +using com::sun::star::xml::sax::XDocumentHandler; +using com::sun::star::xml::sax::XParser; + +// W o r d P r o +static const sal_Int8 header[] = { 0x57, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f }; + +const sal_Int32 MAXCHARS = 65534; + + // Simple xml importer, currently the importer is very very simple + // it only extracts pure text from the wordpro file. Absolutely no formating + // information is currently imported. + // To reflect the current state of this importer the sax events sent + // to the document handler are also the simplest possible. In addition to + // the the basic attributes set up for the 'office:document' element + // all the imported text is inserted into 'text:p' elements. + // The parser extracts the pure text and creates simple a simple 'text:p' + // element to contain that text. In the event of the text exceeding + // MAXCHARS new 'text:p' elements are created as needed +class SimpleXMLImporter +{ +private: + + uno::Reference< XDocumentHandler > m_xDocHandler; + std::vector< OUString > m_vStringChunks; + SvStream& m_InputStream; + + bool CheckValidData( sal_Int8 nChar ) + { + if( ( nChar >= 0x20 && nChar <= 0x7E ) && ( nChar != 0X40 ) ) + return true; + return false; + } + + void addAttribute( SvXMLAttributeList* pAttrList, const char* key, const char* val ) + { + pAttrList->AddAttribute( OUString::createFromAscii( key ), OUString::createFromAscii( val ) ); + } + + void writeTextChunk( const OUString& sChunk ) + { + SvXMLAttributeList *pAttrList = new SvXMLAttributeList(); + uno::Reference < XAttributeList > xAttrList(pAttrList); + + pAttrList->AddAttribute( OUString(RTL_CONSTASCII_USTRINGPARAM("text:style-name")), OUString(RTL_CONSTASCII_USTRINGPARAM("Standard"))); + + m_xDocHandler->startElement( OUString(RTL_CONSTASCII_USTRINGPARAM("text:p")), xAttrList ); + m_xDocHandler->characters( sChunk ); + m_xDocHandler->endElement( OUString(RTL_CONSTASCII_USTRINGPARAM("text:p") ) ); + } + + void writeDocContentPreamble() + { + SvXMLAttributeList *pDocContentPropList = new SvXMLAttributeList(); + uno::Reference < XAttributeList > xDocContentList(pDocContentPropList); + addAttribute( pDocContentPropList, "xmlns:office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0" ); + addAttribute( pDocContentPropList, "xmlns:style", "urn:oasis:names:tc:opendocument:xmlns:style:1.0"); + addAttribute( pDocContentPropList, "xmlns:text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0" ); + addAttribute( pDocContentPropList, "xmlns:table", "urn:oasis:names:tc:opendocument:xmlns:table:1.0" ); + addAttribute( pDocContentPropList, "xmlns:draw", "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" ); + addAttribute( pDocContentPropList, "xmlns:fo", "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" ); + addAttribute( pDocContentPropList, "xmlns:xlink", "http://www.w3.org/1999/xlink" ); + addAttribute( pDocContentPropList, "xmlns:dc", "http://purl.org/dc/elements/1.1/" ); + addAttribute( pDocContentPropList, "xmlns:meta", "urn:oasis:names:tc:opendocument:xmlns:meta:1.0" ); + addAttribute( pDocContentPropList, "xmlns:number", "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" ); + addAttribute( pDocContentPropList, "xmlns:svg", "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" ); + addAttribute( pDocContentPropList, "xmlns:chart", "urn:oasis:names:tc:opendocument:xmlns:chart:1.0" ); + addAttribute( pDocContentPropList, "xmlns:dr3d", "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" ); + addAttribute( pDocContentPropList, "xmlns:math", "http://www.w3.org/1998/Math/MathML" ); + addAttribute( pDocContentPropList, "xmlns:form", "urn:oasis:names:tc:opendocument:xmlns:form:1.0" ); + addAttribute( pDocContentPropList, "xmlns:script", "urn:oasis:names:tc:opendocument:xmlns:script:1.0" ); + addAttribute( pDocContentPropList, "xmlns:ooo", "http://openoffice.org/2004/office" ); + addAttribute( pDocContentPropList, "xmlns:ooow", "http://openoffice.org/2004/writer" ); + addAttribute( pDocContentPropList, "xmlns:oooc", "http://openoffice.org/2004/calc" ); + addAttribute( pDocContentPropList, "xmlns:dom", "http://www.w3.org/2001/xml-events" ); + addAttribute( pDocContentPropList, "xmlns:xforms", "http://www.w3.org/2002/xforms" ); + addAttribute( pDocContentPropList, "xmlns:xsd", "http://www.w3.org/2001/XMLSchema"); + addAttribute( pDocContentPropList, "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" ); + addAttribute( pDocContentPropList, "office:version", "1.0"); + m_xDocHandler->startElement(OUString(RTL_CONSTASCII_USTRINGPARAM("office:document-content" ) ), xDocContentList ); + } + + void parseDoc() + { + UINT8 nDelim, nDummy, nLen, nData; + UINT16 nOpcode; + int nCount = 0; + OUStringBuffer sBuf( MAXCHARS ); + sal_Int32 nChars = 0; + + while( !m_InputStream.IsEof()) + { + m_InputStream >> nDelim; + if( nDelim == 0x40 ) + { + m_InputStream >> nDummy >> nOpcode; + switch( nOpcode ) + { + case 0xC00B: // Dictionary Word + m_InputStream >> nLen >> nDummy; + while( nLen > 0 && !m_InputStream.IsEof() ) + { + UINT8 nChar; + m_InputStream >> nChar; + if( CheckValidData( nChar ) ) + { + sBuf.appendAscii( (sal_Char*)(&nChar),1 ); + if ( ++nChars >= MAXCHARS ) + { + m_vStringChunks.push_back( sBuf.makeStringAndClear() ); + nChars = 0; + } + } + nLen--; + } + break; + + case 0x0242: // Non Dictionary word + m_InputStream >> nData; + if( nData == 0x02 ) + { + m_InputStream >> nLen >> nDummy; + while( nLen > 0 && !m_InputStream.IsEof() ) + { + m_InputStream >> nData; + if( CheckValidData( nData ) ) + { + sBuf.appendAscii( (sal_Char*)(&nData),1 ); + if ( ++nChars >= MAXCHARS ) + { + m_vStringChunks.push_back( sBuf.makeStringAndClear() ); + nChars = 0; + } + } + nLen--; + } + } + break; + } + } + } + if ( nChars ) + m_vStringChunks.push_back( sBuf.makeStringAndClear() ); + } + + void writeXML() + { + if ( m_vStringChunks.size() ) + { + m_xDocHandler->startDocument(); + SvXMLAttributeList *pAttrList = new SvXMLAttributeList(); + writeDocContentPreamble(); // writes "office:document-content" elem + uno::Reference < XAttributeList > xAttrList(pAttrList); + + m_xDocHandler->startElement( OUString(RTL_CONSTASCII_USTRINGPARAM("office:body")), xAttrList ); + + // process strings imported + std::vector< OUString >::const_iterator it = m_vStringChunks.begin(); + std::vector< OUString >::const_iterator it_end = m_vStringChunks.end(); + for ( ; it!=it_end; ++it ) + writeTextChunk( *it ); + + m_xDocHandler->endElement( OUString(RTL_CONSTASCII_USTRINGPARAM("office:body") ) ); + m_xDocHandler->endElement( OUString(RTL_CONSTASCII_USTRINGPARAM("office:document-content"))); + m_xDocHandler->endDocument(); + } + } +public: + + SimpleXMLImporter( const uno::Reference< XDocumentHandler >& xDocHandler, SvStream& rStream ) : m_xDocHandler( xDocHandler ), m_InputStream( rStream ) {} + + void import() + { + parseDoc(); + writeXML(); + } +}; + +sal_Bool SAL_CALL LotusWordProImportFilter::importImpl( const Sequence< ::com::sun::star::beans::PropertyValue >& aDescriptor ) + throw (RuntimeException) +{ + + sal_Int32 nLength = aDescriptor.getLength(); + const PropertyValue * pValue = aDescriptor.getConstArray(); + OUString sURL; + uno::Reference < XInputStream > xInputStream; + for ( sal_Int32 i = 0 ; i < nLength; i++) + { + if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "InputStream" ) ) ) + pValue[i].Value >>= xInputStream; + else if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "URL" ) ) ) + pValue[i].Value >>= sURL; + rtl_TextEncoding encoding = RTL_TEXTENCODING_INFO_ASCII; + } + if ( !xInputStream.is() ) + { + OSL_ASSERT( 0 ); + return sal_False; + } + + OString sFileName; + sFileName = OUStringToOString(sURL, RTL_TEXTENCODING_INFO_ASCII); + + SvFileStream inputStream( sURL, STREAM_READ ); + if ( inputStream.IsEof() || ( inputStream.GetError() != SVSTREAM_OK ) ) + return sal_False; + + // An XML import service: what we push sax messages to.. + OUString sXMLImportService ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.XMLImporter" ) ); + + uno::Reference< XDocumentHandler > xInternalHandler( mxMSF->createInstance( sXMLImportService ), UNO_QUERY ); + uno::Reference < XImporter > xImporter(xInternalHandler, UNO_QUERY); + xImporter->setTargetDocument(mxDoc); + + SimpleXMLImporter xmlImporter( xInternalHandler, inputStream ); + xmlImporter.import(); + + return sal_True; +} + +sal_Bool SAL_CALL LotusWordProImportFilter::filter( const Sequence< ::com::sun::star::beans::PropertyValue >& aDescriptor ) + throw (RuntimeException) +{ + return importImpl ( aDescriptor ); +} +void SAL_CALL LotusWordProImportFilter::cancel( ) + throw (RuntimeException) +{ +} + +// XImporter +void SAL_CALL LotusWordProImportFilter::setTargetDocument( const uno::Reference< ::com::sun::star::lang::XComponent >& xDoc ) + throw (::com::sun::star::lang::IllegalArgumentException, RuntimeException) +{ + meType = FILTER_IMPORT; + mxDoc = xDoc; +} + +// XExtendedFilterDetection +OUString SAL_CALL LotusWordProImportFilter::detect( com::sun::star::uno::Sequence< PropertyValue >& Descriptor ) + throw( com::sun::star::uno::RuntimeException ) +{ + + OUString sTypeName = OUString( RTL_CONSTASCII_USTRINGPARAM ( "" ) ); + sal_Int32 nLength = Descriptor.getLength(); + sal_Int32 location = nLength; + OUString sURL; + const PropertyValue * pValue = Descriptor.getConstArray(); + uno::Reference < XInputStream > xInputStream; + for ( sal_Int32 i = 0 ; i < nLength; i++) + { + if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "TypeName" ) ) ) + location=i; + else if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "InputStream" ) ) ) + pValue[i].Value >>= xInputStream; + else if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "URL" ) ) ) + pValue[i].Value >>= sURL; + + rtl_TextEncoding encoding = RTL_TEXTENCODING_INFO_ASCII; + } + + uno::Reference< com::sun::star::ucb::XCommandEnvironment > xEnv; + if (!xInputStream.is()) + { + try + { + ::ucbhelper::Content aContent(sURL, xEnv); + xInputStream = aContent.openStream(); + } + catch ( Exception& ) + { + return ::rtl::OUString(); + } + + if (!xInputStream.is()) + return ::rtl::OUString(); + } + + Sequence< ::sal_Int8 > aData; + sal_Int32 nLen = sizeof( header ) / sizeof( header[0] ); + if ( ( nLen == xInputStream->readBytes( aData, nLen ) ) ) + if ( memcmp( ( void* )header, (void*) aData.getConstArray(), nLen ) == 0 ) + sTypeName = OUString( RTL_CONSTASCII_USTRINGPARAM ( "writer_LotusWordPro_Document" ) ); + return sTypeName; +} + + +// XInitialization +void SAL_CALL LotusWordProImportFilter::initialize( const Sequence< Any >& aArguments ) + throw (Exception, RuntimeException) +{ + Sequence < PropertyValue > aAnySeq; + sal_Int32 nLength = aArguments.getLength(); + if ( nLength && ( aArguments[0] >>= aAnySeq ) ) + { + const PropertyValue * pValue = aAnySeq.getConstArray(); + nLength = aAnySeq.getLength(); + for ( sal_Int32 i = 0 ; i < nLength; i++) + { + if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "Type" ) ) ) + { + pValue[i].Value >>= msFilterName; + break; + } + } + } +} +OUString LotusWordProImportFilter_getImplementationName () + throw (RuntimeException) +{ + return OUString ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.LotusWordProImportFilter" ) ); +} + +#define SERVICE_NAME1 "com.sun.star.document.ImportFilter" +#define SERVICE_NAME2 "com.sun.star.document.ExtendedTypeDetection" +sal_Bool SAL_CALL LotusWordProImportFilter_supportsService( const OUString& ServiceName ) + throw (RuntimeException) +{ + return (ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SERVICE_NAME1 ) ) || + ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SERVICE_NAME2 ) ) ); +} +Sequence< OUString > SAL_CALL LotusWordProImportFilter_getSupportedServiceNames( ) + throw (RuntimeException) +{ + Sequence < OUString > aRet(2); +// Sequence < OUString > aRet(1); + OUString* pArray = aRet.getArray(); + pArray[0] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME1 ) ); + pArray[1] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME2 ) ); + return aRet; +} +#undef SERVICE_NAME2 +#undef SERVICE_NAME1 + +uno::Reference< XInterface > SAL_CALL LotusWordProImportFilter_createInstance( const uno::Reference< XMultiServiceFactory > & rSMgr) + throw( Exception ) +{ + return (cppu::OWeakObject*) new LotusWordProImportFilter( rSMgr ); +} + +// XServiceInfo +OUString SAL_CALL LotusWordProImportFilter::getImplementationName( ) + throw (RuntimeException) +{ + return LotusWordProImportFilter_getImplementationName(); +} +sal_Bool SAL_CALL LotusWordProImportFilter::supportsService( const OUString& rServiceName ) + throw (RuntimeException) +{ + return LotusWordProImportFilter_supportsService( rServiceName ); +} +Sequence< OUString > SAL_CALL LotusWordProImportFilter::getSupportedServiceNames( ) + throw (RuntimeException) +{ + return LotusWordProImportFilter_getSupportedServiceNames(); +} diff --git a/lotuswordpro/source/filter/LotusWordProImportFilter.hxx b/lotuswordpro/source/filter/LotusWordProImportFilter.hxx new file mode 100644 index 000000000000..93f700a7eea4 --- /dev/null +++ b/lotuswordpro/source/filter/LotusWordProImportFilter.hxx @@ -0,0 +1,90 @@ +#ifndef _WORDPERFECTIMPORTFILTER_HXX +#define _WORDPERFECTIMPORTFILTER_HXX + +#include <com/sun/star/document/XFilter.hpp> +#include <com/sun/star/document/XImporter.hpp> +#include <com/sun/star/document/XExtendedFilterDetection.hpp> +#include <com/sun/star/lang/XInitialization.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/xml/sax/XDocumentHandler.hpp> +#include <cppuhelper/implbase5.hxx> +#include <rtl/ustrbuf.hxx> + +enum FilterType +{ + FILTER_IMPORT, + FILTER_EXPORT +}; +/* This component will be instantiated for both import or export. Whether it calls + * setSourceDocument or setTargetDocument determines which Impl function the filter + * member calls */ +class LotusWordProImportFilter : public cppu::WeakImplHelper5 +< + com::sun::star::document::XFilter, + com::sun::star::document::XImporter, + com::sun::star::document::XExtendedFilterDetection, + com::sun::star::lang::XInitialization, + com::sun::star::lang::XServiceInfo +> +{ +private: + +protected: + // oo.org declares + ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMSF; + ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > mxDoc; + ::rtl::OUString msFilterName; + ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler > mxHandler; + + FilterType meType; + + sal_Bool SAL_CALL importImpl( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aDescriptor ) + throw (::com::sun::star::uno::RuntimeException); + +public: + LotusWordProImportFilter( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > &rxMSF) + : mxMSF( rxMSF ) {} + virtual ~LotusWordProImportFilter() {} + + // XFilter + virtual sal_Bool SAL_CALL filter( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aDescriptor ) + throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL cancel( ) + throw (::com::sun::star::uno::RuntimeException); + + // XImporter + virtual void SAL_CALL setTargetDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xDoc ) + throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); + + //XExtendedFilterDetection + virtual ::rtl::OUString SAL_CALL detect( com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >& Descriptor ) + throw( com::sun::star::uno::RuntimeException ); + + // XInitialization + virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) + throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName( ) + throw (::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) + throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) + throw (::com::sun::star::uno::RuntimeException); + +}; + +::rtl::OUString LotusWordProImportFilter_getImplementationName() + throw ( ::com::sun::star::uno::RuntimeException ); + +sal_Bool SAL_CALL LotusWordProImportFilter_supportsService( const ::rtl::OUString& ServiceName ) + throw ( ::com::sun::star::uno::RuntimeException ); + +::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL LotusWordProImportFilter_getSupportedServiceNames( ) + throw ( ::com::sun::star::uno::RuntimeException ); + +::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > +SAL_CALL LotusWordProImportFilter_createInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & rSMgr) + throw ( ::com::sun::star::uno::Exception ); + +#endif diff --git a/lotuswordpro/source/filter/bencont.cxx b/lotuswordpro/source/filter/bencont.cxx new file mode 100644 index 000000000000..246f307937bf --- /dev/null +++ b/lotuswordpro/source/filter/bencont.cxx @@ -0,0 +1,716 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "first.hxx" +#include "assert.h" +#include <stdio.h> +#include <sot/storinfo.hxx> +namespace OpenStormBento +{ + +// String definitions +const char gsBenMagicBytes[] = BEN_MAGIC_BYTES; + +/** +* New bento container from file stream +* @param pointer to length of bento file +* @param pointer to pointer of Bento Container object +* @return error code +*/ +ULONG BenOpenContainer(LwpSvStream * pStream, pLtcBenContainer * ppContainer) +{ + BenError Err; + + *ppContainer = NULL; + + if (NULL == pStream) + { + return BenErr_ContainerWithNoObjects; + } + + pLtcBenContainer pContainer = new LtcBenContainer(pStream); + if ((Err = pContainer->Open()) != BenErr_OK) // delete two inputs + { + delete pContainer; + return BenErr_InvalidTOC; + } + + *ppContainer = pContainer; + return BenErr_OK; +} +BenError +LtcBenContainer::Close() +{ + return BenErr_OK; +} + +LtcBenContainer::~LtcBenContainer() +{ + Close(); +} + +BenError +LtcBenContainer::Open() // delete two inputs +{ + BenError Err; + CBenTOCReader TOCReader(this); + if ((Err = TOCReader.ReadLabelAndTOC()) != BenErr_OK) + { + return Err; + } + return BenErr_OK; +} + +void +LtcBenContainer::Release() +{ + delete this; +} + +BenError +LtcBenContainer::RegisterPropertyName(const char * sPropertyName, + pCBenPropertyName * ppPropertyName) +{ + pCBenNamedObjectListElmt pPrevNamedObjectListElmt; + pCBenNamedObject pNamedObject = FindNamedObject(&cNamedObjects, + sPropertyName, &pPrevNamedObjectListElmt); + + if (pNamedObject != NULL) + { + if (! pNamedObject->IsPropertyName()) + return BenErr_NameConflict; + else *ppPropertyName = (pCBenPropertyName) pNamedObject; + } + else + { + pCBenIDListElmt pPrevObject; + if (FindID(&cObjects, cNextAvailObjectID, &pPrevObject) != NULL) + return BenErr_DuplicateObjectID; + + *ppPropertyName = new CBenPropertyName(this, cNextAvailObjectID, + (pCBenObject) pPrevObject, sPropertyName, pPrevNamedObjectListElmt); + ++cNextAvailObjectID; + } + + return BenErr_OK; +} + +BenError +LtcBenContainer::RegisterTypeName(const char * sTypeName, + pCBenTypeName * ppTypeName) +{ + pCBenNamedObjectListElmt pPrevNamedObjectListElmt; + pCBenNamedObject pNamedObject = FindNamedObject(&cNamedObjects, sTypeName, + &pPrevNamedObjectListElmt); + + if (pNamedObject != NULL) + { + if (! pNamedObject->IsTypeName()) + return BenErr_NameConflict; + else *ppTypeName = (pCBenTypeName) pNamedObject; + } + else + { + pCBenIDListElmt pPrevObject; + if (FindID(&cObjects, cNextAvailObjectID, &pPrevObject) != NULL) + return BenErr_DuplicateObjectID; + + *ppTypeName = new CBenTypeName(this, cNextAvailObjectID, + (pCBenObject) pPrevObject, sTypeName, pPrevNamedObjectListElmt); + ++cNextAvailObjectID; + } + + return BenErr_OK; +} + +BenError +LtcBenContainer::NewObject(pCBenObject * ppBenObject) +{ + pCBenIDListElmt pPrev; + if (FindID(&cObjects, cNextAvailObjectID, &pPrev) != NULL) + return BenErr_DuplicateObjectID; + + *ppBenObject = new CBenObject(this, cNextAvailObjectID, pPrev); + + ++cNextAvailObjectID; + return BenErr_OK; +} + +pCBenObject +LtcBenContainer::GetNextObject(pCBenObject pCurrObject) +{ + return (pCBenObject) cObjects.GetNextOrNULL(pCurrObject); +} + +pCBenObject +LtcBenContainer::FindNextObjectWithProperty(pCBenObject pCurrObject, + BenObjectID PropertyID) +{ + while ((pCurrObject = GetNextObject(pCurrObject)) != NULL) + if (pCurrObject->UseProperty(PropertyID) != NULL) + return pCurrObject; + + return NULL; +} + +pCBenObject +LtcBenContainer::FindObject(BenObjectID ObjectID) +{ + return (pCBenObject) FindID(&cObjects, ObjectID, NULL); +} + +/** +* Construction +* @param Bento file stream pointer +* @return +*/ +LtcBenContainer::LtcBenContainer(LwpSvStream * pStream) +{ + cpStream = pStream; + pStream->Seek(STREAM_SEEK_TO_END); + m_ulLength = pStream->Tell(); + pStream->Seek(STREAM_SEEK_TO_BEGIN); +} + +/** +* Read buffer fro bento file with specified buffer +* @date 07/05/2004 +* @param buffer pointer +* @param buffer size +* @param number of bytes read +* @return BenError +*/ +BenError LtcBenContainer::Read(BenDataPtr pBuffer, unsigned long MaxSize, + unsigned long * pAmtRead) +{ + *pAmtRead = cpStream->Read(pBuffer, MaxSize); + return BenErr_OK; +} +/** +* Read buffer from bento file with specified size +* @date 07/05/2004 +* @param buffer pointer +* @param number of bytes to be read +* @return BenError +*/ +BenError LtcBenContainer::ReadKnownSize(BenDataPtr pBuffer, unsigned long Amt) +{ + ULONG ulLength; + ulLength = cpStream->Read(pBuffer, Amt); + if(ulLength == Amt) + { + return BenErr_OK; + } + return BenErr_ReadPastEndOfContainer; +} +/** +* Seek to position from the beginning of the bento file +* @date 07/05/2004 +* @param position in container file from beginning +* @return BenError +*/ +BenError LtcBenContainer::SeekToPosition(BenContainerPos Pos) +{ + cpStream->Seek(Pos); + return BenErr_OK; +} +/** +* Seek to position compare to end of bento file +* @date 07/05/2004 +* @param position in container file from end +* @return BenError +*/ +BenError LtcBenContainer::SeekFromEnd(long Offset) +{ + cpStream->Seek(STREAM_SEEK_TO_END); + cpStream->SeekRel(Offset); + + return BenErr_OK; +} +/** +* Get position in the bento file +* @date 07/05/2004 +* @param pointer of current position in container file from end +* @return BenError +*/ +BenError LtcBenContainer::GetPosition(BenContainerPos * pPosition) +{ + *pPosition = cpStream->Tell(); + return BenErr_OK; +} +/** +* Find the next value stream with property name +* @date 07/05/2004 +* @param string of property name +* @param current value stream pointer with the property name +* @return next value stream pointer with the property names +*/ +LtcUtBenValueStream * LtcBenContainer::FindNextValueStreamWithPropertyName(const char * sPropertyName, LtcUtBenValueStream * pCurrentValueStream) +{ + CBenPropertyName * pPropertyName; + RegisterPropertyName(sPropertyName, &pPropertyName); // Get property name object + + if (NULL == pPropertyName) + return NULL; // Property not exist + + // Get current object + CBenObject * pObj = NULL; + if (pCurrentValueStream != NULL) + { + pObj = pCurrentValueStream->GetValue()->GetProperty()->GetBenObject(); + } + + + pObj =FindNextObjectWithProperty(pObj, pPropertyName->GetID()); // Get next object with same property name + if (NULL == pObj) + return NULL; + + CBenValue * pValue; + LtcUtBenValueStream * pValueStream; + + pValue = pObj->UseValue(pPropertyName->GetID()); + + pValueStream = new LtcUtBenValueStream(pValue); + + return pValueStream; +} + +/** +* Find the unique value stream with property name +* @date 07/05/2004 +* @param string of property name +* @return the only value stream pointer with the property names +*/ +LtcUtBenValueStream * LtcBenContainer::FindValueStreamWithPropertyName(const char * sPropertyName) +{ + return FindNextValueStreamWithPropertyName(sPropertyName, NULL); +} +/** +* Find the unique value stream with property name and Object ID +* @date 10/24/2005 +* @param object ID +* @param string of property name +* @return the only value stream pointer with the property names +*/ +LtcUtBenValueStream * LtcBenContainer::FindObjectValueStreamWithObjectIDAndProperty(BenObjectID ObjectID, const char * sPropertyName) +{ + CBenPropertyName * pPropertyName; + RegisterPropertyName(sPropertyName, &pPropertyName); // Get property name object + if (NULL == pPropertyName) + return NULL; // Property not exist + // Get current object + CBenObject * pObj = NULL; + pObj = FindObject(ObjectID); // Get object with object ID + if (NULL == pObj) + return NULL; + CBenValue * pValue; + LtcUtBenValueStream * pValueStream; + pValue = pObj->UseValue(pPropertyName->GetID()); + pValueStream = new LtcUtBenValueStream(pValue); + return pValueStream; +} +/** +* <description> +* @date 07/05/2004 +* @param pointer to length of bento file +* @return BenError +*/ +BenError LtcBenContainer::GetSize(ULONG * pLength) +{ + *pLength = m_ulLength; + return BenErr_OK; +} + +sal_uInt32 GetSvStreamSize(SvStream * pStream) +{ + sal_uInt32 nCurPos = pStream->Tell(); + pStream->Seek(STREAM_SEEK_TO_END); + sal_uInt32 ulLength = pStream->Tell(); + pStream->Seek(nCurPos); + + return ulLength; +} +/** +* Find hazily according to part of property name +* @date 01/31/2005 +* @param +* @return the value stream pointers vector with the property names +*/ +BenError LtcBenContainer::CreateGraphicStreams(std::vector<SvStream *> * pStreamVector) +{ + /* traverse all named objects to find all the graphic property names */ + CBenObject * pObj= NULL; + char *pName; + std::vector<std::string> aGrPropertyVector ; + while(pObj = GetNextObject(pObj) ) + { + if(pObj->IsNamedObject()) + { + CBenNamedObject * pNamedObj = static_cast<CBenNamedObject *>(pObj); + if(!pNamedObj->IsPropertyName()) + continue; + + // Gr2E,41FDD458-S + // Gr2E,41FDD458-D + pName = const_cast<char *>(pNamedObj->GetName()); + if ( (pName[0] == 'G') + && (pName[1] == 'r') + &&( (pName[14] == 'D') || (pName[14] == 'S') ) ) + { + aGrPropertyVector.push_back(std::string(pName)); + } + } + } + + /* traverse the found properties and construct the stream vectors */ + std::vector<std::string>::iterator itor; + for (itor = aGrPropertyVector.begin(); itor != aGrPropertyVector.end(); itor ++) + { + // get property names with suffix of S&D + char sSName[32], sDName[32]; + strcpy(sSName, itor->c_str()); + strcpy(sDName, itor->c_str()); + sSName[14] = 'S'; + sDName[14] = 'D'; + + // erase strings in vector + std::vector<std::string>::iterator itorSearch; + for (itorSearch = aGrPropertyVector.begin(); itorSearch != aGrPropertyVector.end(); itorSearch ++) + { + if( (*itorSearch == sSName) || (*itorSearch == sDName) ) + { + std::vector<std::string>::iterator itorDel = itorSearch; + aGrPropertyVector.erase(itorDel); + } + } + + // get S&D's stream and merge them together + { + SvStream *pD = NULL, *pS = NULL; + + pS = FindValueStreamWithPropertyName(sSName); + assert(pS != NULL); + pD = FindValueStreamWithPropertyName(sDName); + assert(pD != NULL); + + sal_uInt32 nDLen = GetSvStreamSize(pD); + sal_uInt32 nLen = GetSvStreamSize(pS) + nDLen; + assert(nLen > 0); + char * pBuf = new char[nLen]; + assert(pBuf != NULL); + char * pPointer = pBuf; + pD->Read(pPointer, nDLen); + pPointer += nDLen; + pS->Read(pPointer, nLen - nDLen); + + delete pS; + delete pD; + + SvMemoryStream * pStream = new SvMemoryStream(pBuf, nLen, STREAM_READ); + assert(pStream != NULL); + + pStreamVector->push_back(pStream); + } + } + + aGrPropertyVector.clear(); + return BenErr_OK; +} + +/** +* Find hazily according to object ID +* @date 01/31/2005 +* @param pObjectname - format as "GrXX,XXXXXXXX" wherein XX is high part of object ID, and XXXXXXXX is low part +* @return the value stream pointers with the property names +*/ +BenError LtcBenContainer::CreateGraphicStream(SvStream * &pStream, const char *pObjectName) +{ + if (!pObjectName) + { + pStream = NULL; + return BenErr_NamedObjectError; + } + // construct the string of property name + char sSName[64]=""; + char sDName[64]=""; + + sprintf(sSName, "%s-S", pObjectName); + sprintf(sDName, "%s-D", pObjectName); + + /* traverse the found properties and construct the stream vectors */ + SvMemoryStream * pMemStream = NULL; + // get S&D's stream and merge them together + SvStream *pD = NULL, *pS = NULL; + + pS = FindValueStreamWithPropertyName(sSName); + pD = FindValueStreamWithPropertyName(sDName); + + + sal_uInt32 nDLen = 0; + if(pD) + { + nDLen = GetSvStreamSize(pD); + } + sal_uInt32 nLen = nDLen; + if(pS) + { + nLen += GetSvStreamSize(pS) ; + } + + assert(nLen > 0); + char * pBuf = new char[nLen]; + assert(pBuf != NULL); + char * pPointer = pBuf; + if(pD) + { + pD->Read(pPointer, nDLen); + delete pD; + } + pPointer += nDLen; + if(pS) + { + pS->Read(pPointer, nLen - nDLen); + delete pS; + } + + pMemStream = new SvMemoryStream(pBuf, nLen, STREAM_READ); + assert(pMemStream != NULL); + + pStream = pMemStream; + return BenErr_OK; +} +/** +* Find ole object stream according to object name +* @date 10/24/2005 +* @param +* @return the value ole storage stream pointers +*/ +#include <tools/globname.hxx> +SotStorageStreamRef LtcBenContainer::ConvertAswStorageToOLE2Stream(const char * sObjectName) +{ + SotStorageStreamRef xOleObjStm; + + SvStream* pOleStorageStream = NULL; + //Get Ole Storage stream + AswEntry aEntry; + pOleStorageStream = FindOLEStorageStreamWithObjectName(sObjectName, aEntry); + + if( !pOleStorageStream ) + return xOleObjStm; + //Find it, create Ole stream + //xOleObjStm = new SotStorageStream(String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "Ole-Object" ) )); + xOleObjStm = new SotStorageStream(String()); + if( xOleObjStm->GetError() ) + return xOleObjStm; + xOleObjStm->SetBufferSize( 0xff00 ); + + SotStorageRef xOleObjStor = new SotStorage( *xOleObjStm ); + if( xOleObjStor->GetError() ) + return xOleObjStm; + //Set class id + ClsId aClsId = aEntry.GetClassId(); + SvGlobalName aGName( aClsId.n1, aClsId.n2, aClsId.n3, aClsId.n4, + aClsId.n5, aClsId.n6,aClsId.n7,aClsId.n8, + aClsId.n9,aClsId.n10,aClsId.n11); + xOleObjStor->SetClass( aGName, 0, String()); + + xOleObjStor->SetVersion( SOFFICE_FILEFORMAT_60 ); + std::string aOleStreamName("OleStream"); + sal_uInt32 nDLen = 0; + nDLen = GetSvStreamSize(pOleStorageStream); + for(sal_uInt32 nIndex = 0; nIndex < nDLen / ASWENTRY_SIZE; nIndex ++) + { + AswEntry aOleEntry; + ReadAswEntry(pOleStorageStream, aOleEntry); + if(aOleEntry.GetType()== BEN_STGTY_STREAM) + { + SvStream* pOleStream = FindObjectValueStreamWithObjectIDAndProperty(aOleEntry.GetObjectID(), aOleStreamName.c_str()); + if(pOleStream) + { + String strName; + aOleEntry.GetName(strName); + SotStorageStreamRef xStm = xOleObjStor->OpenSotStream( strName ); + if( xStm->GetError() ) + break; + xStm->SetBufferSize( 8192 ); + (*pOleStream) >> (*xStm); + xStm->Commit(); + delete pOleStream; + pOleStream = NULL; + } + } + } + xOleObjStor->Commit(); + xOleObjStm->Commit(); + + return xOleObjStm; +} +/** +* Find ole object storage stream data according to object name +* @date 10/24/2005 +* @param +* @return the value ole storage stream data pointers +*/ +LtcUtBenValueStream* LtcBenContainer::FindOLEStorageStreamWithObjectName(const char * sObjectName, AswEntry& rEntry) +{ + if (!sObjectName) + return NULL; + + //Find OleRootStorage stream + std::string aRootStroageName("OleRootStorage"); + std::string aOleStroageName("OleStorage"); + LtcUtBenValueStream* pRootStream = NULL; + pRootStream = FindValueStreamWithPropertyName(aRootStroageName.c_str()); + if(!pRootStream) + return NULL; + //Read root storage data and find the ole storage object id according to the object name + sal_uInt32 nDLen = 0; + nDLen = GetSvStreamSize(pRootStream); + for(sal_uInt32 nIndex = 0; nIndex < nDLen / ASWENTRY_SIZE; nIndex ++) + { + //Get entry + ReadAswEntry(pRootStream, rEntry); + String sObjName; + rEntry.GetName(sObjName); + if(sObjName.EqualsAscii(sObjectName)) + { + //Find it + delete pRootStream; + return FindObjectValueStreamWithObjectIDAndProperty(rEntry.GetObjectID(), aOleStroageName.c_str()); + } + } + + // Not find + if(pRootStream) + { + delete pRootStream; + } + + return NULL; +} +void LtcBenContainer::ReadAswEntry(SvStream * pStream, AswEntry & rEntry) +{ + char* pBuf = new char[ASWENTRY_SIZE]; + pStream->Read(pBuf, ASWENTRY_SIZE); + rEntry.Load(pBuf); + delete[] pBuf; +} +//////////////////////////////////////////////////////////////////// +//classs AswEntry +AswEntry::AswEntry() +{ + Init(); +} +void AswEntry::Init() +{ + memset( this, 0, sizeof (AswEntry)); +} +void AswEntry::SetName( const String& rName ) +{ + int i; + for( i = 0; i < rName.Len() && i < 68; i++ ) + nName[ i ] = rName.GetChar( i ); + while( i < 68 ) + nName[ i++ ] = 0; +} +void AswEntry::GetName(String & rName) const +{ + rName = nName; +} +void AswEntry::Store( void* pTo ) +{ + SvMemoryStream r( (sal_Char *)pTo, ASWENTRY_SIZE, STREAM_WRITE ); + for( short i = 0; i < 68; i++ ) + r << nName[ i ]; // 00 name as WCHAR + r<< nMtime[ 0 ] // 42 entry type + << nMtime[ 1 ] // 43 0 or 1 (tree balance?) + << nCtime[ 0 ] // 44 left node entry + << nCtime[ 1 ] // 48 right node entry + << nAtime[ 0 ] // 44 left node entry + << nAtime[ 1 ]; // 48 right node entry + r.Write(&aClsId ,16); // 50 class ID (optional) + r<< nStatebits // 60 state flags(?) + << nType + << nObjectIDRef // 64 modification time + << nMversion // 6C creation and access time + << nLversion // 6C creation and access time + << nReserved[ 0 ] // 74 starting block (either direct or translated) + << nReserved[ 1 ]; // 78 file size +} +void AswEntry::Load( const void* pFrom ) +{ + SvMemoryStream r( (sal_Char *)pFrom, ASWENTRY_SIZE, STREAM_WRITE ); + for( short i = 0; i < 68; i++ ) + r >> nName[ i ]; // 00 name as WCHAR + r>> nMtime[ 0 ] // 42 entry type + >> nMtime[ 1 ] // 43 0 or 1 (tree balance?) + >> nCtime[ 0 ] // 44 left node entry + >> nCtime[ 1 ] // 48 right node entry + >> nAtime[ 0 ] // 44 left node entry + >> nAtime[ 1 ]; // 48 right node entry + r.Read(&aClsId,16); // 50 class ID (optional) + r>> nStatebits // 60 state flags(?) + >> nType + >> nObjectIDRef // 64 modification time + >> nMversion // 6C creation and access time + >> nLversion // 6C creation and access time + >> nReserved[ 0 ] // 74 starting block (either direct or translated) + >> nReserved[ 1 ]; // 78 file size +} +void AswEntry::SetClassId( const ClsId& r ) +{ + memcpy( &aClsId, &r, sizeof( ClsId ) ); +} +/////////////////////////////////////////////////////////////////// +}// end namespace OpenStormBento diff --git a/lotuswordpro/source/filter/benlist.cxx b/lotuswordpro/source/filter/benlist.cxx new file mode 100644 index 000000000000..eb76f2cd06b2 --- /dev/null +++ b/lotuswordpro/source/filter/benlist.cxx @@ -0,0 +1,121 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "first.hxx" +namespace OpenStormBento +{ + +pCBenNamedObject +FindNamedObject(pCUtList pList, const char * sName, + pCBenNamedObjectListElmt * ppPrev) +{ + pCUtListElmt pTerminating = pList->GetTerminating(); + for (pCUtListElmt pCurr = pList->GetLast(); pCurr != pTerminating; + pCurr = pCurr->GetPrev()) + { + pCBenNamedObjectListElmt pCurrNamedObjectListElmt = + (pCBenNamedObjectListElmt) pCurr; + + + //Old code +// int Comp = strcmp(sName, pCurrNamedObjectListElmt->GetNamedObject()-> +// GetName()); + int Comp = strcmp(sName, pCurrNamedObjectListElmt->GetNamedObject()-> + GetNameCStr()); + + + if (Comp == 0) + return pCurrNamedObjectListElmt->GetNamedObject(); + else if (Comp < 0) + continue; + else + { + if (ppPrev != NULL) + *ppPrev = pCurrNamedObjectListElmt; + return NULL; + } + } + + if (ppPrev != NULL) + *ppPrev = (pCBenNamedObjectListElmt) pTerminating; + return NULL; +} + +// Assume list is of BenIDListElmt list elements, sorted by ID +pCBenIDListElmt +FindID(pCUtList pList, BenObjectID ObjectID, pCBenIDListElmt * ppPrev) +{ + pCUtListElmt pTerminating = pList->GetTerminating(); + for (pCUtListElmt pCurr = pList->GetLast(); pCurr != pTerminating; + pCurr = pCurr->GetPrev()) + { + pCBenIDListElmt pCurrIDListElmt = (pCBenIDListElmt) pCurr; + + if (ObjectID == pCurrIDListElmt->GetID()) + return pCurrIDListElmt; + else if (ObjectID < pCurrIDListElmt->GetID()) + continue; + else + { + if (ppPrev != NULL) + *ppPrev = pCurrIDListElmt; + return NULL; + } + } + + if (ppPrev != NULL) + *ppPrev = (pCBenIDListElmt) pTerminating; + return NULL; +} +} //end namespace OpenStormBento diff --git a/lotuswordpro/source/filter/benname.cxx b/lotuswordpro/source/filter/benname.cxx new file mode 100644 index 000000000000..ea5e58400469 --- /dev/null +++ b/lotuswordpro/source/filter/benname.cxx @@ -0,0 +1,91 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "first.hxx" +namespace OpenStormBento +{ +#if 0 +CBenNamedObject::CBenNamedObject(pLtcBenContainer pContainer, + BenObjectID ObjectID, pCBenObject pPrevObject, const char * sName, + pCBenNamedObjectListElmt pPrevNamedObjectListElmt) : + CBenObject(pContainer, ObjectID, pPrevObject), csName(sName), + cNameListElmt(this, pPrevNamedObjectListElmt) +{ +} +#endif + // changed by to remove warning 2004-06-24 +CBenNamedObject::CBenNamedObject(pLtcBenContainer pContainer, + BenObjectID ObjectID, pCBenObject pPrevObject, const char * sName, + pCBenNamedObjectListElmt pPrevNamedObjectListElmt) : + CBenObject(pContainer, ObjectID, pPrevObject), csName(sName), + cNameListElmt( pPrevNamedObjectListElmt) +{ + cNameListElmt.SetNamedObject(this); +} + +UtBool CBenNamedObject::IsNamedObject() +{ return UT_TRUE; } + +UtBool CBenNamedObject::IsPropertyName() +{ return UT_FALSE; } + +UtBool CBenNamedObject::IsTypeName() +{ return UT_FALSE; } + +UtBool CBenPropertyName::IsPropertyName() +{ return UT_TRUE; } + +UtBool CBenTypeName::IsTypeName() +{ return UT_TRUE; } +} // end namespace OpenStormBento diff --git a/lotuswordpro/source/filter/benobj.cxx b/lotuswordpro/source/filter/benobj.cxx new file mode 100644 index 000000000000..7ade1544b806 --- /dev/null +++ b/lotuswordpro/source/filter/benobj.cxx @@ -0,0 +1,128 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "first.hxx" +namespace OpenStormBento +{ + +UtBool +CBenObject::IsNamedObject() +{ + return UT_FALSE; +} + +pCBenProperty +CBenObject::GetNextProperty(pCBenProperty pCurrProperty) +{ + return (pCBenProperty) cProperties.GetNextOrNULL(pCurrProperty); +} + +pCBenProperty +CBenObject::UseProperty(BenObjectID PropertyID) +{ + pCBenIDListElmt pPrev; + return (pCBenProperty) FindID(&cProperties, PropertyID, &pPrev); +} + +void +CBenObject::DeleteProperty(pCBenProperty pProperty) +{ + delete pProperty; +} + +pCBenValue +CBenObject::UseValue(BenObjectID PropertyID) +{ + pCBenProperty pProperty = UseProperty(PropertyID); + if (pProperty == NULL) + return NULL; + return pProperty->UseValue(); +} + +pCBenValue +CBenObject::UseValueWithPropertyName(const char * sPropertyName) +{ + pCBenPropertyName pPropertyName; + if (GetContainer()->RegisterPropertyName(sPropertyName, &pPropertyName) + != BenErr_OK) + return NULL; + + return UseValue(pPropertyName->GetID()); +} + +pCBenValue +CBenObject::UseSingleValue() +{ + if (cProperties.IsEmpty() || cProperties.ContainsAtLeastTwoItems()) + return NULL; + pCBenProperty pProperty = (pCBenProperty) cProperties.GetFirst(); + return pProperty->UseValue(); +} + +BenError +CBenObject::NewValue(BenObjectID PropertyID, BenObjectID TypeID, pCBenValue * + ppValue) +{ + pCBenIDListElmt pPrevProperty; + pCBenProperty pProperty = (pCBenProperty) FindID(&cProperties, + PropertyID, &pPrevProperty); + if (pProperty != NULL) + return BenErr_PropertyAlreadyExists; + + pProperty = new CBenProperty(this, PropertyID, TypeID, pPrevProperty); + *ppValue = pProperty->UseValue(); + + return BenErr_OK; +} +}// end namespace OpenStormBento diff --git a/lotuswordpro/source/filter/bento.hxx b/lotuswordpro/source/filter/bento.hxx new file mode 100644 index 000000000000..7e856c482320 --- /dev/null +++ b/lotuswordpro/source/filter/bento.hxx @@ -0,0 +1,567 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef BENTO_H +#define BENTO_H + +#include <string> +#include <vector> +#include "lwpsvstream.hxx" + +#define BEN_CC __stdcall +#ifdef COMP_BENTO +#define BEN_EXPORT __declspec(dllexport) +#else +#define BEN_EXPORT +#endif + +using namespace std; + +#include "ut.hxx" +#include "utlist.hxx" +// removed for WordPro filter, 2005-01-27 +//#include <scerrors.hxx> // error code defined for SC +//#include <filter.hxx> // error code defined for SC filters +#include <tools/stream.hxx> // SvStream definition +#include <sot/storage.hxx> // SotStorageStream definition, add by 10/24/2005 + +namespace OpenStormBento +{ + +#define BEN_CURR_MAJOR_VERSION 2 +#define BEN_CURR_MINOR_VERSION 0 +#define BEN_MAGIC_BYTES_SIZE 8 +#define BEN_LABEL_SIZE 24 + +#define BEN_MAGIC_BYTES "\xA4""CM""\xA5""Hdr""\xD7" +//For Ole2DirectoryStruct, Add by 10/24/2005 +#define BEN_STGTY_STORAGE 1 +#define BEN_STGTY_STREAM 2 +#define ASWENTRY_SIZE 204 +struct ClsId +{ + INT32 n1; + INT16 n2, n3; + UINT8 n4, n5, n6, n7, n8, n9, n10, n11; +}; +class AswEntry //total length: 204 +{ + UINT16 nName[ 68 ]; //Name of IStorage or IStream referenced by this entry, length = 136 + INT32 nMtime[ 2 ]; + INT32 nCtime[ 2 ]; + INT32 nAtime[ 2 ]; + ClsId aClsId; //CLSID from OLE 2 IStorage::SetClass call + UINT32 nStatebits; //State bits from OLE 2 IStorage::SetStateBits call + UINT32 nType; // STGTY_STORAGE: 1 or STGTY_STREAM:2, + UINT32 nObjectIDRef; //Persistent Bento reference to Bento object for this IStorage or IStream + UINT32 nMversion; + UINT32 nLversion; + UINT32 nReserved[2]; //skip 16 char +public: + AswEntry(); + void Init(); // initialize the data + void SetName( const String& ); // store a name (ASCII, up to 32 chars) + void GetName( String& rName ) const; + void Load( const void* ); + void Store( void* ); + UINT32 GetType() const { return nType; } + void SetType( UINT32 t ) { nType = t;} + const ClsId& GetClassId() const { return aClsId;} + void SetClassId( const ClsId& ); + void SetObjectID(UINT32 id) { nObjectIDRef = id;} + UINT32 GetObjectID() const { return nObjectIDRef;} +}; +//End by + +enum BenError +{ + BenErr_OK = 0, + BenErr_NameConflict = 1, + BenErr_DuplicateObjectID = 2, + BenErr_UnknownBentoFormatVersion = 3, + BenErr_NamedObjectError = 4, + BenErr_NamedObjectIllegalValue = 5, + BenErr_InvalidTOC = 6, + BenErr_64BitOffsetNotSupported = 7, + BenErr_ReadPastEndOfTOC = 8, + BenErr_ContainerWithNoObjects = 9, + BenErr_ObjectWithNoProperties = 10, + BenErr_PropertyWithNoValues = 11, + BenErr_IllegalInMemoryTOC = 12, + BenErr_PropertyAlreadyExists = 13, + BenErr_UnexpectedEndOfFile = 14, + BenErr_InvalidWriteOffset = 15, + BenErr_InvalidImmediateWrite = 16, + BenErr_TOCSeedError = 17, + BenErr_ReadPastEndOfContainer = 18, + BenErr_DuplicateName = 19, + BenErr_BadReferencedList = 20, + BenErr_IllegalContinuedImmediate = 21, + BenErr_NotBentoContainer = 22, + BenErr_PropertyWithMoreThanOneValue = 23 + + // IMPORTANT - UtStream errors (UtErr_....) are also valid Bento + // errors. They have codes of 100 and higher. When, say, a Bento + // container open fails due to an access violation (somebody else, say, + // has it open exclusive), will get a UtErr code. If define own + // subclass of UtStream (custom handler), can define own error codes-- + // those should start at 200 +}; +/* + * These two functions are useless in SODC + * +inline UtError BenToUtError(BenError Err) +{ + if (Err == 0 || Err >= 100) + return (UtError) Err; + else return UtErr_Fail; +} + +inline BenError UtToBenError(UtError Err) +{ UT_ASSERT(Err == 0 || Err >= 100); return (BenError) Err; } +enum BenSeekMode { + BenSeek_FromStart = 1, + BenSeek_FromCurr = 2, + BenSeek_FromEnd = 3 +}; +*/ + +UtDefClassP(LtcBenContainer); +UtDefClassP(CBenIDListElmt); +UtDefClassP(CBenObject); +UtDefClassP(CBenProperty); +UtDefClassP(CBenReference); +UtDefClassP(CBenValue); +UtDefClassP(CBenValueSegment); +UtDefClassP(CBenNamedObjectListElmt); +UtDefClassP(CBenNamedObject); +UtDefClassP(CBenPropertyName); +UtDefClassP(CBenTypeName); + +typedef unsigned char BenByte; +typedef unsigned short BenWord; +typedef unsigned long BenDWord; +typedef void * BenDataPtr; +typedef const void * BenConstDataPtr; + +typedef unsigned long BenContainerPos; +typedef unsigned long BenObjectID; +typedef unsigned long BenGeneration; + +ULONG BenOpenContainer(LwpSvStream * pStream, pLtcBenContainer * ppContainer); + +class CBenIDListElmt : public CUtListElmt +{ +public: // Internal methods + CBenIDListElmt(BenObjectID ID, pCBenIDListElmt pPrev) : CUtListElmt(pPrev) + { cID = ID; } + CBenIDListElmt(BenObjectID ID) { cID = ID; } + BenObjectID GetID() { return cID; } + +private: // Data + BenObjectID cID; +}; + +class CBenNamedObjectListElmt : public CUtListElmt +{ +public: // Methods + // added by to remove warning 2004-06-24 + CBenNamedObjectListElmt(pCBenNamedObjectListElmt pPrev) : CUtListElmt(pPrev) + { cpNamedObject = NULL; } + void SetNamedObject(pCBenNamedObject pObj) + { + cpNamedObject = pObj; + } + + CBenNamedObjectListElmt(pCBenNamedObject pNamedObject, + pCBenNamedObjectListElmt pPrev) : CUtListElmt(pPrev) + { cpNamedObject = pNamedObject; } + pCBenNamedObject GetNamedObject() { return cpNamedObject; } + +private: // Data + pCBenNamedObject cpNamedObject; +}; + +class LtcUtBenValueStream : public SvStream +{ +public: + LtcUtBenValueStream(pCBenValue pValue); + ~LtcUtBenValueStream(); + +public: // Overridden methods +#if 0 // Deleted by 2004-06-16 + UtError Open(UtBool /* OpenNew */, UtStrmOpenFlags /* Flags */); + UtError Close(); + UtError Seek(long Offset, UtSeekMode Mode); + UtError GetPosition(unsigned long * pPosition); + UtError GetSize(unsigned long * pSize); + UtError Read(UtStrmDataPtr pBuffer, unsigned long MaxSize, + unsigned long * pAmtRead); + UtError Write(UtConstStrmDataPtr pBuffer, unsigned long Size, + unsigned long * pAmtWritten); + UtError Flush(); +#endif + + /* added by */ + CBenValue * GetValue(){ return cpValue; }; + ULONG GetSize() { return m_ulValueLength; }; +protected: // Overridden methods + + virtual ULONG GetData( void* pData, ULONG nSize ); + virtual ULONG PutData( const void* pData, ULONG nSize ); + virtual ULONG SeekPos( ULONG nPos ); + virtual void SetSize( ULONG nSize ); + virtual void FlushData(); + +#if 0// Deleted by 2004-06-16 + UtError TruncateSize(unsigned long Size); +#endif +private: // Data + pCBenValue cpValue; + unsigned long cCurrentPosition; + + ULONG m_ulValueLength; // Added by , sum of length of all sub-valuesegments +// void GetAmountLeft(ULONG * pAmtLeft); useless in SODC +}; + +class LtcBenContainer +{ +public: + BenError Open(); + void Release(); // Deletes container object--last call + BenError Close(); + BenError RegisterTypeName(const char * sTypeName, + pCBenTypeName * ppTypeName); + BenError RegisterPropertyName(const char * sPropertyName, + pCBenPropertyName * ppPropertyName); + // Pass NULL to begin iteration. Done when returns NULL. + // Objects are returned in order of increasing ID + pCBenObject GetNextObject(pCBenObject pCurrObject); + pCBenObject FindObject(BenObjectID ObjectID); + pCBenObject FindNextObjectWithProperty(pCBenObject pCurrObject, + BenObjectID PropertyID); + BenError BEN_EXPORT NewObject(pCBenObject * ppBenObject); + +public: // Internal methods + LtcBenContainer(LwpSvStream * pStream); + ~LtcBenContainer(); + + BenError Read(BenDataPtr pBuffer, unsigned long MaxSize, + unsigned long * pAmtRead); + BenError ReadKnownSize(BenDataPtr pBuffer, unsigned long Amt); + BenError SeekToPosition(BenContainerPos Pos); + BenError SeekFromEnd(long Offset); + + BenError GetPosition(BenContainerPos * pPosition); + + BenObjectID GetNextAvailObjectID() { return cNextAvailObjectID; } + void SetNextAvailObjectID(BenObjectID ID) { cNextAvailObjectID = ID; } + pCUtList GetObjects() { return &cObjects; } + pCUtList GetNamedObjects() { return &cNamedObjects; } + + // Added by 2004-06-10 + LtcUtBenValueStream * FindNextValueStreamWithPropertyName(const char * sPropertyName, LtcUtBenValueStream * pCurrentValueStream); + LtcUtBenValueStream * FindValueStreamWithPropertyName(const char * sPropertyName); + LtcUtBenValueStream * FindObjectValueStreamWithObjectIDAndProperty(BenObjectID ObjectID, const char * sPropertyName); + BenError CreateGraphicStreams(std::vector<SvStream *> * pStreamVector) ; + BenError CreateGraphicStream(SvStream * &pStream, const char *pObjectName); + //Add by 10/24/2005 + SotStorageStreamRef ConvertAswStorageToOLE2Stream(const char * sObjectName); + LtcUtBenValueStream * FindOLEStorageStreamWithObjectName(const char * sObjectName, AswEntry& rDirStruct); + void ReadAswEntry(SvStream * pStream, AswEntry& rEntry); + + BenError GetSize(ULONG * pLength); + LwpSvStream * GetStream() + { + return cpStream; + }; +private: // Data + CUtOwningList cObjects; + CUtList cNamedObjects; + LwpSvStream * cpStream; + ULONG m_ulLength; // Added for TOCRead.cpp + BenObjectID cNextAvailObjectID; // for new object +}; + +class CBenObject : public CBenIDListElmt +{ +public: + pCBenProperty GetNextProperty(pCBenProperty pCurrProperty); + pCBenProperty UseProperty(BenObjectID PropertyID); + void DeleteProperty(pCBenProperty pProperty); + pCBenValue UseValue(BenObjectID PropertyID); + pCBenValue UseSingleValue(); + // Inefficient to use this method if will use property multiple times-- + // instead register property and call UseProperty with property ID + pCBenValue UseValueWithPropertyName(const char * sPropertyName); + virtual UtBool IsNamedObject(); + pLtcBenContainer GetContainer() { return cpContainer; } + BenObjectID GetObjectID() { return GetID(); } + BenError BEN_EXPORT NewValue(BenObjectID PropertyID, BenObjectID TypeID, + pCBenValue * ppValue); +public: // Internal methods + CBenObject(pLtcBenContainer pContainer, BenObjectID ObjectID, + pCBenIDListElmt pPrev) : CBenIDListElmt(ObjectID, pPrev) + { cpContainer = pContainer; } + pCUtList GetProperties() { return &cProperties; } + +private: // Data + pLtcBenContainer cpContainer; + CUtOwningList cProperties; +}; + +class CBenValue : public CBenIDListElmt +{ +public: + unsigned long GetValueSize(); + BenError ReadValueData(BenDataPtr pBuffer, + unsigned long Offset, unsigned long MaxSize, unsigned long * pAmtRead); + BenError ReadValueDataKnownSize(BenDataPtr pBuffer, + unsigned long Offset, unsigned long Amt); + + BenError BEN_EXPORT WriteValueData(BenConstDataPtr pBuffer, + unsigned long Offset, unsigned long Size); + BenError BEN_EXPORT WriteValueData(BenConstDataPtr pBuffer, + unsigned long Offset, unsigned long Size, unsigned long * pAmtWritten); + BenError BEN_EXPORT WriteImmediateValueData(BenConstDataPtr pBuffer, + unsigned short Size); + BenError BEN_EXPORT TruncateValueSize(unsigned long NewSize); + BenError BEN_EXPORT NewReference(BenObjectID ReferencedObjectID, + pCBenReference pReference); + BenObjectID BEN_EXPORT GetReferencedObject(pCBenReference pReference); + + + pCBenProperty BEN_EXPORT GetProperty() { return cpProperty; } + +public: // Internal methods + // added by to remove WARNING 2004-06-24 + CBenValue(BenObjectID TypeID):CBenIDListElmt(TypeID) + { + cpProperty = NULL; + cpReferencedList = NULL; + } + + void SetProperty(pCBenProperty pProperty) + { + cpProperty = pProperty; + } + + CBenValue(pCBenProperty pProperty, BenObjectID TypeID) : + CBenIDListElmt(TypeID) + { + cpProperty = pProperty; + cpReferencedList = NULL; + } + BenObjectID GetTypeNameID() { return GetID(); } + inline pCBenValueSegment GetNextValueSegment(pCBenValueSegment + pCurrValueSegment); + inline pLtcBenContainer GetContainer(); + pCUtList GetValueSegments() { return &cValueSegments; } + BenObjectID GetReferencedListID(); + // Currently, no generation support + BenGeneration GetGeneration() { return 1; } + +private: // Data + pCBenProperty cpProperty; + CUtOwningList cValueSegments; + pCBenValue cpReferencedList; + unsigned long cReferencedObjectsSize; +}; + +class CBenProperty : public CBenIDListElmt +{ +public: + // In the Apple Bento, a property can have multiple values, each of a + // different type. But we never use it that way, so in this code a + // property has exactly one value + + pCBenValue UseValue() { return &cValue; } + pCBenObject GetBenObject() { return cpObject; } + pLtcBenContainer GetContainer() { return GetBenObject()->GetContainer(); } + +public: // Internal methods +#if 0 + CBenProperty(pCBenObject pObject, BenObjectID PropertyID, + BenObjectID TypeID, pCBenIDListElmt pPrevProperty) : + CBenIDListElmt(PropertyID, pPrevProperty), cValue(this, TypeID) + { cpObject = pObject; } +#endif + // changed by to remove WARNING here 2004-06-24 + CBenProperty(pCBenObject pObject, BenObjectID PropertyID, + BenObjectID TypeID, pCBenIDListElmt pPrevProperty) : + CBenIDListElmt(PropertyID, pPrevProperty), cValue(TypeID) + { + cpObject = pObject; + cValue.SetProperty(this); + } + +BenObjectID GetPropertyNameID() { return GetID(); } + +private: // Data + pCBenObject cpObject; + CBenValue cValue; +}; + +// In our implementation, reference is always just the object ID for the +// object referenced (but you shouldn't assume that) +#define BEN_REFERENCE_SIZE 4 + +class CBenReference +{ +public: // Methods + BenByte * GetData() { return cData; } + +private: // Data + BenByte cData[BEN_REFERENCE_SIZE]; +}; + +class CBenValueSegment : public CUtListElmt +{ +public: // Internal methods + CBenValueSegment(pCBenValue pValue, BenContainerPos Pos, + unsigned long Size) : CUtListElmt(pValue->GetValueSegments()) + { cpValue = pValue; cImmediate = UT_FALSE; cPos = Pos; + cSize = Size; } + CBenValueSegment(pCBenValue pValue, BenConstDataPtr pImmData, + unsigned short Size) : CUtListElmt(pValue->GetValueSegments()) + { cpValue = pValue; cImmediate = UT_TRUE; + UtHugeMemcpy(cImmData, pImmData, Size); cSize = Size; } + CBenValueSegment(BenContainerPos Pos, unsigned long Size) + { cpValue = NULL; cImmediate = UT_FALSE; cPos = Pos; + cSize = Size; } + CBenValueSegment(BenConstDataPtr pImmData, unsigned short Size) + { cpValue = NULL; cImmediate = UT_TRUE; + UtHugeMemcpy(cImmData, pImmData, Size); cSize = Size; } + UtBool IsLast() + { + return cpValue == NULL || cpValue->GetValueSegments()->GetLast() == + this; + } + UtBool IsImmediate() { return cImmediate; } + BenContainerPos GetPosition() { return cPos; } + unsigned long GetSize() { return cSize; } + void SetSize(unsigned long Size) { cSize = Size; } + BenByte * GetImmediateData() { return cImmData; } + +private: // Data + pCBenValue cpValue; + UtBool cImmediate; + union + { + BenContainerPos cPos; + BenByte cImmData[4]; + }; + unsigned long cSize; +}; + +inline pCBenValueSegment CBenValue::GetNextValueSegment(pCBenValueSegment + pCurrValueSegment) +{ return (pCBenValueSegment) cValueSegments.GetNextOrNULL(pCurrValueSegment); } + +inline pLtcBenContainer CBenValue::GetContainer() +{ return GetProperty()->GetContainer(); } + +class CBenNamedObject : public CBenObject +{ +public: // Methods + virtual UtBool IsNamedObject(); + virtual UtBool IsPropertyName(); + virtual UtBool IsTypeName(); + +public: // Internal methods + CBenNamedObject(pLtcBenContainer pContainer, BenObjectID ObjectID, + pCBenObject pPrevObject, const char * sName, + pCBenNamedObjectListElmt pPrevNamedObjectListElmt); + const char * GetName() { return csName.data(); } + + + const char * GetNameCStr() { return csName.c_str(); } + + + void SetPosition(BenContainerPos Pos) { cPos = Pos; } + BenContainerPos GetPosition(void) { return cPos; } + size_t GetLength(void) { return csName.length()+ 1; } + pCBenNamedObjectListElmt GetNameListElmt() { return &cNameListElmt; } + +private: // Data + string csName; + CBenNamedObjectListElmt cNameListElmt; + BenContainerPos cPos; +}; + +class CBenPropertyName : public CBenNamedObject +{ +public: // Internal methods + CBenPropertyName(pLtcBenContainer pContainer, BenObjectID ObjectID, + pCBenObject pPrevObject, const char * sName, + pCBenNamedObjectListElmt pPrevNamedObjectListElmt) : + CBenNamedObject(pContainer, ObjectID, pPrevObject, sName, + pPrevNamedObjectListElmt) { ; } + virtual UtBool IsPropertyName(); +}; + +class CBenTypeName : public CBenNamedObject +{ +public: // Internal methods + CBenTypeName(pLtcBenContainer pContainer, BenObjectID ObjectID, + pCBenObject pPrevObject, const char * sName, + pCBenNamedObjectListElmt pPrevNamedObjectListElmt) : + CBenNamedObject(pContainer, ObjectID, pPrevObject, sName, + pPrevNamedObjectListElmt) { ; } + virtual UtBool IsTypeName(); +}; + + +} // end namespace OpenStormBento +#endif diff --git a/lotuswordpro/source/filter/bentoid.hxx b/lotuswordpro/source/filter/bentoid.hxx new file mode 100644 index 000000000000..39e86370b995 --- /dev/null +++ b/lotuswordpro/source/filter/bentoid.hxx @@ -0,0 +1,110 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef BENTOID_H +#define BENTOID_H + +namespace OpenStormBento +{ + +#define BEN_OBJID_TOC 1 // TOC object ID +#define BEN_PROPID_TOC_SEED 2 // TOC object starting seed +#define BEN_PROPID_TOC_MIN_SEED 3 // TOC object minimum seed +#define BEN_PROPID_TOC_OBJECT 4 // TOC object +#define BEN_PROPID_TOC_CONTAINER 5 // TOC object entire container +#define BEN_PROPID_TOC_DELETED 6 // TOC object amount deleted +#define BEN_TYPEID_TOC_TYPE 19 // TOC object property value type +#define BEN_OBJID_WRITEABLE 20 // Predefined ID's below this value will be + // written to container TOC. Predefined IDs + // above this are not written +#define BEN_TYPEID_7_BIT_ASCII 21 // 7-bit ASCII +#define BEN_PROPID_GLOBAL_TYPE_NAME 23 // Global type name +#define BEN_PROPID_GLOBAL_PROPERTY_NAME 24 // Global property name +#define BEN_PROPID_OBJ_REFERENCES 31 // Referenced objects from an object +#define BEN_TYPEID_OBJ_REFERENCES_DATA 32 // Reference data +#define BEN_OBJID_MIN_GENERAL_ID 100 // Min object ID for general std objects + +#define BEN_NEW_OBJECT 1 // object + property + type +#define BEN_NEW_PROPERTY 2 // property + type +#define BEN_NEW_TYPE 3 // type +#define BEN_EXPLICIT_GEN 4 // generation + +#define BEN_SEGMENT_CODE_START 5 +#define BEN_OFFSET4_LEN4 5 // 4-byte offset + 4-byte length +#define BEN_CONT_OFFSET4_LEN4 6 // continued 4-byte offset + 4-byte length +#define BEN_OFFSET8_LEN4 7 // 8-byte offset + 4-byte length +#define BEN_CONT_OFFSET8_LEN4 8 // continued 8-byte offset + 4-byte length +#define BEN_IMMEDIATE0 9 // immediate (length = 0) +#define BEN_IMMEDIATE1 10 // immediate (length = 1) +#define BEN_IMMEDIATE2 11 // immediate (length = 2) +#define BEN_IMMEDIATE3 12 // immediate (length = 3) +#define BEN_IMMEDIATE4 13 // immediate (length = 4) +#define BEN_CONT_IMMEDIATE4 14 // continued immediate (length = 4) +#define BEN_SEGMENT_CODE_END 14 + +#define BEN_REFERENCE_LIST_ID 15 // references recording object ID +#define BEN_RESERVED4B 16 +#define BEN_RESERVED4C 17 +#define BEN_RESERVED8A 18 // reserved for future use of 8 byte entry +#define BEN_RESERVED8B 19 // reserved for future use of 8 byte entry +#define BEN_RESERVED8C 20 // reserved for future use of 8 byte entry +#define BEN_RESERVED12A 21 // reserved for future use of 12 byte entry +#define BEN_RESERVED12B 22 // reserved for future use of 12 byte entry +#define BEN_RESERVED12C 23 // reserved for future use of 12 byte entry +#define BEN_END_OF_BUFFER 24 // end of current buffer, go to next +#define BEN_READ_PAST_END_OF_TOC 50 // Our code +#define BEN_NOOP 0xFF + +}// end OpenStormBento namespace +#endif diff --git a/lotuswordpro/source/filter/benval.cxx b/lotuswordpro/source/filter/benval.cxx new file mode 100644 index 000000000000..ada799ac5f66 --- /dev/null +++ b/lotuswordpro/source/filter/benval.cxx @@ -0,0 +1,348 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "first.hxx" +#include "assert.h" +namespace OpenStormBento +{ + +unsigned long +CBenValue::GetValueSize() +{ + unsigned long Size = 0; + pCBenValueSegment pCurr = NULL; + while ((pCurr = GetNextValueSegment(pCurr)) != NULL) + Size += pCurr->GetSize(); + return Size; +} + +BenError +CBenValue::ReadValueData(BenDataPtr pReadBuffer, unsigned long Offset, + unsigned long Amt, unsigned long * pAmtRead) +{ + BenError Err; + unsigned long SegOffset = 0; + *pAmtRead = 0; + pCBenValueSegment pCurrSeg = NULL; + pLtcBenContainer pContainer = GetContainer(); + BenByteDataPtr pBuffer = (BenByteDataPtr) pReadBuffer; + + /// pReadBuffer -- pointer to buffer of read result, allocated outside this function + /// Offset -- read buffer's start offset address, relative value in the whole value stream + /// Amt -- read buffer's size + /// pAmtRead -- return the actual read size + + /// SegOffset -- current segment's start address offset, relative value in the whole value stream + + while ((pCurrSeg = GetNextValueSegment(pCurrSeg)) != NULL) + { + if (Amt == 0) /// whole buffer is full now, so return + return BenErr_OK; + + if (SegOffset <= Offset && Offset < SegOffset + pCurrSeg->GetSize()) /// begin at current segment + { + unsigned long OffsetIntoSeg = Offset - SegOffset; /// relative value in this value segment stream + + unsigned long AmtThisSeg = UtMin(Amt, pCurrSeg->GetSize() - + OffsetIntoSeg); /// size read in this segment, it's minimal value between Amt & + /// remain part from OffsetIntoSeg to the end of this segment + + unsigned long AmtReadThisSeg; /// actual read size in this segment + if (pCurrSeg->IsImmediate()) + { + UtHugeMemcpy(pBuffer, pCurrSeg->GetImmediateData() + + OffsetIntoSeg, AmtThisSeg); + AmtReadThisSeg = AmtThisSeg; + } + else + { + if ((Err = pContainer->SeekToPosition(pCurrSeg->GetPosition() + + OffsetIntoSeg)) != BenErr_OK) + return Err; + + if ((Err = pContainer->Read(pBuffer, AmtThisSeg, + &AmtReadThisSeg)) != BenErr_OK) + return Err; + } + + *pAmtRead += AmtReadThisSeg; + + if (AmtThisSeg != AmtReadThisSeg) + return BenErr_UnexpectedEndOfFile; + + pBuffer += AmtReadThisSeg; + Offset += AmtReadThisSeg; + Amt -= AmtReadThisSeg; + } + + SegOffset += pCurrSeg->GetSize(); + } + return BenErr_OK; +} + +BenError +CBenValue::ReadValueDataKnownSize(BenDataPtr pBuffer, unsigned long Offset, + unsigned long Amt) +{ + unsigned long AmtRead; + BenError Err = ReadValueData(pBuffer, Offset, Amt, &AmtRead); + + if (Err == UtErr_OK && AmtRead != Amt) + Err = (BenError) UtErr_Fail; + + return Err; +} + +BenError +CBenValue::WriteValueData(BenConstDataPtr pWriteBuffer, unsigned long Offset, + unsigned long Amt, unsigned long * pAmtWritten) +{ +#if 0// Deleted by 2004-06-16 + unsigned long AmtWritten; + if (pAmtWritten == NULL) + pAmtWritten = &AmtWritten; + + *pAmtWritten = 0; + + if (Amt == 0) + return BenErr_OK; + + unsigned long SegOffset = 0; + pCBenValueSegment pCurrSeg = NULL; + BenError Err; + pLtcBenContainer pContainer = GetContainer(); + BenConstByteDataPtr pBuffer = (BenConstByteDataPtr) pWriteBuffer; + + while ((pCurrSeg = GetNextValueSegment(pCurrSeg)) != NULL) + { + if (Amt == 0) + return BenErr_OK; + + if (SegOffset <= Offset && Offset < SegOffset + pCurrSeg->GetSize()) + { + unsigned long OffsetIntoSeg = Offset - SegOffset; + + unsigned long AmtThisSeg = UtMin(Amt, pCurrSeg->GetSize() - + OffsetIntoSeg); + + if (pCurrSeg->IsImmediate()) + { + UtHugeMemcpy(pCurrSeg->GetImmediateData() + OffsetIntoSeg, + pBuffer, AmtThisSeg); + *pAmtWritten += AmtThisSeg; + } + else + { + if ((Err = pContainer->SeekToPosition(pCurrSeg->GetPosition() + + OffsetIntoSeg)) != BenErr_OK) + return Err; + + unsigned long AmtWrittenThisWrite; + Err = pContainer->Write(pBuffer, AmtThisSeg, + &AmtWrittenThisWrite); + *pAmtWritten += AmtWrittenThisWrite; + if (Err != BenErr_OK) + return Err; + } + + pBuffer += AmtThisSeg; + Offset += AmtThisSeg; + Amt -= AmtThisSeg; + } + + SegOffset += pCurrSeg->GetSize(); + } + + if (Offset > SegOffset) + { + assert(! "Write past end of value"); + return BenErr_InvalidWriteOffset; + } + + if (Amt == 0) + return BenErr_OK; + + if ((Err = pContainer->SeekFromEnd(0)) != BenErr_OK) + return Err; + + BenContainerPos EndFilePos; + if ((Err = pContainer->GetPosition(&EndFilePos)) != BenErr_OK) + return Err; + + unsigned long AmtWrittenThisWrite; + Err = pContainer->Write(pBuffer, Amt, &AmtWrittenThisWrite); + *pAmtWritten += AmtWrittenThisWrite; + if (Err != BenErr_OK) + return Err; + + pCBenValueSegment pLastSeg = (pCBenValueSegment) ( + cValueSegments.GetLast() == cValueSegments.GetTerminating() ? + NULL : cValueSegments.GetLast() ); + if (pLastSeg != NULL && ! pLastSeg->IsImmediate() && + pLastSeg->GetPosition() + pLastSeg->GetSize() == EndFilePos) + pLastSeg->SetSize(pLastSeg->GetSize() + Amt); + else new CBenValueSegment(this, EndFilePos, Amt); +#endif + return BenErr_OK; +} + +BenError +CBenValue::TruncateValueSize(unsigned long NewSize) +{ + unsigned long SegOffset = 0; + + pCBenValueSegment pCurrSeg = GetNextValueSegment(NULL); + while (pCurrSeg != NULL) + { + pCBenValueSegment pNextSeg = GetNextValueSegment(pCurrSeg); + + long SegSize = UtMin((long) pCurrSeg->GetSize(), (long) NewSize - + (long) SegOffset); + + if (SegSize <= 0) + delete pCurrSeg; + else pCurrSeg->SetSize(SegSize); + + SegOffset += SegSize; + pCurrSeg = pNextSeg; + } + + return BenErr_OK; +} + +BenError +CBenValue::WriteValueData(BenConstDataPtr pWriteBuffer, unsigned long Offset, + unsigned long Amt) +{ + unsigned long AmtWritten; + return WriteValueData(pWriteBuffer, Offset, Amt, &AmtWritten); +} + +BenError +CBenValue::WriteImmediateValueData(BenConstDataPtr pBuffer, + unsigned short Size) +{ + // Only one write can be an immediate value in current implementation + if (cValueSegments.GetFirst() != cValueSegments.GetTerminating() || + Size > 4) + return BenErr_InvalidImmediateWrite; + + if (Size == 0) + return BenErr_OK; + + new CBenValueSegment(this, pBuffer, Size); + return BenErr_OK; +} + +BenError +CBenValue::NewReference(BenObjectID ReferencedObjectID, pCBenReference + pReference) +{ + BenError Err; + + if (cpReferencedList == NULL) + { + pLtcBenContainer pContainer = cpProperty->GetContainer(); + + pCBenObject pNewObject; + if ((Err = pContainer->NewObject(&pNewObject)) != BenErr_OK) + return Err; + + pCBenValue pNewValue; + if ((Err = pNewObject->NewValue(BEN_PROPID_OBJ_REFERENCES, + BEN_TYPEID_OBJ_REFERENCES_DATA, &pNewValue)) != BenErr_OK) + { + delete pNewObject; + return Err; + } + + cpReferencedList = pNewValue; + cReferencedObjectsSize = 0; + } + + BenByte Buffer[8]; + UtPutIntelDWord(Buffer, ReferencedObjectID); + UtPutIntelDWord(Buffer + 4, ReferencedObjectID); + + UtPutIntelDWord(pReference->GetData(), ReferencedObjectID); + + if ((Err = cpReferencedList->WriteValueData(Buffer, + cReferencedObjectsSize, 8)) != BenErr_OK) + return Err; + + cReferencedObjectsSize += 8; + return BenErr_OK; +} + +BenObjectID +CBenValue::GetReferencedObject(pCBenReference pReference) +{ + return UtGetIntelDWord(pReference->GetData()); +} + +BenObjectID +CBenValue::GetReferencedListID() +{ + if (cpReferencedList != NULL) + return cpReferencedList->GetProperty()->GetBenObject()->GetID(); + else + { +#ifdef BENUTIL_SUPPORT + return cReferencedListID; +#else + return 0; +#endif + } +} +}//end namespace OpenStormBento diff --git a/lotuswordpro/source/filter/explode.cxx b/lotuswordpro/source/filter/explode.cxx new file mode 100644 index 000000000000..27d236348141 --- /dev/null +++ b/lotuswordpro/source/filter/explode.cxx @@ -0,0 +1,647 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include <assert.h> +#include "explode.hxx" +#include <math.h> + const static char Tree1String[][32] = { + "101", + "11", + "100", + "011", + "0101", + "0100", + "0011", + "00101", + "00100", + "00011", + "00010", + "000011", + "000010", + "000001", + "0000001", + "0000000", + }; + + const static char Tree2String[][32] = { + "11" , + "1011" , + "1010" , + "10011" , + "10010" , + "10001" , + "10000" , + "011111" , + "011110" , + "011101" , + "011100" , + "011011" , + "011010" , + "011001" , + "011000" , + "010111" , + "010110" , + "010101" , + "010100" , + "010011" , + "010010" , + "010001" , + "0100001" , + "0100000" , + "0011111" , + "0011110" , + "0011101" , + "0011100" , + "0011011" , + "0011010" , + "0011001" , + "0011000" , + "0010111" , + "0010110" , + "0010101" , + "0010100" , + "0010011" , + "0010010" , + "0010001" , + "0010000" , + "0001111" , + "0001110" , + "0001101" , + "0001100" , + "0001011" , + "0001010" , + "0001001" , + "0001000" , + "00001111", + "00001110", + "00001101", + "00001100", + "00001011", + "00001010", + "00001001", + "00001000", + "00000111", + "00000110", + "00000101", + "00000100", + "00000011", + "00000010", + "00000001", + "00000000", + }; + +Decompression::Decompression(SvStream * pInStream, SvStream * pOutStream): + m_pInStream(pInStream), m_pOutStream(pOutStream), m_pBuffer(m_Buffer), m_nOutputBufferPos(0), + m_nBitsLeft(0), m_nBytesLeft(0), m_nCurrent4Byte(0) +{ + if (!m_pInStream || !m_pOutStream ) + { + assert(sal_False); + } + ConstructTree1(); + ConstructTree2(); + fillArray(); +} +/** + * @descr read specified bits from input stream + * @argument iCount - number of bits to be read, less than 31 + * @argument nBits - bits read + * @return 0 - read OK, otherwise error + */ +sal_uInt32 Decompression::ReadBits(sal_uInt16 iCount, sal_uInt32 & nBits) +{ + if ( (iCount == 0) || (iCount > 32 ) ) + { + return 1; + } + + sal_uInt32 val = 0; /* bit accumulator */ + + /* load at least need bits into val */ + val = m_nCurrent4Byte; + while (m_nBitsLeft < iCount) + { + if (m_nBytesLeft == 0) + { + m_nBytesLeft = m_pInStream->Read(m_Buffer, CHUNK); + m_pBuffer = m_Buffer; + if (m_nBytesLeft == 0) return 1; + } + val |= (sal_uInt32)(*m_pBuffer++) << m_nBitsLeft; /* load eight bits */ + m_nBytesLeft --; + m_nBitsLeft += 8; + } + + /* drop need bits and update buffer, always zero to seven bits left */ + m_nCurrent4Byte = val >> iCount; + m_nBitsLeft -= iCount; + + /* return need bits, zeroing the bits above that */ + nBits = val & ((1 << iCount) - 1); + + return 0; +} +/** + * @descr decompress input and write output + * @return 0 - read OK, otherwise error + */ +sal_Int32 Decompression::explode() +{ + /* The first 2 bytes are parameters */ + sal_uInt32 P1; + if (0 != ReadBits(8, P1))/* 0 or 1 */ + return -1; + + /* I think this means 0=binary and 1=ascii file, but in RESOURCEs I saw always 0 */ + if (P1 >= 1) // changed per 's review comments + return -1; + + sal_uInt32 P2; + if (0 != ReadBits(8, P2)) + return -1; + + /* must be 4,5 or 6 and it is a parameter for the decompression algorithm */ + if (P2 < 4 || P2 > 6) + return -2; + + m_nOutputBufferPos = 0; + /* Now, a bit stream follows, which is decoded as described below: */ + /* The algorithm terminates as soon as it runs out of bits. */ + while(sal_True) + { + // read 1 bit (take bits from the lowest value (LSB) to the MSB i.e. bit 0, bit 1 etc ...) + sal_uInt32 iBit; + if (0 != ReadBits(1, iBit)) + break; + if ( 0 == (iBit & 0x01) ) + { + //if the bit is 0 read 8 bits and write it to the output as it is. + sal_uInt32 symbol; + if (0 != ReadBits(8, symbol)) + break; + m_Output[m_nOutputBufferPos++] = (sal_uInt8)symbol; + if (m_nOutputBufferPos == MAXWIN) + { + m_pOutStream->Write(m_Output, m_nOutputBufferPos); + m_nOutputBufferPos = 0; + } + continue; + } + // if the bit is 1 we have here a length/distance pair: + // -decode a number with Hufmman Tree #1; variable bit length, result is 0x00 .. 0x0F -> L1 + sal_uInt32 L1 = Decode(m_Tree1); + sal_uInt32 Length; + if (L1 <= 7) + { + //if L1 <= 7: + // LENGTH = L1 + 2 + Length = L1 + 2; + } + else + { + // if L1 > 7 + // read more (L1-7) bits -> L2 + // LENGTH = L2 + M[L1-7] + 2 + sal_uInt32 L2; + if (0 != ReadBits((sal_uInt16)(L1 - 7), L2)) + break; + Length = L2 + 2 + m_iArrayOfM[L1 -7]; + } + if (Length == 519) + { + // end of compressed data + break; + } + + // - decode another number with Hufmann Tree #2 giving result 0x00..0x3F -> D1 + sal_uInt32 D1 = Decode(m_Tree2); + sal_uInt32 D2; + if (Length == 2) + { + // if LENGTH == 2 + // D1 = D1 << 2 + // read 2 bits -> D2 + D1 = D1 << 2; + if (0 != ReadBits(2, D2)) + break; + } + else + { + // else + // D1 = D1 << P2 // the parameter 2 + // read P2 bits -> D2 + D1 = D1 << P2; + if (0 != ReadBits((sal_uInt16)P2, D2)) + break; + } + // DISTANCE = (D1 | D2) + 1 + sal_uInt32 distance = (D1 | D2) + 1; + + // - now copy LENGTH bytes from (output_ptr-DISTANCE) to output_ptr + // write current buffer to output + m_pOutStream->Write(m_Output, m_nOutputBufferPos); + m_nOutputBufferPos = 0; + + // remember current position + sal_uInt32 nOutputPos = m_pOutStream->Tell(); + if (distance > nOutputPos) + return -3; // format error + + m_pOutStream->Flush(); + // point back to copy position and read bytes + m_pOutStream->SeekRel((long)-distance); + sal_uInt8 sTemp[MAXWIN]; + sal_uInt32 nRead = distance > Length? Length:distance; + m_pOutStream->Read(sTemp, nRead); + if (nRead != Length) + { + // fill the buffer with read content repeatly until full + for (sal_uInt32 i=nRead; i<Length; i++) + { + sTemp[i] = sTemp[i-nRead]; + } + } + + // restore output stream position + m_pOutStream->Seek(nOutputPos); + + // write current buffer to output + m_pOutStream->Write(sTemp, Length); + } + return 0; +} +/** + * @descr bits to string + * @return + */ +void Decompression::ToString(sal_uInt32 nBits, sal_Char *pChar, sal_uInt32 nLen) +{ + sal_uInt32 nBit; + for (sal_uInt32 i=nLen; i > 0; i--) + { + nBit = (nBits >> (i -1) ) & 0x01; + pChar[nLen - i] = nBit ? '1':'0'; + } + pChar[nLen] = '\0'; + return; +} + +/** + * @descr decode tree 1 for length + * @return the decoded value + */ +sal_uInt32 Decompression::Decode(HuffmanTreeNode * pRoot) +{ + sal_uInt32 nRet; + sal_uInt32 nRead, nReadAlready; + + if( 0 != ReadBits(1, nReadAlready)) + return 0; // something wrong + + for (sal_uInt16 i=2; i <= 8; i++) + { + if ( 0 != ReadBits(1, nRead)) + return 0; // something wrong + + nReadAlready = (nReadAlready << 1) | (nRead & 0x01); + + sal_Char sCode[16]; + ToString(nReadAlready, sCode, i); + nRet = pRoot->QueryValue(sCode); + if (nRet != 0xffffffff) + { + break; + } + } + return nRet; +} +/** + * @descr construct tree 1 for length + * @return + */ +void Decompression::ConstructTree1() +{ // Huffman Tree #1 + // The first huffman tree (the Section called Decompression algorithm HUFFMAN) contains the length values. It is described by the following table: + // value (hex) code (binary) + // 0 101 + // 1 11 + // 2 100 + // 3 011 + // 4 0101 + // 5 0100 + // 6 0011 + // 7 0010 1 + // 8 0010 0 + // 9 0001 1 + // a 0001 0 + // b 0000 11 + // c 0000 10 + // d 0000 01 + // e 0000 001 + // f 0000 000 + m_Tree1 = new HuffmanTreeNode(); + for (sal_uInt32 i=0; i< 16; i++) + { + m_Tree1->InsertNode(i, Tree1String[i]); + } + /* + m_Tree1->InsertNode(0, "101"); + m_Tree1->InsertNode(1, "11"); + m_Tree1->InsertNode(2, "100"); + m_Tree1->InsertNode(3, "011"); + m_Tree1->InsertNode(4, "0101"); + m_Tree1->InsertNode(5, "0100"); + m_Tree1->InsertNode(6, "0011"); + m_Tree1->InsertNode(7, "00101"); + m_Tree1->InsertNode(8, "00100"); + m_Tree1->InsertNode(9, "00011"); + m_Tree1->InsertNode(10, "00010"); + m_Tree1->InsertNode(11, "000011"); + m_Tree1->InsertNode(12, "000010"); + m_Tree1->InsertNode(13, "000001"); + m_Tree1->InsertNode(14, "0000001"); + m_Tree1->InsertNode(15, "0000000"); + */ +} +/** + * @descr construct tree 2 for distance + * @return + */ +void Decompression::ConstructTree2() +{ + + m_Tree2 = new HuffmanTreeNode(); + for (sal_uInt32 i=0; i< 64; i++) + { + m_Tree2->InsertNode(i, Tree2String[i]); + } +#if 0 + m_Tree2 = new HuffmanTreeNode(); + //Huffman Tree #2 + //The second huffman code tree contains the distance values. It can be built from the following table: + //value (hex) code (binary) + //00 11 + //01 1011 + //02 1010 + //03 1001 1 + //04 1001 0 + //05 1000 1 + //06 1000 0 + //07 0111 11 + //08 0111 10 + //09 0111 01 + //0a 0111 00 + //0b 0110 11 + //0c 0110 10 + //0d 0110 01 + //0e 0110 00 + //0f 0101 11 + m_Tree2->InsertNode(0x0, "11"); + m_Tree2->InsertNode(0x1, "1011"); + m_Tree2->InsertNode(0x2, "1010"); + m_Tree2->InsertNode(0x3, "10011"); + m_Tree2->InsertNode(0x4, "10010"); + m_Tree2->InsertNode(0x5, "10001"); + m_Tree2->InsertNode(0x6, "10000"); + m_Tree2->InsertNode(0x7, "011111"); + m_Tree2->InsertNode(0x8, "011110"); + m_Tree2->InsertNode(0x9, "011101"); + m_Tree2->InsertNode(0x0a, "011100"); + m_Tree2->InsertNode(0x0b, "011011"); + m_Tree2->InsertNode(0x0c, "011010"); + m_Tree2->InsertNode(0x0d, "011001"); + m_Tree2->InsertNode(0x0e, "011000"); + m_Tree2->InsertNode(0x0f, "010111"); + //10 0101 10 + //11 0101 01 + //12 0101 00 + //13 0100 11 + //14 0100 10 + //15 0100 01 + //16 0100 001 + //17 0100 000 + //18 0011 111 + //19 0011 110 + // 1a 0011 101 + // 1b 0011 100 + // 1c 0011 011 + // 1d 0011 010 + // 1e 0011 001 + // 1f 0011 000 + m_Tree2->InsertNode(0x10, "010110"); + m_Tree2->InsertNode(0x11, "010101"); + m_Tree2->InsertNode(0x12, "010100"); + m_Tree2->InsertNode(0x13, "010011"); + m_Tree2->InsertNode(0x14, "010010"); + m_Tree2->InsertNode(0x15, "010001"); + m_Tree2->InsertNode(0x16, "0100001"); + m_Tree2->InsertNode(0x17, "0100000"); + m_Tree2->InsertNode(0x18, "0011111"); + m_Tree2->InsertNode(0x19, "0011110"); + m_Tree2->InsertNode(0x1a, "0011101"); + m_Tree2->InsertNode(0x1b, "0011100"); + m_Tree2->InsertNode(0x1c, "0011011"); + m_Tree2->InsertNode(0x1d, "0011010"); + m_Tree2->InsertNode(0x1e, "0011001"); + m_Tree2->InsertNode(0x1f, "0011000"); + //20 0010 111 + //21 0010 110 + //22 0010 101 + //23 0010 100 + //24 0010 011 + //25 0010 010 + //26 0010 001 + //27 0010 000 + //28 0001 111 + //29 0001 110 + // 2a 0001 101 + // 2b 0001 100 + // 2c 0001 011 + // 2d 0001 010 + // 2e 0001 001 + // 2f 0001 000 + m_Tree2->InsertNode(0x20, "0010111"); + m_Tree2->InsertNode(0x21, "0010110"); + m_Tree2->InsertNode(0x22, "0010101"); + m_Tree2->InsertNode(0x23, "0010100"); + m_Tree2->InsertNode(0x24, "0010011"); + m_Tree2->InsertNode(0x25, "0010010"); + m_Tree2->InsertNode(0x26, "0010001"); + m_Tree2->InsertNode(0x27, "0010000"); + m_Tree2->InsertNode(0x28, "0001111"); + m_Tree2->InsertNode(0x29, "0001110"); + m_Tree2->InsertNode(0x2a, "0001101"); + m_Tree2->InsertNode(0x2b, "0001100"); + m_Tree2->InsertNode(0x2c, "0001011"); + m_Tree2->InsertNode(0x2d, "0001010"); + m_Tree2->InsertNode(0x2e, "0001001"); + m_Tree2->InsertNode(0x2f, "0001000"); + //30 0000 1111 + //31 0000 1110 + //32 0000 1101 + //33 0000 1100 + //34 0000 1011 + //35 0000 1010 + //36 0000 1001 + //37 0000 1000 + //38 0000 0111 + //39 0000 0110 + // 3a 0000 0101 + // 3b 0000 0100 + // 3c 0000 0011 + // 3d 0000 0010 + // 3e 0000 0001 + // 3f 0000 0000 + m_Tree2->InsertNode(0x30, "00001111"); + m_Tree2->InsertNode(0x31, "00001110"); + m_Tree2->InsertNode(0x32, "00001101"); + m_Tree2->InsertNode(0x33, "00001100"); + m_Tree2->InsertNode(0x34, "00001011"); + m_Tree2->InsertNode(0x35, "00001010"); + m_Tree2->InsertNode(0x36, "00001001"); + m_Tree2->InsertNode(0x37, "00001000"); + m_Tree2->InsertNode(0x38, "00000111"); + m_Tree2->InsertNode(0x39, "00000110"); + m_Tree2->InsertNode(0x3a, "00000101"); + m_Tree2->InsertNode(0x3b, "00000100"); + m_Tree2->InsertNode(0x3c, "00000011"); + m_Tree2->InsertNode(0x3d, "00000010"); + m_Tree2->InsertNode(0x3e, "00000001"); + m_Tree2->InsertNode(0x3f, "00000000"); +#endif + //where bits should be read from the left to the right. +} +/** + * @descr + * @return + */ +void Decompression::fillArray() +{ + m_iArrayOfM[0] = 7; + for (int i=1; i < 16; i++) + { + double dR = 2.0; + m_iArrayOfM[i] = m_iArrayOfM[i - 1]+ (sal_uInt32)pow(dR, i-1);//2 + } +} + +HuffmanTreeNode::HuffmanTreeNode(sal_uInt32 nValue , HuffmanTreeNode * pLeft , HuffmanTreeNode * pRight ) +{ + value = nValue; + left = pLeft; + right = pRight; +} +HuffmanTreeNode::~HuffmanTreeNode() +{ + if (left) + { + delete left; + left = NULL; + } + if (right) + { + delete right; + right = NULL; + } +} + +HuffmanTreeNode * HuffmanTreeNode::InsertNode(sal_uInt32 nValue, const sal_Char * pInCode) +{ + HuffmanTreeNode *pNew = new HuffmanTreeNode(nValue); + sal_Char pCode[32]; + strcpy(pCode, pInCode ); + + // query its parents + sal_Char cLast = pCode[strlen(pCode) - 1]; + pCode[strlen(pCode) - 1] = '\0'; + HuffmanTreeNode * pParent = QueryNode(pCode); + if (!pParent) + { + pParent = InsertNode(0xffffffff, pCode); + } + if (cLast == '0') + pParent->left = pNew; + else // (cChar == '1') + pParent->right = pNew; + + return pNew; +} +HuffmanTreeNode * HuffmanTreeNode::QueryNode(const sal_Char * pCode) +{ + sal_uInt32 nLen = strlen(pCode); + + HuffmanTreeNode * pNode = this; // this is the root + for(sal_uInt32 i=0; i<nLen && pNode; i++) + { + sal_Char cChar= pCode[i]; + if (cChar == '0') + { + pNode = pNode->left; + } + else // (cChar == '1') + { + pNode = pNode->right; + } + } + return pNode; +} + +sal_uInt32 HuffmanTreeNode::QueryValue(const sal_Char * pCode) +{ + HuffmanTreeNode * pNode =QueryNode(pCode); + if (pNode) + return pNode->value; + + return 0xffffffff; +} diff --git a/lotuswordpro/source/filter/explode.hxx b/lotuswordpro/source/filter/explode.hxx new file mode 100644 index 000000000000..40843d640bd3 --- /dev/null +++ b/lotuswordpro/source/filter/explode.hxx @@ -0,0 +1,125 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _EXPLODE_HXX_ +#define _EXPLODE_HXX_ + +#include <tools/stream.hxx> + +class HuffmanTreeNode +{ +public: + HuffmanTreeNode * left; + HuffmanTreeNode * right; + sal_uInt32 value; + + HuffmanTreeNode(sal_uInt32 value = 0xffffffff, HuffmanTreeNode * left = NULL, HuffmanTreeNode * right = NULL) ; + ~HuffmanTreeNode() ; + HuffmanTreeNode * InsertNode(sal_uInt32 nValue, const sal_Char * pInCode); + HuffmanTreeNode * QueryNode(const sal_Char *pCode); + sal_uInt32 QueryValue(const sal_Char *pCode); +}; + + +/** + * @brief + * define the function type for input read, output write + */ +#define CHUNK 16384 +#define MAXWIN 4096 /* maximum window size */ +class Decompression +{ +public: + Decompression(SvStream * pInStream, SvStream * pOutStream); + ~Decompression() + { + delete m_Tree1; + delete m_Tree2; + }; + /** + * @brief + * decompress from instream to outstream + */ + sal_Int32 explode(); + sal_uInt32 ReadBits(sal_uInt16 iCount, sal_uInt32 & nBits) ; + sal_uInt32 Decode(HuffmanTreeNode * pRoot); + + /** + * @brief + * compressed/decompressed stream + */ + SvStream *m_pInStream; + SvStream *m_pOutStream; + + sal_uInt32 m_nCurrent4Byte; // bit buffer + sal_uInt32 m_nBitsLeft; // number of bits remained in bit buffer + + sal_uInt8 m_Buffer[CHUNK]; // input byte buffer + sal_uInt8 *m_pBuffer; // pointer to input buffer + sal_uInt32 m_nBytesLeft; // number of bytes remained in byte buffer + + sal_uInt8 m_Output[MAXWIN]; // output byte buffer + sal_uInt32 m_nOutputBufferPos; // pointer to output buffer + + sal_uInt32 m_iArrayOfM[16]; + + + HuffmanTreeNode *m_Tree1, *m_Tree2; + + void ConstructTree1(); + void ConstructTree2(); + void fillArray(); + void ToString(sal_uInt32 nBits, sal_Char *pChar, sal_uInt32 nLen); +}; +#endif diff --git a/lotuswordpro/source/filter/first.hxx b/lotuswordpro/source/filter/first.hxx new file mode 100644 index 000000000000..c90c34b16cdc --- /dev/null +++ b/lotuswordpro/source/filter/first.hxx @@ -0,0 +1,81 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef FIRST_HXX +#define FIRST_HXX + +//#include "utfirst.h" // Deleted by 2004-06-16 +#include "bento.hxx" // Public header + +//#define ASSERT(cond) UT_ASSERT(cond) // Deleted by 2004-06-16 +namespace OpenStormBento +{ +// String constants +extern const char gsBenMagicBytes[]; + +typedef BenByte * BenByteDataPtr; +typedef const BenByte * BenConstByteDataPtr; + +pCBenNamedObject FindNamedObject(pCUtList pList, const char * sName, + pCBenNamedObjectListElmt * ppPrev); + +pCBenIDListElmt FindID(pCUtList pList, BenObjectID ObjectID, + pCBenIDListElmt * ppPrev); +} // end namespace + +// Private headers +#include "bentoid.hxx" +#include "tocread.hxx" +//#include "tocwrite.h" // Deleted by 2004-06-16 +#endif diff --git a/lotuswordpro/source/filter/genericfilter.cxx b/lotuswordpro/source/filter/genericfilter.cxx new file mode 100644 index 000000000000..70b61e7fd1cd --- /dev/null +++ b/lotuswordpro/source/filter/genericfilter.cxx @@ -0,0 +1,77 @@ +#include <stdio.h> + +#include <osl/mutex.hxx> +#include <osl/thread.h> +#include <cppuhelper/factory.hxx> + +#ifndef _COM_SUN_STAR_LANG_XSINGLESERVICEFACTORY_HPP_ +#include <com/sun/star/lang/XSingleServiceFactory.hpp> +#endif + +#include "LotusWordProImportFilter.hxx" + +using namespace ::rtl; +using namespace ::cppu; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::registry; + +extern "C" +{ +//================================================================================================== +void SAL_CALL component_getImplementationEnvironment( + const sal_Char ** ppEnvTypeName, uno_Environment ** ppEnv ) +{ + *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; +} +//================================================================================================== +sal_Bool SAL_CALL component_writeInfo( + void * pServiceManager, void * pRegistryKey ) +{ + if (pRegistryKey) + { + try + { + sal_Int32 nPos = 0; + Reference< XRegistryKey > xNewKey( + reinterpret_cast< XRegistryKey * >( pRegistryKey )->createKey( LotusWordProImportFilter_getImplementationName() ) ); + xNewKey = xNewKey->createKey( OUString::createFromAscii( "/UNO/SERVICES" ) ); + + const Sequence< OUString > & rSNL = LotusWordProImportFilter_getSupportedServiceNames(); + const OUString * pArray = rSNL.getConstArray(); + for ( nPos = rSNL.getLength(); nPos--; ) + xNewKey->createKey( pArray[nPos] ); + + return sal_True; + } + catch (InvalidRegistryException &) + { + OSL_ENSURE( sal_False, "### InvalidRegistryException!" ); + } + } + return sal_False; +} +//================================================================================================== +void * SAL_CALL component_getFactory( + const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey ) +{ + void * pRet = 0; + + OUString implName = OUString::createFromAscii( pImplName ); + if ( pServiceManager && implName.equals(LotusWordProImportFilter_getImplementationName()) ) + { + Reference< XSingleServiceFactory > xFactory( createSingleFactory( + reinterpret_cast< XMultiServiceFactory * >( pServiceManager ), + OUString::createFromAscii( pImplName ), + LotusWordProImportFilter_createInstance, LotusWordProImportFilter_getSupportedServiceNames() ) ); + + if (xFactory.is()) + { + xFactory->acquire(); + pRet = xFactory.get(); + } + } + + return pRet; +} +} diff --git a/lotuswordpro/source/filter/localtime.cxx b/lotuswordpro/source/filter/localtime.cxx new file mode 100644 index 000000000000..017bf0d41e2e --- /dev/null +++ b/lotuswordpro/source/filter/localtime.cxx @@ -0,0 +1,192 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "localtime.hxx" +#include <limits.h> +#include <unicode/timezone.h> +//End by +const long DAY_SEC =24 * 60 * 60; +const long YEAR_SEC = 365 * DAY_SEC; +const long FOURYEAR_SEC = 4 * YEAR_SEC + DAY_SEC; +#ifndef LONG_MAX +const long LONG_MAX=2147483647; +#endif +const long TIMEZONE = -28800; +//01-01-70 was a Thursday +const long BASE_DOW = 4; + +long _lpdays[] = {-1, 30, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365}; + +long _days[] = {-1, 30, 58, 89, 119, 150, 180, 211, 242, 272, 303, 333, 364}; + +bool LtgGmTime(long rtime,LtTm& rtm) +{ + if (rtime < 0) + { + return false; + } + //is-current-year-a-leap-year flag + int islpyr = 0; + + long tmptim; + long caltim = rtime; + tmptim = (long)(caltim / FOURYEAR_SEC); + caltim -= ((long)tmptim * FOURYEAR_SEC); + + // + //Determine which year of the interval + // + // 1970, 1974, 1978,...,etc. + tmptim = (tmptim * 4) + 70; + + if (caltim >= YEAR_SEC) + { + //1971, 1975, 1979,...,etc. + tmptim++; + caltim -= YEAR_SEC; + + if ( caltim >= YEAR_SEC ) + { + // 1972, 1976, 1980,...,etc. + tmptim++; + caltim -= YEAR_SEC; + + //Note, it takes 366 days-worth of seconds to get past a leap year. + if (caltim >= (YEAR_SEC + DAY_SEC)) + { + //1973, 1977, 1981,...,etc. + tmptim++; + caltim -= (YEAR_SEC + DAY_SEC); + } + else + { + //In a leap year after all, set the flag. + islpyr++; + } + } + } + + // + //tmptim now holds the value for tm_year. caltim now holds the + //number of elapsed seconds since the beginning of that year. + // + rtm.tm_year = tmptim; + // + //Determine days since January 1 (0 - 365). This is the tm_yday value. + //Leave caltim with number of elapsed seconds in that day. + // + rtm.tm_yday = (long)(caltim / DAY_SEC); + caltim -= (long)(rtm.tm_yday) * DAY_SEC; + // + //Determine months since January (0 - 11) and day of month (1 - 31) + // + long* mdays; + if ( islpyr ) + { + mdays = _lpdays; + } + else + { + mdays = _days; + } + + for ( tmptim = 1 ; mdays[tmptim] < rtm.tm_yday ; tmptim++ ) ; + + rtm.tm_mon = --tmptim; + + rtm.tm_mday = rtm.tm_yday - mdays[tmptim]; + + // + //Determine days since Sunday (0 - 6) + // + rtm.tm_wday = ((long)(rtime / DAY_SEC) + BASE_DOW) % 7; + // + //Determine hours since midnight (0 - 23), minutes after the hour + //(0 - 59), and seconds after the minute (0 - 59). + // + rtm.tm_hour = (long)(caltim / 3600); + caltim -= (long)rtm.tm_hour * 3600; + + rtm.tm_min = (long)(caltim / 60); + rtm.tm_sec = (long)(caltim - (rtm.tm_min) * 60); + + rtm.tm_isdst = 0; + + // + // + // + //adjust year & month + rtm.tm_year += 1900; + ++(rtm.tm_mon); + + return true; + +}; +bool LtgLocalTime(long rtime,LtTm& rtm) +{ + long ltime; + if (rtime < 0) + { + return false; + } + + if ((rtime > 3 * DAY_SEC)&&(rtime < LONG_MAX - 3 * DAY_SEC)) + { + TimeZone* pLocalZone = TimeZone::createDefault(); + long offset = (pLocalZone->getRawOffset())/1000; + ltime = rtime + offset; + return LtgGmTime(ltime,rtm); + } + return false; +}; diff --git a/lotuswordpro/source/filter/localtime.hxx b/lotuswordpro/source/filter/localtime.hxx new file mode 100644 index 000000000000..24a708f2ff56 --- /dev/null +++ b/lotuswordpro/source/filter/localtime.hxx @@ -0,0 +1,73 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _LWPTIME_HXX_ +#define _LWPTIME_HXX_ + +struct LtTm +{ + long tm_sec; /* seconds after the minute - [0,59] */ + long tm_min; /* minutes after the hour - [0,59] */ + long tm_hour; /* hours since midnight - [0,23] */ + long tm_mday; /* day of the month - [1,31] */ + long tm_mon; /* months since January - [0,11] */ + long tm_year; /* years since 1900 */ + long tm_wday; /* days since Sunday - [0,6] */ + long tm_yday; /* days since January 1 - [0,365] */ + long tm_isdst; /* daylight savings time flag */ +}; +bool LtgGmTime(long rtime,LtTm& rtm); +bool LtgLocalTime(long rtime,LtTm& rtm); + +#endif diff --git a/lotuswordpro/source/filter/lwp9reader.cxx b/lotuswordpro/source/filter/lwp9reader.cxx new file mode 100644 index 000000000000..9b4c3ead7c69 --- /dev/null +++ b/lotuswordpro/source/filter/lwp9reader.cxx @@ -0,0 +1,291 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _LWP9READER_HXX +#include "lwp9reader.hxx" +#endif +#include "lwpglobalmgr.hxx" +#include "lwpunoheader.hxx" +#include "lwparrowstyles.hxx" +#include "lwpobjhdr.hxx" +#include "lwpdoc.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "lwpdocdata.hxx" +#include "lwpbookmarkmgr.hxx" +#include "lwpchangemgr.hxx" +#include <tools/stream.hxx> + +Lwp9Reader::Lwp9Reader (LwpSvStream* pInputStream, IXFStream* pStream) + : m_pDocStream(pInputStream), m_pStream(pStream), m_LwpFileHdr() +{} + +/** + * @descr The entrance of Word Pro 9 import filter. + **/ +void Lwp9Reader::Read() +{ + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(m_pDocStream); + m_pObjMgr = pGlobal->GetLwpObjFactory(); + + //Commented out by , 10/26/2005 + //Read Ole object in LwpOleObject::XFConverter to support Ole in Linux + //ReadOleObjects(); + + ReadFileHeader(); + //Does not support Word Pro 96 and previous versions + if(LwpFileHeader::m_nFileRevision>=0x000B) + { + ReadIndex(); + ParseDocument(); + } + LwpGlobalMgr::DeleteInstance(); +} + +/** + * @descr Read the OLE objects. + */ +void Lwp9Reader::ReadOleObjects() +{ +#if 0 +#ifdef WIN32 + if(m_pObjMgr) + { + // Get the buffer of the whole file + LwpSvStream* pRawStream = m_pDocStream; + sal_Int64 nCurPos = pRawStream->Tell(); + sal_uInt32 nSize = static_cast<sal_uInt32>(pRawStream->Seek(STREAM_SEEK_TO_END)); + BYTE* pBuf = new BYTE[nSize]; + + if(pBuf == NULL) // this buffer may be too big + { + assert(sal_False); + return; + } + pRawStream->Seek(STREAM_SEEK_TO_BEGIN); + pRawStream->Read(pBuf,nSize); + pRawStream->Seek(nCurPos); + + // Break the buffer into separate objects by ASWAN lib + BYTE* pOut = NULL; + sal_uInt32 nWritten; + CBenStorageConverter benConverter; + benConverter.Convert(pBuf, nSize, (void**)&pOut, &nWritten); + delete[] pBuf; + + if (NULL != pOut) + { + SvStream* pMemStream = new SvMemoryStream(pOut, nWritten, STREAM_READ|STREAM_WRITE); + SvStorageRef objStor = new SvStorage(pMemStream, true); // set true to let SvStorage free the memstream. + m_pObjMgr->SetOleObjInfo(objStor); + } + + } +#endif +#endif +} +/** + * @descr Read the LWP7 object. + */ +void Lwp9Reader::ReadFileHeader() +{ + m_pDocStream->Seek(LwpSvStream::LWP_STREAM_BASE); + + //Remember to initialize the LwpFileHeader::m_nFileRevision first. + LwpFileHeader::m_nFileRevision = 0; + + LwpObjectHeader objHdr; + objHdr.Read(*m_pDocStream); + sal_Int64 pos = m_pDocStream->Tell(); + m_LwpFileHdr.Read(m_pDocStream); + m_pDocStream->Seek(pos+objHdr.GetSize()); + +} + +/** + * @descr Read the index objects at the end of the WordProData stream + */ +void Lwp9Reader::ReadIndex() +{ + sal_Int64 oldpos = m_pDocStream->Tell(); + sal_uInt32 rootoffset = m_LwpFileHdr.GetRootIndexOffset(); + m_pDocStream->Seek(rootoffset + LwpSvStream::LWP_STREAM_BASE); + m_pObjMgr->ReadIndex(m_pDocStream); + m_pDocStream->Seek(oldpos); +} + +/** + * @descr Read all objects + * This function is replaced by the read on demand model + * Reserverd for future use +*/ +void Lwp9Reader::DumpAllObjects() +{ + sal_Int64 nFileSize = GetFileSize(); + sal_Int64 nFilePos = m_pDocStream->Tell(); + + while(true) + { + LwpObjectHeader objHdr; + objHdr.Read(*m_pDocStream); + nFilePos = m_pDocStream->Tell(); + //Stop when reaching the index object + if(objHdr.GetTag() >= VO_ROOTLEAFOBJINDEX) + { + break; + } + //Stop when the length exceeds the file length + if(nFilePos + objHdr.GetSize() > nFileSize) + { + assert(false); + break; + } + m_pObjMgr->CreateObject(objHdr.GetTag(), objHdr); + m_pDocStream->Seek(nFilePos+objHdr.GetSize()); + } +} + +/** + * @descr Get file size +*/ +sal_Int64 Lwp9Reader::GetFileSize() +{ + sal_Int64 pos = m_pDocStream->Tell(); + m_pDocStream->Seek(0); + + sal_Int64 size = m_pDocStream->Seek( STREAM_SEEK_TO_END); + m_pDocStream->Seek(pos); + return(size); +} + +/** + * @descr Parse all document content +*/ +void Lwp9Reader::ParseDocument() +{ + WriteDocHeader(); + + //Get root document + LwpDocument* doc = static_cast<LwpDocument*> ( m_LwpFileHdr.GetDocID()->obj() ); + + //Parse Doc Data + LwpDocData *pDocData = static_cast<LwpDocData*>((doc->GetDocData())->obj()); + if (pDocData!=NULL) + { + pDocData->Parse(m_pStream); + } + + //Register Styles + RegisteArrowStyles(); + doc->RegisterStyle(); + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + pXFStyleManager->ToXml(m_pStream); + + //Parse document content + m_pStream->GetAttrList()->Clear(); + m_pStream->StartElement( A2OUSTR("office:body") ); + + //Parse change list, add by + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + LwpChangeMgr* pChangeMgr = pGlobal->GetLwpChangeMgr(); + pChangeMgr->ConvertAllChange(m_pStream); + + doc->Parse(m_pStream); + m_pStream->EndElement(::rtl::OUString::createFromAscii("office:body")); + + WriteDocEnd(); +} + +/** + * @descr Write xml document header + */ +void Lwp9Reader::WriteDocHeader() +{ + m_pStream->StartDocument(); + + IXFAttrList *pAttrList = m_pStream->GetAttrList(); + + pAttrList->AddAttribute( A2OUSTR("xmlns:office"), A2OUSTR("http://openoffice.org/2000/office") ); + pAttrList->AddAttribute( A2OUSTR("xmlns:style"), A2OUSTR("http://openoffice.org/2000/style") ); + pAttrList->AddAttribute( A2OUSTR("xmlns:text"), A2OUSTR("http://openoffice.org/2000/text") ); + pAttrList->AddAttribute( A2OUSTR("xmlns:table"), A2OUSTR("http://openoffice.org/2000/table") ); + pAttrList->AddAttribute( A2OUSTR("xmlns:draw"), A2OUSTR("http://openoffice.org/2000/drawing") ); + + pAttrList->AddAttribute( A2OUSTR("xmlns:fo"), A2OUSTR("http://www.w3.org/1999/XSL/Format") ); + pAttrList->AddAttribute( A2OUSTR("xmlns:xlink"), A2OUSTR("http://www.w3.org/1999/xlink") ); + pAttrList->AddAttribute( A2OUSTR("xmlns:number"), A2OUSTR("http://openoffice.org/2000/datastyle") ); + pAttrList->AddAttribute( A2OUSTR("xmlns:svg"), A2OUSTR("http://www.w3.org/2000/svg") ); + pAttrList->AddAttribute( A2OUSTR("xmlns:chart"), A2OUSTR("http://openoffice.org/2000/chart") ); + + pAttrList->AddAttribute( A2OUSTR("xmlns:dr3d"), A2OUSTR("http://openoffice.org/2000/dr3d") ); + pAttrList->AddAttribute( A2OUSTR("xmlns:math"), A2OUSTR("http://www.w3.org/1998/Math/MathML") ); + pAttrList->AddAttribute( A2OUSTR("xmlns:form"), A2OUSTR("http://openoffice.org/2000/form") ); + pAttrList->AddAttribute( A2OUSTR("xmlns:script"), A2OUSTR("http://openoffice.org/2000/script") ); + pAttrList->AddAttribute( A2OUSTR("xmlns:dc"), A2OUSTR("http://purl.org/dc/elements/1.1/") ); + + pAttrList->AddAttribute( A2OUSTR("xmlns:meta"), A2OUSTR("http://openoffice.org/2000/meta") ); + pAttrList->AddAttribute( A2OUSTR("office:class"), A2OUSTR("text")); + pAttrList->AddAttribute( A2OUSTR("office:version"), A2OUSTR("1.0")); + + m_pStream->StartElement( ::rtl::OUString::createFromAscii("office:document") ); + pAttrList->Clear(); + +} +/** + * @descr Write xml document end + */ +void Lwp9Reader::WriteDocEnd() +{ + m_pStream->EndElement(::rtl::OUString::createFromAscii("office:document")); + m_pStream->EndDocument(); +} diff --git a/lotuswordpro/source/filter/lwp9reader.hxx b/lotuswordpro/source/filter/lwp9reader.hxx new file mode 100644 index 000000000000..7a30ba9ca5ca --- /dev/null +++ b/lotuswordpro/source/filter/lwp9reader.hxx @@ -0,0 +1,89 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _LWP9READER_HXX +#define _LWP9READER_HXX + +#include "lwpheader.hxx" +#include "lwpunoheader.hxx" +#include "lwpsvstream.hxx" +#include "lwpfilehdr.hxx" +#include "lwpobjfactory.hxx" +#include "xfilter/ixfstream.hxx" +/** + * @brief Reader framework class for Lotus Word Pro 9 file +*/ +class Lwp9Reader +{ + public: + Lwp9Reader(LwpSvStream* InputStream, IXFStream* pStream); + ~Lwp9Reader(){}; + private: + LwpSvStream* m_pDocStream; + IXFStream* m_pStream; + LwpObjectFactory* m_pObjMgr; + LwpFileHeader m_LwpFileHdr; //LWP7 object + protected: + sal_Int64 GetFileSize(); + void ReadFileHeader(); + void ReadIndex(); + void DumpAllObjects(); + void ParseDocument(); + void WriteDocHeader(); + void WriteDocEnd(); + void ReadOleObjects(); + public: + void Read(); +}; +#endif diff --git a/lotuswordpro/source/filter/lwparrowstyles.hxx b/lotuswordpro/source/filter/lwparrowstyles.hxx new file mode 100644 index 000000000000..7b73e9101b48 --- /dev/null +++ b/lotuswordpro/source/filter/lwparrowstyles.hxx @@ -0,0 +1,101 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _LWPARROWSTYLES_HXX +#define _LWPARROWSTYLES_HXX + +#include "xfilter/xfarrowstyle.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "lwpglobalmgr.hxx" + +/** + * @descr Registe arrow styles that are not directly support by SODC. + * There are three kinds,revsered arrow,revered concave arrow and revsered + * line arrow. this function should be called before the three arrows be used. + */ +void RegisteArrowStyles() +{ + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + if (!pXFStyleManager) + return; + //reversed arrow: + XFArrowStyle *pArrowStyle100 = new XFArrowStyle(); + pArrowStyle100->SetArrowName( A2OUSTR("arrow100") ); + pArrowStyle100->SetViewbox(A2OUSTR("0 0 140 200")); + pArrowStyle100->SetSVGPath(A2OUSTR("M0 180 L70 0 L140 180 L120 180 L70 30 L20 180 L0 180")); + pXFStyleManager->AddStyle(pArrowStyle100); + + //reversed arrow: + XFArrowStyle *pArrowStyle1 = new XFArrowStyle(); + pArrowStyle1->SetArrowName( A2OUSTR("reverse arrow") ); + pArrowStyle1->SetViewbox(A2OUSTR("0 0 140 200")); + pArrowStyle1->SetSVGPath(A2OUSTR("M0 0 L70 200 L140 0")); + pXFStyleManager->AddStyle(pArrowStyle1); + + //reversed concave arrow + XFArrowStyle *pArrowStyle2 = new XFArrowStyle(); + pArrowStyle2->SetArrowName( A2OUSTR("reverse concave arrow") ); + pArrowStyle2->SetViewbox(A2OUSTR("0 0 140 200")); + pArrowStyle2->SetSVGPath(A2OUSTR("M0 0 L80 200 L160 0 L80 100")); + pXFStyleManager->AddStyle(pArrowStyle2); + + //reversed line arrow + XFArrowStyle *pArrowStyle3 = new XFArrowStyle(); + pArrowStyle3->SetArrowName( A2OUSTR("reverse line arrow") ); + pArrowStyle3->SetViewbox(A2OUSTR("0 0 140 200")); + pArrowStyle3->SetSVGPath(A2OUSTR("M0 0 L70 200 L140 0L110 0 L70 160 L20 0 L0 0")); + pXFStyleManager->AddStyle(pArrowStyle3); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwpatomholder.cxx b/lotuswordpro/source/filter/lwpatomholder.cxx new file mode 100644 index 000000000000..5698863d888a --- /dev/null +++ b/lotuswordpro/source/filter/lwpatomholder.cxx @@ -0,0 +1,108 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "lwpatomholder.hxx" +#include "lwptools.hxx" +#include <osl/thread.h> +#include <rtl/textenc.h> + +LwpAtomHolder::LwpAtomHolder() + : m_nAtom(0), m_nAssocAtom(0) +{} + +LwpAtomHolder::~LwpAtomHolder() +{} +/** + * @descr read atomholder from object stream + * the default encoding used in Word Pro is 1252 +*/ +void LwpAtomHolder::Read(LwpObjectStream *pStrm) +{ + //Refered to lwp: file40.cpp, QuickReadAtomHolder() + + sal_uInt16 len, diskSize; + pStrm->QuickRead(&diskSize, sizeof(diskSize)); + pStrm->QuickRead(&len, sizeof(len)); + + if (len == 0 || diskSize == 0) { + m_nAtom = BAD_ATOM; + m_nAssocAtom = BAD_ATOM; + return; + } + m_nAtom = m_nAssocAtom = len; + + //rtl_TextEncoding rEncode = gsl_getSystemTextEncoding(); + rtl_TextEncoding rEncode = RTL_TEXTENCODING_MS_1252; + len = LwpTools::QuickReadUnicode(pStrm, m_String, diskSize-sizeof(diskSize), rEncode); +} +/** + * @descr skip the atom holder in object stream +*/ +void LwpAtomHolder::Skip(LwpObjectStream *pStrm) +{ + sal_uInt16 holdersize; + pStrm->QuickRead(&holdersize, sizeof(holdersize)); + pStrm->SeekRel(holdersize); + m_nAtom = m_nAssocAtom = BAD_ATOM; +} +/** + * @descr read path atom + * No use now for lwp filter, just skip the atom +*/ +void LwpAtomHolder::ReadPathAtom(LwpObjectStream *pStrm) +{ + //Refered to lwp: file40.cpp, QuickReadPathAtom() + // TODO: Read the data. Now just skip it. The method to skip is same as above. + Skip(pStrm); +} diff --git a/lotuswordpro/source/filter/lwpatomholder.hxx b/lotuswordpro/source/filter/lwpatomholder.hxx new file mode 100644 index 000000000000..8a723f7d4e1d --- /dev/null +++ b/lotuswordpro/source/filter/lwpatomholder.hxx @@ -0,0 +1,86 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _LWPATOMHOLDER_HXX +#define _LWPATOMHOLDER_HXX + +#include "lwpheader.hxx" +#include "lwpdefs.hxx" +#include "lwpobjstrm.hxx" +/** + * @brief AtomHolder class of Word Pro to hold a string +*/ +class LwpAtomHolder +{ +public: + LwpAtomHolder(); + ~LwpAtomHolder(); +private: + sal_Int32 m_nAtom; + sal_Int32 m_nAssocAtom; + OUString m_String; + //OUString m_UniString; //no use temporarily +public: + void Read(LwpObjectStream *pStrm); + void ReadPathAtom(LwpObjectStream *pStrm); + void Skip(LwpObjectStream *pStrm); + OUString str(){return m_String;} + inline sal_Bool HasValue(); +}; +inline sal_Bool LwpAtomHolder::HasValue() +{ + return (m_nAtom != BAD_ATOM); +} + +#endif diff --git a/lotuswordpro/source/filter/lwpbackgroundoverride.hxx b/lotuswordpro/source/filter/lwpbackgroundoverride.hxx new file mode 100644 index 000000000000..bbfae3719743 --- /dev/null +++ b/lotuswordpro/source/filter/lwpbackgroundoverride.hxx @@ -0,0 +1,91 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _LWPBACKGROUNDOVERRIDE_HXX +#define _LWPBACKGROUNDOVERRIDE_HXX + + +#include "lwpoverride.hxx" +#include "lwpbackgroundstuff.hxx" + +class LwpObjectStream; +class LwpBackgroundOverride : public LwpOverride +{ + +public: + LwpBackgroundOverride(){}; + virtual ~LwpBackgroundOverride(){} + + +public: + virtual void Read(LwpObjectStream *pStrm) + { + if (pStrm->QuickReadBool()) + { + ReadCommon(pStrm); + + m_aStuff.Read(pStrm); + } + + pStrm->SkipExtra(); + } + + LwpColor GetBackColor(){ return m_aStuff.m_aFillColor; } + LwpBackgroundStuff* GetBGStuff() { return &m_aStuff; } + +private: + LwpBackgroundStuff m_aStuff; +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwpbackgroundstuff.cxx b/lotuswordpro/source/filter/lwpbackgroundstuff.cxx new file mode 100644 index 000000000000..5361a8880396 --- /dev/null +++ b/lotuswordpro/source/filter/lwpbackgroundstuff.cxx @@ -0,0 +1,182 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype + * Implemention of class LwpBackgroundStuff. + */ + +#include "lwpbackgroundstuff.hxx" +#include "lwppttntbl.hxx" +#include "xfilter/xfbgimage.hxx" + +#include "tools/stream.hxx" +#include "vcl/bmpacc.hxx" +#include "svx/xbitmap.hxx" + + +void LwpBackgroundStuff::Read(LwpObjectStream* pStrm) +{ + pStrm->QuickRead(&m_nID, sizeof(m_nID)); + m_aFillColor.Read(pStrm); + m_aPatternColor.Read(pStrm); + pStrm->SkipExtra(); +} + +void LwpBackgroundStuff::GetPattern(sal_uInt16 btPttnIndex, sal_uInt8* pPttnArray) +{ + if (btPttnIndex > 71) + { + assert(false); + return; + } + if (pPttnArray) + { + assert((2 < btPttnIndex) && (btPttnIndex < 72)); + sal_uInt8* pTempArray = s_pLwpPatternTab[btPttnIndex]; + for(sal_uInt8 i = 0; i < 32; i++) + { + pPttnArray[i] = (i%4 == 0) ? pTempArray[7-i/4] : 0; + } + } +} + +LwpColor* LwpBackgroundStuff::GetFillColor() +{ + if (m_nID == BACK_PATTERN) + { + return &m_aPatternColor; + } + + return &m_aFillColor; +} + +XFBGImage* LwpBackgroundStuff::GetFillPattern() +{ + // not pattern fill? + if (!this->IsPatternFill()) + { + return NULL; + } + + // get pattern array from pattern table + sal_uInt8* pPttnArray = new sal_uInt8 [32]; + this->GetPattern(m_nID, pPttnArray); + + // create bitmap object from the pattern array + Bitmap aBmp( Size(8, 8), 1 ); + BitmapWriteAccess* pWA = aBmp.AcquireWriteAccess(); + sal_uInt8* pBuf = pWA->GetBuffer(); + memcpy(pBuf, pPttnArray, 32); + aBmp.ReleaseAccess(pWA); + + if (pPttnArray) + { + delete [] pPttnArray; + pPttnArray = NULL; + } + + // create XOBitmap object from bitmap object + XOBitmap aXOBitmap; + aXOBitmap.SetBitmap( aBmp ); + aXOBitmap.Bitmap2Array(); + aXOBitmap.SetBitmapType( XBITMAP_8X8 ); + + // set back/fore-ground colors + if (m_aFillColor.IsValidColor() && m_aPatternColor.IsValidColor()) + { + Color aBackColor(static_cast<sal_uInt8>(m_aFillColor.GetRed()), + static_cast<sal_uInt8>(m_aFillColor.GetGreen()), + static_cast<sal_uInt8>(m_aFillColor.GetBlue())); + Color aForeColor(static_cast<sal_uInt8>(m_aPatternColor.GetRed()), + static_cast<sal_uInt8>(m_aPatternColor.GetGreen()), + static_cast<sal_uInt8>(m_aPatternColor.GetBlue())); + + if( aXOBitmap.GetBackgroundColor() == COL_BLACK ) + { + aXOBitmap.SetPixelColor( aBackColor ); + aXOBitmap.SetBackgroundColor( aForeColor ); + } + else + { + aXOBitmap.SetPixelColor( aForeColor ); + aXOBitmap.SetBackgroundColor( aBackColor ); + } + } + + // transfer image data from XOBitmap->SvStream->BYTE-Array + SvMemoryStream aPicMemStream; + aXOBitmap.Array2Bitmap(); + aXOBitmap.GetBitmap().Write(aPicMemStream); + sal_uInt32 nSize = aPicMemStream.GetEndOfData(); + sal_uInt8* pImageBuff = new sal_uInt8 [nSize]; + memcpy(pImageBuff, aPicMemStream.GetData(), nSize); + + // create XFBGImage object. + XFBGImage* pXFBGImage = new XFBGImage(); + pXFBGImage->SetImageData(pImageBuff, nSize); + + if (pImageBuff) + { + delete [] pImageBuff; + pImageBuff = NULL; + } + + + pXFBGImage->SetRepeate(); + // end of add + + return pXFBGImage; +} diff --git a/lotuswordpro/source/filter/lwpbackgroundstuff.hxx b/lotuswordpro/source/filter/lwpbackgroundstuff.hxx new file mode 100644 index 000000000000..bbfdd3ad9d53 --- /dev/null +++ b/lotuswordpro/source/filter/lwpbackgroundstuff.hxx @@ -0,0 +1,168 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* +* @file +* Backgound object of Wordpro. +************************************************************************/ +/************************************************************************* +* Change History +* 2005-01-12 Create and implement. +************************************************************************/ +#ifndef _LWPBACKGROUNDSTUFF_HXX +#define _LWPBACKGROUNDSTUFF_HXX +#include "lwpcolor.hxx" + +/* background patterns */ +#define BACK_TRANSPARENT 0 +#define BACK_FILL 1 +#define BACK_PATTERN 2 +#define BACK_10PCTDOTS 3 +#define BACK_30PCTDOTS 4 +#define BACK_50PCTDOTS 5 +#define BACK_75PCTDOTS 6 +#define BACK_90PCTDOTS 7 +#define BACK_90PCTINVDOTS 8 +#define BACK_75PCTINVDOTS 9 +#define BACK_50PCTINVDOTS 10 +#define BACK_30PCTINVDOTS 11 +#define BACK_10PCTINVDOTS 12 +#define BACK_MARBLES 13 +#define BACK_STARRYNIGHT 14 +#define BACK_DIAGTHICK 15 +#define BACK_DIAGTHIN 16 +#define BACK_DIAGDOUBLE 17 +#define BACK_DIAGDOUBLENARROW 18 +#define BACK_DIAGTRIPLE 19 +#define BACK_DIAGSINGLEWIDE 20 +#define BACK_DIAGTHICKINV 21 +#define BACK_DIAGTHININV 22 +#define BACK_DIAGDOUBLEINV 23 +#define BACK_DIAGDOUBLENARROWINV 24 +#define BACK_DIAGTRIPLEINV 25 +#define BACK_DIAGSINGLEWIDEINV 26 +#define BACK_CHAINLINKSMALLINV 27 +#define BACK_CHAINLINKSMALL 28 +#define BACK_CHAINLINKMEDIUM 29 +#define BACK_CHAINLINKLARGE 30 +#define BACK_HORZSTRIPE1 31 +#define BACK_HORZSTRIPE2 32 +#define BACK_HORZSTRIPE3 33 +#define BACK_HORZSTRIPE4 34 +#define BACK_VERTSTRIPE1 35 +#define BACK_VERTSTRIPE2 36 +#define BACK_VERTSTRIPE3 37 +#define BACK_VERTSTRIPE4 38 +#define BACK_GRIDSMALL 39 +#define BACK_GRIDMEDIUM 40 +#define BACK_GRIDLARGE 41 +#define BACK_BOXDOT 42 +#define BACK_GOLFGREEN 43 +#define BACK_DITZ 44 +#define BACK_HORZWEAVE 45 +#define BACK_APPLEPIE 46 +#define BACK_BRICK 47 +#define BACK_DIAGBRICK 48 +#define BACK_CHECKER1 49 +#define BACK_CHECKER2 50 +#define BACK_CHECKER3 51 +#define BACK_CHECKER4 52 +#define BACK_CHECKER5 53 +#define BACK_SNOWFLAKE 54 +#define BACK_MARGARITA 55 +#define BACK_SIDEHARP 56 +#define BACK_SCALES 57 +#define BACK_TAYLOR 58 +#define BACK_BUBBLES 59 +#define BACK_ARGYLE 60 +#define BACK_INDIAN1 61 +#define BACK_INDIAN3 62 +#define BACK_PEACHPIE 63 +#define BACK_GRADIENT1 64 +#define BACK_GRADIENT2 65 +#define BACK_GRADIENT3 66 +#define BACK_GRADIENT4 67 +#define BACK_GRADIENT5 68 +#define BACK_GRADIENT6 69 +#define BACK_GRADIENT7 70 +#define BACK_GRADIENT8 71 + +class XFBGImage; +class LwpBackgroundStuff +{ +public: + LwpBackgroundStuff() + { + m_nID = 0; + } + +private: + void GetPattern(sal_uInt16 btPttnIndex, sal_uInt8* pPttnArray); + +public: + void Read(LwpObjectStream *pStrm); + LwpColor* GetFillColor(); + XFBGImage* GetFillPattern(); + + inline sal_Bool IsTransparent() {return (m_nID == BACK_TRANSPARENT);} + inline sal_Bool IsPatternFill() { return (sal_Bool)(m_nID > 2 && m_nID < 72); } + + friend class LwpBackgroundOverride; +private: + sal_uInt16 m_nID; + LwpColor m_aFillColor; + LwpColor m_aPatternColor; +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpbasetype.cxx b/lotuswordpro/source/filter/lwpbasetype.cxx new file mode 100644 index 000000000000..d27225df8131 --- /dev/null +++ b/lotuswordpro/source/filter/lwpbasetype.cxx @@ -0,0 +1,92 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "lwpbasetype.hxx" +/** + * @descr read PonoseNumber from object stream +*/ +void LwpPanoseNumber::Read(LwpObjectStream *pStrm) +{ + pStrm->QuickRead(&m_nFamilyType, sizeof(m_nFamilyType)); + pStrm->QuickRead(&m_nSerifStyle, sizeof(m_nSerifStyle)); + pStrm->QuickRead(&m_nWeight, sizeof(m_nWeight)); + pStrm->QuickRead(&m_nProportion, sizeof(m_nProportion)); + pStrm->QuickRead(&m_nContrast, sizeof(m_nContrast)); + pStrm->QuickRead(&m_nStrokeVariation, sizeof(m_nStrokeVariation)); + pStrm->QuickRead(&m_nArmStyle, sizeof(m_nArmStyle)); + pStrm->QuickRead(&m_nLetterform, sizeof(m_nLetterform)); + pStrm->QuickRead(&m_nMidline, sizeof(m_nMidline)); + pStrm->QuickRead(&m_nXHeight, sizeof(m_nXHeight)); + +} +LwpPoint::LwpPoint() +{ + Reset(); +} +/** + * @descr read point from object stream +*/ +void LwpPoint::Read(LwpObjectStream *pStrm) +{ + pStrm->QuickRead(&m_nX, sizeof(m_nX)); + pStrm->QuickRead(&m_nY, sizeof(m_nY)); +} +/** + * @descr reset to zero +*/ +void LwpPoint::Reset() +{ + m_nX=0L; + m_nY=0L; +} diff --git a/lotuswordpro/source/filter/lwpbasetype.hxx b/lotuswordpro/source/filter/lwpbasetype.hxx new file mode 100644 index 000000000000..aedace5af1a9 --- /dev/null +++ b/lotuswordpro/source/filter/lwpbasetype.hxx @@ -0,0 +1,117 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * basic classes for Word Pro filter, + * PanoseNumber, Point + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + + +#ifndef _LWPBASETYPE_HXX +#define _LWPBASETYPE_HXX + +#include "lwpobjstrm.hxx" +#include "lwpheader.hxx" + +/** + * @brief used for lwpfont for font description +*/ +class LwpPanoseNumber +{ +public: + LwpPanoseNumber(){}; + ~LwpPanoseNumber(){}; +public: + void Read(LwpObjectStream *pStrm); +private: + sal_uInt8 m_nFamilyType; + sal_uInt8 m_nSerifStyle; + sal_uInt8 m_nWeight; + sal_uInt8 m_nProportion; + sal_uInt8 m_nContrast; + sal_uInt8 m_nStrokeVariation; + sal_uInt8 m_nArmStyle; + sal_uInt8 m_nLetterform; + sal_uInt8 m_nMidline; + sal_uInt8 m_nXHeight; +}; +/** + * @brief point class +*/ +class LwpPoint +{ +public: + LwpPoint(); + void Read(LwpObjectStream *pStrm); + void Reset(); + inline const sal_Int32 GetX(); + inline const sal_Int32 GetY(); + inline void SetX(sal_Int32 nX); + inline void SetY(sal_Int32 nY); +protected: + sal_Int32 m_nX; + sal_Int32 m_nY; +}; + +const sal_Int32 LwpPoint::GetX(){return m_nX;} +const sal_Int32 LwpPoint::GetY(){return m_nY;} +void LwpPoint::SetX(sal_Int32 nX){m_nX = nX;} +void LwpPoint::SetY(sal_Int32 nY){m_nY = nY;} + +#endif diff --git a/lotuswordpro/source/filter/lwpbookmarkmgr.cxx b/lotuswordpro/source/filter/lwpbookmarkmgr.cxx new file mode 100644 index 000000000000..46171808162c --- /dev/null +++ b/lotuswordpro/source/filter/lwpbookmarkmgr.cxx @@ -0,0 +1,112 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "lwpbookmarkmgr.hxx" + +void LwpBookmarkMgr::AddXFBookmarkStart(OUString sName,XFBookmarkStart* pMark) +{ + std::map<OUString,XFBookmarkStart*>::iterator iter; + iter = m_MapStart.find(sName); + if (iter == m_MapStart.end())//not find + { + m_MapStart[sName] = pMark; + } + else //have exist the same bookmark name + { + XFBookmarkStart* pFind = iter->second; + OUString totalName = pFind->GetDivision() + A2OUSTR(":"); + totalName += pFind->GetName(); + pFind->SetName(totalName); + m_MapStart[totalName] = pFind; + m_MapStart[sName] = pMark; + } +} +void LwpBookmarkMgr::AddXFBookmarkEnd(OUString sName,XFBookmarkEnd* pMark) +{ + std::map<OUString,XFBookmarkEnd*>::iterator iter; + iter = m_MapEnd.find(sName); + if (iter == m_MapEnd.end())//not find + { + m_MapEnd[sName] = pMark; + } + else //have exist the same bookmark name + { + XFBookmarkEnd* pFind = iter->second; + OUString totalName = pFind->GetDivision() + A2OUSTR(":"); + totalName += pFind->GetName(); + pFind->SetName(totalName); + m_MapEnd[totalName] = pFind; + m_MapEnd[sName] = pMark; + } +} +sal_Bool LwpBookmarkMgr::FindBookmark(OUString sName) +{ + std::map<OUString,XFBookmarkStart*>::iterator iter; + iter = m_MapStart.find(sName); + if (iter != m_MapStart.end()) + return sal_True; + else + return sal_False; +} + +LwpBookmarkMgr::LwpBookmarkMgr() +{ + m_MapStart.clear(); + m_MapEnd.clear(); +} +LwpBookmarkMgr::~LwpBookmarkMgr() +{ + m_MapStart.clear(); + m_MapEnd.clear(); +} diff --git a/lotuswordpro/source/filter/lwpbookmarkmgr.hxx b/lotuswordpro/source/filter/lwpbookmarkmgr.hxx new file mode 100644 index 000000000000..0021fd4bc2a8 --- /dev/null +++ b/lotuswordpro/source/filter/lwpbookmarkmgr.hxx @@ -0,0 +1,84 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + May 2005 Created + ************************************************************************/ +#ifndef _LWPBOOKMARKMGR_HXX_ +#define _LWPBOOKMARKMGR_HXX_ + +#include "lwpfilehdr.hxx" +#include <map> + +#include "xfilter/xfbookmark.hxx" + +class LwpBookmarkMgr +{ +public: + void AddXFBookmarkEnd(OUString sName,XFBookmarkEnd* pMark); + void AddXFBookmarkStart(OUString sName,XFBookmarkStart* pMark); + sal_Bool FindBookmark(OUString sName); + ~LwpBookmarkMgr(); + LwpBookmarkMgr(); +private: + std::map<OUString,XFBookmarkStart*> m_MapStart; + std::map<OUString,XFBookmarkEnd*> m_MapEnd; +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwpborderstuff.cxx b/lotuswordpro/source/filter/lwpborderstuff.cxx new file mode 100644 index 000000000000..4464e0847ff7 --- /dev/null +++ b/lotuswordpro/source/filter/lwpborderstuff.cxx @@ -0,0 +1,246 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* +* @file +* Border stuff of Wordpro. +************************************************************************/ +/************************************************************************* +* Change History +* 2005-01-11 Create and implement. +* 2005-01-17 Add Get** functions. +************************************************************************/ +#include "lwpborderstuff.hxx" +#include "lwpstyledef.hxx" +#include "lwpfilehdr.hxx" +#include "lwptools.hxx" + +LwpBorderStuff::LwpBorderStuff() +{ + m_nSides = 0; + m_nValid = 0; + + m_nBoderGroupIDLeft = 0; + m_nBoderGroupIDRight = 0; + m_nBoderGroupIDTop = 0; + m_nBoderGroupIDBottom = 0; + + m_nGroupIndent = 0; + + m_nWidthLeft = 0; + m_nWidthTop = 0; + m_nWidthRight = 0; + m_nWidthBottom = 0; +} + +void LwpBorderStuff::Read(LwpObjectStream *pStrm) +{ + pStrm->QuickRead(&m_nSides, sizeof(m_nSides) ); + if( m_nSides&LEFT ) + { + pStrm->QuickRead(&m_nBoderGroupIDLeft, sizeof(m_nBoderGroupIDLeft)); + pStrm->QuickRead(&m_nWidthLeft, sizeof(m_nWidthLeft)); + m_aColorLeft.Read(pStrm); + + if( LwpFileHeader::m_nFileRevision < 0x000b ) + { + pStrm->SeekRel(8); + } + } + + if( m_nSides&RIGHT ) + { + pStrm->QuickRead(&m_nBoderGroupIDRight, sizeof(m_nBoderGroupIDRight)); + pStrm->QuickRead(&m_nWidthRight, sizeof(m_nWidthRight)); + m_aColorRight.Read(pStrm); + + if( LwpFileHeader::m_nFileRevision < 0x000b ) + { + pStrm->SeekRel(8); + } + } + + if( m_nSides&TOP ) + { + pStrm->QuickRead(&m_nBoderGroupIDTop, sizeof(m_nBoderGroupIDTop)); + pStrm->QuickRead(&m_nWidthTop, sizeof(m_nWidthTop)); + m_aColorTop.Read(pStrm); + + if( LwpFileHeader::m_nFileRevision < 0x000b ) + { + pStrm->SeekRel(8); + } + } + + if( m_nSides&BOTTOM ) + { + pStrm->QuickRead(&m_nBoderGroupIDBottom, sizeof(m_nBoderGroupIDBottom)); + pStrm->QuickRead(&m_nWidthBottom, sizeof(m_nWidthBottom)); + m_aColorBottom.Read(pStrm); + + if( LwpFileHeader::m_nFileRevision < 0x000b ) + { + pStrm->SeekRel(8); + } + } + + pStrm->QuickRead( &m_nGroupIndent, sizeof(m_nGroupIndent) ); + pStrm->QuickRead( &m_nValid, sizeof(m_nValid) ); + pStrm->SkipExtra(); + + if( LwpFileHeader::m_nFileRevision < 0x0010 ) + { + if( m_nBoderGroupIDLeft&EXTERNAL_ID ) + { + m_nBoderGroupIDLeft = BGRP_SOLID; + } + if( m_nBoderGroupIDRight&EXTERNAL_ID ) + { + m_nBoderGroupIDRight = BGRP_SOLID; + } + if( m_nBoderGroupIDTop&EXTERNAL_ID ) + { + m_nBoderGroupIDTop = BGRP_SOLID; + } + if( m_nBoderGroupIDBottom&EXTERNAL_ID ) + { + m_nBoderGroupIDBottom = BGRP_SOLID; + } + } +} + +sal_Bool LwpBorderStuff::HasSide(sal_uInt16 side) +{ + return m_nSides&side; +} + +sal_uInt16 LwpBorderStuff::GetSideType(sal_uInt16 side) +{ + switch(side) + { + case LEFT: + return m_nBoderGroupIDLeft; + break; + case RIGHT: + return m_nBoderGroupIDRight; + break; + case TOP: + return m_nBoderGroupIDTop; + break; + case BOTTOM: + return m_nBoderGroupIDBottom; + break; + } +} + +LwpColor LwpBorderStuff::GetSideColor(sal_uInt16 side) +{ + switch(side) + { + case LEFT: + return m_aColorLeft; + break; + case RIGHT: + return m_aColorRight; + break; + case TOP: + return m_aColorTop; + break; + case BOTTOM: + return m_aColorBottom; + break; + } +} + +float LwpBorderStuff::GetSideWidth(sal_uInt16 side) +{ + switch(side) + { + case LEFT: + return LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(m_nWidthLeft)); + break; + case RIGHT: + return LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(m_nWidthRight)); + break; + case TOP: + return LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(m_nWidthTop)); + break; + case BOTTOM: + return LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(m_nWidthBottom)); + break; + } +} + +void LwpBorderStuff::operator = (const LwpBorderStuff& rOther) +{ + m_nSides = rOther.m_nSides; + m_nValid = rOther.m_nValid; + + m_nBoderGroupIDLeft = rOther.m_nBoderGroupIDLeft; + m_nBoderGroupIDRight = rOther.m_nBoderGroupIDRight; + m_nBoderGroupIDTop = rOther.m_nBoderGroupIDTop; + m_nBoderGroupIDBottom = rOther.m_nBoderGroupIDBottom; + + m_nGroupIndent = rOther.m_nGroupIndent; + + m_nWidthLeft = rOther.m_nWidthLeft; + m_nWidthTop = rOther.m_nWidthTop; + m_nWidthRight = rOther.m_nWidthRight; + m_nWidthBottom = rOther.m_nWidthBottom; + + m_aColorLeft = rOther.m_aColorLeft; + m_aColorRight = rOther.m_aColorRight; + m_aColorTop = rOther.m_aColorTop; + m_aColorBottom = rOther.m_aColorBottom; +} diff --git a/lotuswordpro/source/filter/lwpborderstuff.hxx b/lotuswordpro/source/filter/lwpborderstuff.hxx new file mode 100644 index 000000000000..2e7778030192 --- /dev/null +++ b/lotuswordpro/source/filter/lwpborderstuff.hxx @@ -0,0 +1,119 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* +* @file +* Border stuff of Wordpro. +************************************************************************/ +/************************************************************************* +* Change History +* 2005-01-11 Create and implement. +************************************************************************/ +#ifndef _LWPBORDERSTUFF_HXX +#define _LWPBORDERSTUFF_HXX + +#include "lwpcolor.hxx" + +class LwpBorderStuff +{ +public: + LwpBorderStuff(); + + enum BorderType + { + NOSIDE = 0, + LEFT = 1, + RIGHT = 2, + TOP = 4, + BOTTOM = 8, + ALLSIDE = 15, + TEMPORARY = 0xff00 + }; + +public: + void Read(LwpObjectStream *pStrm); + + sal_uInt16 GetSide(){ return m_nSides; } + sal_Bool HasSide(sal_uInt16 side); + sal_uInt16 GetSideType(sal_uInt16 side); + LwpColor GetSideColor(sal_uInt16 side); + float GetSideWidth(sal_uInt16 side); + //add by , 01/26/2004 + void operator = (const LwpBorderStuff& rOther); + //end + friend class LwpParaBorderOverride; +private: + sal_uInt16 m_nSides; + sal_uInt16 m_nValid; + + sal_uInt16 m_nBoderGroupIDLeft; + sal_uInt16 m_nBoderGroupIDRight; + sal_uInt16 m_nBoderGroupIDTop; + sal_uInt16 m_nBoderGroupIDBottom; + + sal_Int32 m_nGroupIndent; + + sal_Int32 m_nWidthLeft; + sal_Int32 m_nWidthTop; + sal_Int32 m_nWidthRight; + sal_Int32 m_nWidthBottom; + + LwpColor m_aColorLeft; + LwpColor m_aColorRight; + LwpColor m_aColorTop; + LwpColor m_aColorBottom; + +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpbreaksoverride.cxx b/lotuswordpro/source/filter/lwpbreaksoverride.cxx new file mode 100644 index 000000000000..c614d1a5b2fe --- /dev/null +++ b/lotuswordpro/source/filter/lwpbreaksoverride.cxx @@ -0,0 +1,280 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* +* @file +* Breaks override of Wordpro. +************************************************************************/ +/************************************************************************* +* Change History +* 2005-01-12 Create and implement. +************************************************************************/ +#include "lwpbreaksoverride.hxx" +#include "lwpobjstrm.hxx" +#include "lwpatomholder.hxx" + + +LwpBreaksOverride::LwpBreaksOverride() +{ + m_pNextStyle = new LwpAtomHolder(); +} + +LwpBreaksOverride::~LwpBreaksOverride() +{ + if( m_pNextStyle ) + delete m_pNextStyle; +} + +void LwpBreaksOverride::Read(LwpObjectStream *pStrm) +{ + if (pStrm->QuickReadBool()) + { + ReadCommon(pStrm); + + m_pNextStyle->Read(pStrm); + } + + pStrm->SkipExtra(); +} + +//add by , 01/28/2005 +void LwpBreaksOverride::Override(LwpBreaksOverride* pOther) +{ + if (m_nApply & BO_PAGEBEFORE) + { + if (IsPageBreakBeforeOverridden()) + { + pOther->OverridePageBreakBefore(IsPageBreakBefore()); + } + else + { + pOther->RevertPageBreakBefore(); + } + } + if (m_nApply & BO_PAGEAFTER) + { + if (IsPageBreakAfterOverridden()) + { + pOther->OverridePageBreakAfter(IsPageBreakAfter()); + } + else + { + pOther->RevertPageBreakAfter(); + } + } + if (m_nApply & BO_KEEPTOGETHER) + { + if (IsPageBreakWithinOverridden()) + { + pOther->OverridePageBreakWithin(IsPageBreakWithin()); + } + else + { + pOther->RevertPageBreakWithin(); + } + } + if (m_nApply & BO_COLBEFORE) + { + if (IsColumnBreakBeforeOverridden()) + { + pOther->OverrideColumnBreakBefore(IsColumnBreakBefore()); + } + else + { + pOther->RevertColumnBreakBefore(); + } + } + if (m_nApply & BO_COLAFTER) + { + if (IsColumnBreakAfterOverridden()) + { + pOther->OverrideColumnBreakAfter(IsColumnBreakAfter()); + } + else + { + pOther->RevertColumnBreakAfter(); + } + } + if (m_nApply & BO_KEEPPREV) + { + if (IsKeepWithPreviousOverridden()) + { + pOther->OverrideKeepWithPrevious(IsKeepWithPrevious()); + } + else + { + pOther->RevertKeepWithPrevious(); + } + } + if (m_nApply & BO_KEEPNEXT) + { + if (IsKeepWithNextOverridden()) + { + pOther->OverrideKeepWithNext(IsKeepWithNext()); + } + else + { + pOther->RevertKeepWithNext(); + } + } + if (m_nApply & BO_USENEXTSTYLE) + { + if (IsUseNextStyleOverridden()) + { + pOther->OverrideUseNextStyle(IsUseNextStyle()); + } + else + { + pOther->RevertUseNextStyle(); + } + } +} + +void LwpBreaksOverride::operator=(const LwpOverride& rOther) +{ + LwpOverride::operator=(rOther); + + // copy m_pNextStyle... +} + +void LwpBreaksOverride::OverridePageBreakBefore(sal_Bool bVal) +{ + if(bVal) + { + LwpOverride::Override(BO_PAGEBEFORE, STATE_ON); + } + else + { + LwpOverride::Override(BO_PAGEBEFORE, STATE_OFF); + } +} +void LwpBreaksOverride::OverridePageBreakAfter(sal_Bool bVal) +{ + if(bVal) + { + LwpOverride::Override(BO_PAGEAFTER, STATE_ON); + } + else + { + LwpOverride::Override(BO_PAGEAFTER, STATE_OFF); + } +} +void LwpBreaksOverride::OverridePageBreakWithin(sal_Bool bVal) +{ + // Note the flipped logic + if(!bVal) + { + LwpOverride::Override(BO_KEEPTOGETHER, STATE_ON); + } + else + { + LwpOverride::Override(BO_KEEPTOGETHER, STATE_OFF); + } +} +void LwpBreaksOverride::OverrideColumnBreakBefore(sal_Bool bVal) +{ + if(bVal) + { + LwpOverride::Override(BO_COLBEFORE, STATE_ON); + } + else + { + LwpOverride::Override(BO_COLBEFORE, STATE_OFF); + } +} +void LwpBreaksOverride::OverrideColumnBreakAfter(sal_Bool bVal) +{ + if(bVal) + { + LwpOverride::Override(BO_COLAFTER, STATE_ON); + } + else + { + LwpOverride::Override(BO_COLAFTER, STATE_OFF); + } +} +void LwpBreaksOverride::OverrideKeepWithNext(sal_Bool bVal) +{ + if(bVal) + { + LwpOverride::Override(BO_KEEPNEXT, STATE_ON); + } + else + { + LwpOverride::Override(BO_KEEPNEXT, STATE_OFF); + } +} +void LwpBreaksOverride::OverrideKeepWithPrevious(sal_Bool bVal) +{ + if(bVal) + { + LwpOverride::Override(BO_KEEPPREV, STATE_ON); + } + else + { + LwpOverride::Override(BO_KEEPPREV, STATE_OFF); + } +} +void LwpBreaksOverride::OverrideUseNextStyle(sal_Bool bVal) +{ + if(bVal) + { + LwpOverride::Override(BO_USENEXTSTYLE, STATE_ON); + } + else + { + LwpOverride::Override(BO_USENEXTSTYLE, STATE_OFF); + } +} +//end add diff --git a/lotuswordpro/source/filter/lwpbreaksoverride.hxx b/lotuswordpro/source/filter/lwpbreaksoverride.hxx new file mode 100644 index 000000000000..2160e805cf93 --- /dev/null +++ b/lotuswordpro/source/filter/lwpbreaksoverride.hxx @@ -0,0 +1,248 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* +* @file +* Breaks override of Wordpro. +************************************************************************/ +/************************************************************************* +* Change History +* 2005-01-12 Create and implement. +************************************************************************/ +#ifndef _LWPBREAKSOVERRIDE_HXX +#define _LWPBREAKSOVERRIDE_HXX + +#include "lwpoverride.hxx" + +class LwpObjectStream; +class LwpAtomHolder; +class LwpBreaksOverride : public LwpOverride +{ + +public: + LwpBreaksOverride(); + virtual ~LwpBreaksOverride(); + + enum + { + BO_PAGEBEFORE = 0x01, // page break before this style + BO_PAGEAFTER = 0x02, // page break after this style + BO_KEEPTOGETHER = 0x04, + BO_COLBEFORE = 0x08, // col break before this style + BO_COLAFTER = 0x10, // col break after this style + BO_KEEPPREV = 0x20, // not with-PAGE BEF, COL BEF or WITHIN + BO_KEEPNEXT = 0x40, // not with-PAGE AFT, COL AFT or WITHIN + BO_USENEXTSTYLE = 0x80, // use next style name + BO_NEXTSTYLE = 0x100 // next style name + }; +public: + virtual void Read(LwpObjectStream *pStrm); + + //add by , 01/28/2005 + void Override(LwpBreaksOverride* pOther); + + void operator=(const LwpOverride& rOther); + + inline sal_Bool IsPageBreakBefore(); + inline sal_Bool IsPageBreakAfter(); + inline sal_Bool IsPageBreakWithin(); + inline sal_Bool IsColumnBreakBefore(); + inline sal_Bool IsColumnBreakAfter(); + inline sal_Bool IsKeepWithNext(); + inline sal_Bool IsKeepWithPrevious(); + inline sal_Bool IsUseNextStyle(); + + inline sal_Bool IsPageBreakBeforeOverridden(); + inline sal_Bool IsPageBreakAfterOverridden(); + inline sal_Bool IsPageBreakWithinOverridden(); + inline sal_Bool IsColumnBreakBeforeOverridden(); + inline sal_Bool IsColumnBreakAfterOverridden(); + inline sal_Bool IsKeepWithNextOverridden(); + inline sal_Bool IsKeepWithPreviousOverridden(); + inline sal_Bool IsUseNextStyleOverridden(); + + inline void RevertPageBreakBefore(); + inline void RevertPageBreakAfter(); + inline void RevertPageBreakWithin(); + inline void RevertColumnBreakBefore(); + inline void RevertColumnBreakAfter(); + inline void RevertKeepWithNext(); + inline void RevertKeepWithPrevious(); + inline void RevertUseNextStyle(); + + + void OverridePageBreakBefore(sal_Bool bVal); + void OverridePageBreakAfter(sal_Bool bVal); + void OverridePageBreakWithin(sal_Bool bVal); + void OverrideColumnBreakBefore(sal_Bool bVal); + void OverrideColumnBreakAfter(sal_Bool bVal); + void OverrideKeepWithNext(sal_Bool bVal); + void OverrideKeepWithPrevious(sal_Bool bVal); + void OverrideUseNextStyle(sal_Bool bVal); + + + inline LwpAtomHolder* GetNextStyle(); + //end add + +private: + LwpAtomHolder *m_pNextStyle; +}; + +inline sal_Bool LwpBreaksOverride::IsPageBreakBefore() +{ + return (sal_Bool)((m_nValues & BO_PAGEBEFORE) != 0); +} + +inline sal_Bool LwpBreaksOverride::IsPageBreakAfter() +{ + return (sal_Bool)((m_nValues & BO_PAGEAFTER) != 0); +} +inline sal_Bool LwpBreaksOverride::IsPageBreakWithin() +{ + return (sal_Bool)((m_nValues & BO_KEEPTOGETHER) != 0); +} +inline sal_Bool LwpBreaksOverride::IsColumnBreakBefore() +{ + return (sal_Bool)((m_nValues & BO_COLBEFORE) != 0); +} +inline sal_Bool LwpBreaksOverride::IsColumnBreakAfter() +{ + return (sal_Bool)((m_nValues & BO_COLAFTER) != 0); +} +inline sal_Bool LwpBreaksOverride::IsKeepWithNext() +{ + return (sal_Bool)((m_nValues & BO_KEEPNEXT) != 0); +} +inline sal_Bool LwpBreaksOverride::IsKeepWithPrevious() +{ + return (sal_Bool)((m_nValues & BO_KEEPPREV) != 0); +} +inline sal_Bool LwpBreaksOverride::IsUseNextStyle() +{ + return (sal_Bool)((m_nValues & BO_USENEXTSTYLE) != 0); +} + +inline sal_Bool LwpBreaksOverride::IsPageBreakBeforeOverridden() +{ + return (sal_Bool)((m_nOverride& BO_PAGEBEFORE) != 0); +} +inline sal_Bool LwpBreaksOverride::IsPageBreakAfterOverridden() +{ + return (sal_Bool)((m_nOverride& BO_PAGEAFTER) != 0); +} +inline sal_Bool LwpBreaksOverride::IsPageBreakWithinOverridden() +{ + return (sal_Bool)((m_nOverride& BO_KEEPTOGETHER) != 0); +} +inline sal_Bool LwpBreaksOverride::IsColumnBreakBeforeOverridden() +{ + return (sal_Bool)((m_nOverride& BO_COLBEFORE) != 0); +} +inline sal_Bool LwpBreaksOverride::IsColumnBreakAfterOverridden() +{ + return (sal_Bool)((m_nOverride& BO_COLAFTER) != 0); +} +inline sal_Bool LwpBreaksOverride::IsKeepWithNextOverridden() +{ + return (sal_Bool)((m_nOverride& BO_KEEPNEXT) != 0); +} +inline sal_Bool LwpBreaksOverride::IsKeepWithPreviousOverridden() +{ + return (sal_Bool)((m_nOverride& BO_KEEPPREV) != 0); +} +inline sal_Bool LwpBreaksOverride::IsUseNextStyleOverridden() +{ + return (sal_Bool)((m_nOverride& BO_USENEXTSTYLE) != 0); +} + +inline void LwpBreaksOverride::RevertPageBreakBefore() +{ + LwpOverride::Override(BO_PAGEBEFORE, STATE_STYLE); +} +inline void LwpBreaksOverride::RevertPageBreakAfter() +{ + LwpOverride::Override(BO_PAGEAFTER, STATE_STYLE); +} +inline void LwpBreaksOverride::RevertPageBreakWithin() +{ + LwpOverride::Override(BO_KEEPTOGETHER, STATE_STYLE); +} +inline void LwpBreaksOverride::RevertColumnBreakBefore() +{ + LwpOverride::Override(BO_COLBEFORE, STATE_STYLE); +} +inline void LwpBreaksOverride::RevertColumnBreakAfter() +{ + LwpOverride::Override(BO_COLAFTER, STATE_STYLE); +} +inline void LwpBreaksOverride::RevertKeepWithNext() +{ + LwpOverride::Override(BO_KEEPNEXT, STATE_STYLE); +} +inline void LwpBreaksOverride::RevertKeepWithPrevious() +{ + LwpOverride::Override(BO_KEEPPREV, STATE_STYLE); +} +inline void LwpBreaksOverride::RevertUseNextStyle() +{ + LwpOverride::Override(BO_USENEXTSTYLE, STATE_STYLE); +} + +inline LwpAtomHolder* LwpBreaksOverride::GetNextStyle() +{ + return m_pNextStyle; +} + + +#endif diff --git a/lotuswordpro/source/filter/lwpbulletstylemgr.cxx b/lotuswordpro/source/filter/lwpbulletstylemgr.cxx new file mode 100644 index 000000000000..f430cc9f912b --- /dev/null +++ b/lotuswordpro/source/filter/lwpbulletstylemgr.cxx @@ -0,0 +1,590 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ +#include "lwpbulletstylemgr.hxx" +#include "lwpdoc.hxx" +#include "lwpstory.hxx" +#include "lwpdivinfo.hxx" +#include "lwppara.hxx" +#include "lwpsilverbullet.hxx" +#include "lwptools.hxx" +#include "lwpparaproperty.hxx" +#include "xfilter/xfliststyle.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xflist.hxx" +#include "lwpglobalmgr.hxx" + +LwpBulletStyleMgr::LwpBulletStyleMgr() : +m_pBulletList(NULL), m_bContinue(sal_True), m_bIsBulletSkipped(sal_False), m_nCurrentPos(0xFF) +{ +} + +LwpBulletStyleMgr::~LwpBulletStyleMgr() +{ + if (m_pBulletList) + { + delete m_pBulletList; + } + + m_vIDsPairList.clear(); + m_vStyleNameList.clear(); +} + +/** + * @short Register bullet style to style-list. The function only register the bullet and single customized numbering + * not inluding the numbering sequence. + * @param pPara pointer to the current paragraph which has a bullet/numbering. + * @param pBullOver pointer to the bulletoverride of current paragraph. + * @param pIndent pointer to the indentoverride of current paragraph. + */ +rtl::OUString LwpBulletStyleMgr::RegisterBulletStyle(LwpPara* pPara, LwpBulletOverride* pBullOver, + LwpIndentOverride* pIndent) +{ + if(!pPara || !pIndent || !pBullOver) + { +// assert(false); + return rtl::OUString::createFromAscii(""); + } + + LwpSilverBullet* pSilverBullet = pPara->GetSilverBullet(); + if (!pSilverBullet) + { + assert(false); + return rtl::OUString::createFromAscii(""); + } + + LwpPara* pBulletPara = pSilverBullet->GetBulletPara(); + if (!pBulletPara) + { + assert(false); + return rtl::OUString::createFromAscii(""); + } + + LwpParaProperty* pProp = pPara->GetProperty(PP_LOCAL_INDENT); + LwpParaIndentProperty* pIndentProp = NULL; + LwpObjectID aIndentID; + if (pProp) + { + pIndentProp = static_cast<LwpParaIndentProperty*>(pProp); + aIndentID = pIndentProp->GetIndentID(); + } + + LwpObjectID aBulletID = pBullOver->GetSilverBullet(); + LwpBulletOverride aBulletOver = *pBullOver; + + sal_uInt16 nNameIndex = 0; + std::vector <OverridePair>::iterator iter; + for(iter = m_vIDsPairList.begin(); iter != m_vIDsPairList.end(); iter++) + { + if (iter->first.GetSilverBullet() == aBulletID && iter->second == aIndentID + && iter->first.IsRightAligned() == pBullOver->IsRightAligned()) + { + return m_vStyleNameList[nNameIndex]; + } + else + { + nNameIndex++; + } + } + + m_vIDsPairList.push_back(std::make_pair(aBulletOver, aIndentID)); + rtl::OUString aStyleName; + + LwpFribPtr* pBulletParaFribs = pBulletPara->GetFribs(); + sal_Bool bIsNumbering = (sal_Bool)(pBulletParaFribs->HasFrib(FRIB_TAG_PARANUMBER) != 0); + + enumXFAlignType eAlign = enumXFAlignStart; + if (pBullOver->IsRightAligned()) + { + eAlign = enumXFAlignEnd; + } + + XFListStyle* pListStyle = new XFListStyle(); + XFStyleManager* pXFStyleMgr = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + + if (!bIsNumbering) + { + for (sal_uInt8 nC = 1; nC < 11; nC++) + { + pListStyle->SetListBullet(nC, pSilverBullet->GetBulletChar(), pSilverBullet->GetBulletFontName(), + pSilverBullet->GetPrefix(), pSilverBullet->GetSuffix()); + + if (pIndent->GetMRest() > 0.001) + { + pListStyle->SetListPosition(nC, 0.0, + LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(pIndent->GetMRest())), 0.0, eAlign); + } + else + { + pListStyle->SetListPosition(nC, 0.0, + 0.0, LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(pIndent->GetMFirst())), eAlign); + } + } + + aStyleName = pXFStyleMgr->AddStyle(pListStyle)->GetStyleName(); + } + else + { + rtl::OUString aPrefix = rtl::OUString::createFromAscii(""); + + LwpFrib* pFrib = pBulletParaFribs->HasFrib(FRIB_TAG_DOCVAR); + LwpFribDocVar* pDocVarFrib = NULL; + if (pFrib) + { + pDocVarFrib = static_cast<LwpFribDocVar*>(pFrib); +// ModifierInfo* pInfo = pDocVarFrib->GetModifiers(); + switch (pDocVarFrib->GetType()) + { + case 0x000D: // division name + aPrefix = this->GetDivisionName(); + break; + case 0x000E: // section name + aPrefix = this->GetSectionName(pPara); + break; + } + } + ParaNumbering aParaNumbering; + pBulletPara->GetParaNumber(1, &aParaNumbering); + LwpFribParaNumber* pParaNumber = aParaNumbering.pParaNumber; + if (pParaNumber) + { + for (sal_uInt8 nPos = 1; nPos < 10; nPos++) + { + aPrefix = rtl::OUString::createFromAscii(""); + if (pParaNumber->GetStyleID() != NUMCHAR_other) + { + XFNumFmt aFmt; + if (aParaNumbering.pPrefix) + { + aPrefix += aParaNumbering.pPrefix->GetText(); +// aFmt.SetPrefix(aParaNumbering.pPrefix->GetText() + aAdditionalInfoName); + } + + rtl::OUString aNumber = LwpSilverBullet::GetNumCharByStyleID(pParaNumber); + if (pParaNumber->GetStyleID() == NUMCHAR_01 || pParaNumber->GetStyleID() == NUMCHAR_Chinese4) + { + aPrefix += rtl::OUString::createFromAscii("0"); + } + aFmt.SetPrefix(aPrefix); + + aFmt.SetFormat(aNumber); + + if (aParaNumbering.pSuffix) + { + aFmt.SetSuffix(aParaNumbering.pSuffix->GetText()); + } + + //set numbering format into the style-list. + pListStyle->SetListNumber(nPos, aFmt, pParaNumber->GetStart()+1); + + } + else + { + rtl::OUString aPrefix, aSuffix; + if (aParaNumbering.pPrefix) + { + aPrefix = aParaNumbering.pPrefix->GetText(); + } + if (aParaNumbering.pSuffix) + { + aSuffix = aParaNumbering.pSuffix->GetText(); + } + + pListStyle->SetListBullet(nPos, LwpSilverBullet::GetNumCharByStyleID(pParaNumber).toChar(), + rtl::OUString::createFromAscii("Times New Roman"), aPrefix, aSuffix); + } + + pListStyle->SetListPosition(nPos, 0.0, 0.635, 0.0); + } + aStyleName = pXFStyleMgr->AddStyle(pListStyle)->GetStyleName(); + } + + } + + m_vStyleNameList.push_back(aStyleName); + return aStyleName; + +} + +/** + * @short No use now. + * @param rContent + * @param nFontID + * @param pIndent + */ +/*rtl::OUString LwpBulletStyleMgr::RegisterBulletStyle(const rtl::OUString& rContent, sal_uInt32 nFontID, LwpIndentOverride* pIndent) +{ + if (!pIndent) + { + assert(false); + } + + if (!m_pFoundry) + { + return rtl::OUString::createFromAscii(""); + } + LwpFontManager* pFontMgr = m_pFoundry->GetFontManger(); + + rtl::OUString aFontName = pFontMgr->GetNameByID(nFontID); + UChar32 cBulletChar = rContent.toChar(); + rtl::OUString aSuffix = rContent.copy(1); + XFListStyle* pListStyle = new XFListStyle(); + XFStyleManager* pXFStyleMgr = XFStyleManager::Instance(); + + for (sal_uInt8 nC = 1; nC < 11; nC++) + { + pListStyle->SetListBullet(nC, cBulletChar, aFontName, rtl::OUString::createFromAscii(""), aSuffix); + + if (pIndent->GetMRest() > 0.001) + { + pListStyle->SetListPosition(nC, 0.0, + LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(pIndent->GetMRest())), 0.0); + } + else + { + pListStyle->SetListPosition(nC, 0.0, + 0.0, LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(pIndent->GetMFirst()))); + } + } + return pXFStyleMgr->AddStyle(pListStyle); +}*/ + +/** + * @short No use now. + * @param pListStyle + * @param pXFStyleMgr + */ +/*void LwpBulletStyleMgr::CreateNewListStyle(XFListStyle*& pListStyle, XFStyleManager* pXFStyleMgr) +{ + pListStyle = new XFListStyle(); + m_aBulletStyleList.push_back(pListStyle); + m_aCurrentStyleName = pXFStyleMgr->AddStyle(pListStyle); +}*/ + +/** + * @short No use now. + * @param pSilverBullet + * @param nLevel + */ +/*rtl::OUString LwpBulletStyleMgr::AddStyleToList(LwpSilverBullet* pSilverBullet, sal_uInt16 nLevel) +{ + XFListStyle* pListStyle = NULL; + XFStyleManager* pXFStyleMgr = XFStyleManager::Instance(); + + if (m_aBulletStyleList.empty()) + { + // pListStyle = new XFListStyle(); + // m_aBulletStyleList.push_back(pListStyle); + // m_aCurrentStyleName = pXFStyleMgr->AddStyle(pListStyle); + // this->CreateNewListStyle(pListStyle, pXFStyleMgr); + if (pSilverBullet->IsBulletOrdered()) + { + m_strCurrentNumberingName = pSilverBullet->GetNumberingName(); + } + else + { + m_nCurrentChar = pSilverBullet->GetBulletChar(); + m_strCurrentFontName = pSilverBullet->GetBulletFontName(); + } + } + else if (nLevel == 1) + { + if (pSilverBullet->IsBulletOrdered()) + { + if (m_strCurrentNumberingName == pSilverBullet->GetNumberingName()) + { + pListStyle = m_aBulletStyleList.back(); + } + else + { + this->CreateNewListStyle(pListStyle, pXFStyleMgr); + } + } + else + { + if ((m_nCurrentChar == pSilverBullet->GetBulletChar()) && + (m_strCurrentFontName == pSilverBullet->GetBulletFontName())) + { + pListStyle = m_aBulletStyleList.back(); + } + else + { + this->CreateNewListStyle(pListStyle, pXFStyleMgr); + } + } + } + else + { + pListStyle = m_aBulletStyleList.back(); + } + + if (pSilverBullet->IsBulletOrdered()) + { +// pListStyle->SetListNumber(int level, XFNumFmt & fmt, sal_Int16 start); + } + else + { + pListStyle->SetListBullet(nLevel, pSilverBullet->GetBulletChar(), pSilverBullet->GetBulletFontName(), + pSilverBullet->GetPrefix(), pSilverBullet->GetSuffix()); + } + + return m_aCurrentStyleName; +}*/ + +/** + * @short Output bullet list header, such as <text:ordered-list> and <text:list-item> + * @param pOutputStream pointer of XFstream to be written in. + * @param bIsOrdered if the list if ordered or not. + * @param rStyleName style name of the list + * @param nLevel level of the paragraph + */ +void LwpBulletStyleMgr::OutputBulletListHeader(IXFStream* pOutputStream, sal_Bool bIsOrdered, + const rtl::OUString& rStyleName, sal_Int16 nLevel, sal_Bool bIsBulletSkiped) +{ + if (nLevel == 0) + { + return; + } + + m_bIsBulletSkipped = bIsBulletSkiped; + + if (m_pBulletList) + { + delete m_pBulletList; + } + + m_pBulletList = new XFList(); + + //todo: need judge here. + sal_Bool bContinue = m_bContinue; + + if (bIsOrdered) + { + m_pBulletList->SetOrdered(sal_True); + } + else + { + bContinue = sal_False; + m_pBulletList->SetOrdered(sal_False); + } + m_pBulletList->SetStyleName(rStyleName); +// if (nLevels < 0) +// { +// m_pBulletList->StartList(pOutputStream); +// } +// else +// { + for (sal_uInt8 nC = 0; nC < nLevel; nC++) + { + //continue numbering + if (nC == nLevel-1) + { + m_pBulletList->StartList(pOutputStream, bContinue); + } + else + { + m_pBulletList->StartList(pOutputStream); + } + if ((nC == nLevel-1) && bIsBulletSkiped) + { + XFList::StartListHeader(pOutputStream); + } + else + { + XFList::StartListItem(pOutputStream); + } + } +// } +} + +#include "xfilter/xflistitem.hxx" +//Create nested XFList and XFItems and then add it to XFContentContainer(pCont) +//Return the inner XFItem created. +XFContentContainer* LwpBulletStyleMgr::AddBulletList( + XFContentContainer* pCont, sal_Bool bIsOrdered, + const rtl::OUString& rStyleName, sal_Int16 nLevel, sal_Bool bIsBulletSkiped) +{ + assert(nLevel>0); + + m_bIsBulletSkipped = bIsBulletSkiped; + + //todo: need judge here. + sal_Bool bContinue = m_bContinue; + + XFList* theList; + XFList* prevList = NULL; + XFListItem* theItem; + XFListItem* InnerItem = NULL; + for (sal_Int8 nC = nLevel-1; nC >= 0; nC--) + { + theList = new XFList(); + theItem = new XFListItem(); + theList->Add(theItem); + + if (bIsOrdered) + { + theList->SetOrdered(sal_True); + } + else + { + bContinue = sal_False; + theList->SetOrdered(sal_False); + } + + if (nC == nLevel-1) + { + theList->SetContinueNumber(bContinue); + } + //Add the outer list to pCont + if (nC == 0) + { + theList->SetStyleName(rStyleName); + pCont->Add(theList); + } + + if ((nC == nLevel-1) && bIsBulletSkiped) + { + theItem->SetIsHeader(sal_True); + + theList->SetContinueNumber(sal_True); + // end of add + } + + if(nC == nLevel-1) + { + InnerItem = theItem; + } + + if(prevList) + { + theItem->Add(prevList); + } + prevList = theList; + } + return InnerItem; +} + +/** + * @short Output bullet list header, such as </text:ordered-list> and </text:list-item> + * @param pOutputStream pointer of XFstream to be written in. + * @param nLevel level of the paragraph + */ +void LwpBulletStyleMgr::OutputBulletListTail(IXFStream* pOutputStream, sal_uInt16 nLevel) +{ + if ( !m_pBulletList ) + { + return; + } + + for (sal_uInt8 nC = 0; nC < nLevel; nC++) + { + if (m_bIsBulletSkipped) + { + XFList::EndListHeader(pOutputStream); + m_bIsBulletSkipped = sal_False; + } + else + { + XFList::EndListItem(pOutputStream); + } + m_pBulletList->EndList(pOutputStream); + } +} + +rtl::OUString LwpBulletStyleMgr::GetDivisionName() +{ + if (!m_pFoundry) + { + return rtl::OUString::createFromAscii(""); + } + + rtl::OUString aRet = rtl::OUString::createFromAscii(""); + + LwpDocument* pDoc = m_pFoundry->GetDocument(); + if (pDoc) + { + LwpObjectID* pID = pDoc->GetDivInfoID(); + if (!pID->IsNull()) + { + aRet = static_cast<LwpDivInfo*>(pID->obj(VO_DIVISIONINFO))->GetDivName(); + } + } + + return aRet; +} + +rtl::OUString LwpBulletStyleMgr::GetSectionName(LwpPara* pPara) +{ + LwpObjectID* pStoryID = pPara->GetStoryID(); + if (pStoryID->IsNull()) + { + return rtl::OUString::createFromAscii(""); + } + + LwpStory* pStory = static_cast<LwpStory*>(pStoryID->obj(VO_STORY)); + if (!pStory) + { + return rtl::OUString::createFromAscii(""); + } + + return pStory->GetSectionName(); +} diff --git a/lotuswordpro/source/filter/lwpbulletstylemgr.hxx b/lotuswordpro/source/filter/lwpbulletstylemgr.hxx new file mode 100644 index 000000000000..2da415055689 --- /dev/null +++ b/lotuswordpro/source/filter/lwpbulletstylemgr.hxx @@ -0,0 +1,168 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ +#ifndef _LWPBULLETSTYLEMGR_HXX +#define _LWPBULLETSTYLEMGR_HXX + +#include "lwpheader.hxx" +#include "lwpfoundry.hxx" +#include "lwpobjid.hxx" +#include "lwpnumberingoverride.hxx" +#include <utility> +#include "xfilter/xfcontentcontainer.hxx" + +class XFListStyle; +class XFList; +class LwpPara; +class LwpSilverBullet; +class XFStyleManager; +class LwpIndentOverride; +class LwpBulletOverride; +class LwpFribParaNumber; + +class LwpBulletStyleMgr +{ +public: + LwpBulletStyleMgr(); + virtual ~LwpBulletStyleMgr(); + rtl::OUString RegisterBulletStyle(LwpPara* pPara, LwpBulletOverride* pBullOver, + LwpIndentOverride* pIndent); +// rtl::OUString RegisterBulletStyle(const rtl::OUString& rContent, sal_uInt32 nFontID, LwpIndentOverride* pIndent); +// rtl::OUString AddStyleToList(LwpSilverBullet* pSilverBullet, sal_uInt16 nLevel); + inline void SetFoundry(LwpFoundry* pFoundry); + inline void SetContinueFlag(sal_Bool bFlag); + void OutputBulletListHeader(IXFStream* pOutputStream, sal_Bool bIsOrdered, + const rtl::OUString& rStyleName, sal_Int16 nLevel, sal_Bool bIsBulletSkiped); + //Added by Helen + XFContentContainer* AddBulletList(XFContentContainer* pCont, sal_Bool bIsOrdered, + const rtl::OUString& rStyleName, sal_Int16 nLevel, sal_Bool bIsBulletSkiped); + //End of Add + void OutputBulletListTail(IXFStream* pOutputStream, sal_uInt16 nLevel); + inline void SetCurrentPos(sal_uInt16 nNewPos); + inline void SetCurrentSilverBullet(const LwpObjectID& rNewID); + inline LwpObjectID GetCurrentSilverBullet(); + inline sal_uInt16 GetCurrentPos() const; + inline void SetCurrentNumOver(const LwpNumberingOverride& rOther); + inline LwpNumberingOverride* GetCurrentNumOver(); + +private: +// void CreateNewListStyle(XFListStyle*& pListStyle, XFStyleManager* pXFStyleMgr); + rtl::OUString GetDivisionName(); + rtl::OUString GetSectionName(LwpPara* pPara); + +private: +// std::vector <XFListStyle*> m_aBulletStyleList; + typedef std::pair<LwpBulletOverride, LwpObjectID> OverridePair; + std::vector <rtl::OUString> m_vStyleNameList; + std::vector <OverridePair> m_vIDsPairList; + rtl::OUString m_aCurrentStyleName; + LwpFoundry* m_pFoundry; + XFList* m_pBulletList; +// UChar32 m_nCurrentChar; +// rtl::OUString m_strCurrentFontName; +// rtl::OUString m_strCurrentNumberingName; + sal_Bool m_bContinue; + sal_Bool m_bIsBulletSkipped; + LwpObjectID m_aCurrentNumberingID; + LwpNumberingOverride m_aCurrentNumOverride; + sal_uInt16 m_nCurrentPos; + +}; + +inline void LwpBulletStyleMgr::SetFoundry(LwpFoundry* pFoundry) +{ + m_pFoundry = pFoundry; +} +inline void LwpBulletStyleMgr::SetContinueFlag(sal_Bool bFlag) +{ + m_bContinue = bFlag; +} + +inline void LwpBulletStyleMgr::SetCurrentPos(sal_uInt16 nNewPos) +{ + m_nCurrentPos = nNewPos; +} +inline void LwpBulletStyleMgr::SetCurrentSilverBullet(const LwpObjectID& rNewID) +{ + m_aCurrentNumberingID = rNewID; +} + +inline LwpObjectID LwpBulletStyleMgr::GetCurrentSilverBullet() +{ + return m_aCurrentNumberingID; +} + +inline sal_uInt16 LwpBulletStyleMgr::GetCurrentPos() const +{ + return m_nCurrentPos; +} + +inline void LwpBulletStyleMgr::SetCurrentNumOver(const LwpNumberingOverride& rOther) +{ + m_aCurrentNumOverride = rOther; +} +inline LwpNumberingOverride* LwpBulletStyleMgr::GetCurrentNumOver() +{ + return &m_aCurrentNumOverride; +} + +#endif diff --git a/lotuswordpro/source/filter/lwpcelllayout.cxx b/lotuswordpro/source/filter/lwpcelllayout.cxx new file mode 100644 index 000000000000..d8b239fb8188 --- /dev/null +++ b/lotuswordpro/source/filter/lwpcelllayout.cxx @@ -0,0 +1,955 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - cell layouts + */ +/************************************************************************* + * Change History + April 2005 Created + ************************************************************************/ +#include "lwpcelllayout.hxx" +#include "lwpfoundry.hxx" +#include "lwpobjfactory.hxx" +#include "lwptblcell.hxx" +#include "lwptblformula.hxx" +#include "lwpholder.hxx" +#include "lwpnumericfmt.hxx" +#include "lwptable.hxx" +#include "lwpglobalmgr.hxx" + +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xfcell.hxx" +#include "xfilter/xfcellstyle.hxx" +#include "xfilter/xfcolstyle.hxx" + +LwpCellLayout::LwpCellLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpMiddleLayout(objHdr, pStrm) +{} + +LwpCellLayout::~LwpCellLayout() +{} + +/** + * @short Get table layout pointer, if default cell layout, return NULL + * @param LwpTableLayout * + * @return + */ +LwpTableLayout * LwpCellLayout::GetTableLayout() +{ + LwpRowLayout * pRow = static_cast<LwpRowLayout *>(GetParent()->obj()); + if(!pRow) + { + return NULL; + } + LwpTableLayout * pTableLayout = pRow->GetParentTableLayout(); + return pTableLayout; +} +/** + * @short Get table pointer, if default cell layout, return NULL + * @param LwpTable * + * @return + */ +LwpTable * LwpCellLayout::GetTable() +{ + LwpTableLayout * pTableLayout = GetTableLayout(); + if(!pTableLayout) + { + return NULL; + } + LwpTable *pTable = pTableLayout->GetTable(); + return pTable; +} +/** + * @short Set current cell layout to cell layout map + * @param + * @return + */ +void LwpCellLayout::SetCellMap() +{ + // this function is called from LwpTableLayout, so it can't be NULL + GetTableLayout()->SetWordProCellMap(crowid, ccolid, this); +} +/** + * @short Get actual width of this cell layout + * @param + * @return width (cm) + */ +double LwpCellLayout::GetActualWidth() +{ + //Get table layout + LwpTableLayout * pTableLayout = GetTableLayout(); + + if (pTableLayout == NULL) + { + return GetGeometryWidth(); + } + + OUString strColStyle = pTableLayout->GetColumnWidth(ccolid); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + XFColStyle *pStyle = static_cast<XFColStyle *>(pXFStyleManager->FindStyle(strColStyle)); + if(pStyle) + { + return pStyle->GetWidth(); + } + + return GetGeometryWidth(); +} + +/** + * @short Apply padding to cell style + * @param pCellStyle - pointer of XFCellStyle + * @return + */ +void LwpCellLayout::ApplyPadding(XFCellStyle *pCellStyle) +{ + double fLeft = GetMarginsValue(MARGIN_LEFT); + double fRight = GetMarginsValue(MARGIN_RIGHT); + double fTop = GetMarginsValue(MARGIN_TOP); + double fBottom = GetMarginsValue(MARGIN_BOTTOM); + pCellStyle->SetPadding((float)fLeft,(float)fRight,(float)fTop,(float)fBottom); +} +/** + * @short Apply border to cell style according to cell position, default cell layout won't use this function + * @param + * @return pCellStyle - pointer of XFCellStyle + */ +void LwpCellLayout::ApplyBorders(XFCellStyle *pCellStyle) +{ + // judge cell border type + LwpCellBorderType eType = GetCellBorderType(crowid, ccolid, GetTableLayout()); + + // get left cell and judge if neighbour border is different + XFBorders * pBorders = GetXFBorders(); + if(!pBorders) + { + return; + } + + switch (eType) + { + case enumNoBottomBorder: + pBorders->SetWidth(enumXFBorderBottom, 0); + break; + case enumNoLeftBorder: + pBorders->SetWidth(enumXFBorderLeft, 0); + break; + case enumNoLeftNoBottomBorder: + pBorders->SetWidth(enumXFBorderBottom, 0); + pBorders->SetWidth(enumXFBorderLeft, 0); + break; + case enumWholeBorder: + break; + default: + assert(sal_False); + } + pCellStyle->SetBorders(pBorders); +} +/** + * @short Apply watermark to cell style + * @param pCellStyle - pointer of XFCellStyle + * @return + */ +void LwpCellLayout::ApplyWatermark(XFCellStyle *pCellStyle) +{ + XFBGImage* pBGImage = GetXFBGImage(); + if(pBGImage) + { + pCellStyle->SetBackImage(pBGImage); + } +} + +/** + * @short Apply pattern fill to cell style + * @param pCellStyle - pointer of XFCellStyle + * @return + */ +void LwpCellLayout::ApplyPatternFill(XFCellStyle* pCellStyle) +{ + XFBGImage* pXFBGImage = this->GetFillPattern(); + if (pXFBGImage) + { + pCellStyle->SetBackImage(pXFBGImage); + } +} + +/** + * @short Apply background to cell style + * @param pCellStyle - pointer of XFCellStyle + * @return + */ +void LwpCellLayout::ApplyBackGround(XFCellStyle* pCellStyle) +{ + if (this->IsPatternFill()) + { + ApplyPatternFill(pCellStyle); + } + else + { + ApplyBackColor(pCellStyle); + } +} +/** + * @short Apply back color to cell style + * @param pCellStyle - pointer of XFCellStyle + * @return + */ +void LwpCellLayout::ApplyBackColor(XFCellStyle *pCellStyle) +{ + LwpColor* pColor = GetBackColor(); + if(pColor && pColor->IsValidColor()) + { + XFColor aXFColor(pColor->To24Color()); + pCellStyle->SetBackColor(aXFColor); + } +} +/** + * @short register style of cell layout + * @param pCellStyle The style of the cell, which would be applied to the cell. + * @return + */ +void LwpCellLayout::ApplyFmtStyle(XFCellStyle *pCellStyle) +{ + LwpLayoutNumerics* pLayoutNumerics =(LwpLayoutNumerics*)cLayNumerics.obj(); + if (!pLayoutNumerics) + { + // if current layout doesn't have format, go to based on layout + LwpCellLayout* pCellLayout = (LwpCellLayout*)m_BasedOnStyle.obj(); + if (pCellLayout) + { + pLayoutNumerics = (LwpLayoutNumerics*)pCellLayout->GetNumericsObject()->obj(); + } + } + + // apply format style + if (pLayoutNumerics) + { + XFStyle* pStyle = pLayoutNumerics->Convert(); + if (pStyle) + { + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_NumfmtName = pXFStyleManager->AddStyle(pStyle)->GetStyleName(); + pCellStyle->SetDataStyle(m_NumfmtName);//modified by ,2005/11/30 + } + } + + return; +} +/** + * @short get style name according to cell position, only table default cells use this function + * @param nRow - default cell position row number + * @param nCol - default cell position col number + * @return OUString - registered cell style name + */ +OUString LwpCellLayout::GetCellStyleName(sal_uInt16 nRow, sal_uInt16 nCol, LwpTableLayout * pTableLayout) +{ + // judge cell border type + LwpCellBorderType eType = GetCellBorderType(nRow, nCol, pTableLayout); + return m_CellStyleNames[eType]; +} +/** +* Make the XFCell +* @date 03/26/2005 +* @param aTableID - ID of the table which this cell belongs to +* @param bIsTopRow - whether current cell is top row +* @param bIsRightCol - whether current cell is the rightest column +* @return XFCell* +*/ +XFCell* LwpCellLayout::ConvertCell(LwpObjectID aTableID, sal_uInt16 nRow, sal_uInt16 nCol) +{ + // if cell layout is aTableID's default cell layout + // it can't have any content, bypass these code + LwpTable * pTable = static_cast<LwpTable *>(aTableID.obj()); + if (!pTable) + { + assert(sal_False); + return NULL; + } + XFCell * pXFCell = new XFCell(); + OUString aStyleName = m_StyleName; + + // if cell layout is aTableID's default cell layout + // we should judt its style by current positon + if (*pTable->GetDefaultCellStyle() == *GetObjectID()) + { + aStyleName = GetCellStyleName(nRow, nCol, pTable->GetTableLayout()); + } + + // content of cell + LwpStory* pStory =(LwpStory*) m_Content.obj(); + if (pStory) + { + pStory->XFConvert(pXFCell); + } + + ApplyProtect(pXFCell, aTableID); + pXFCell->SetStyleName(aStyleName); + return pXFCell; +} + +LwpPara* LwpCellLayout::GetLastParaOfPreviousStory() +{ + LwpObjectID* pPreStoryID = this->GetPreviousCellStory(); + if (pPreStoryID && !(pPreStoryID->IsNull())) + { + LwpStory* pPreStory = static_cast<LwpStory*>(pPreStoryID->obj(VO_STORY)); + return static_cast<LwpPara*>(pPreStory->GetLastPara()->obj(VO_PARA)); + } + else + { + return NULL; + } +} + +/** + * @short Get previous cell which used for bullet inside cell + * @param + * @return LwpObjectID * - object ID of cell content story + */ +LwpObjectID * LwpCellLayout::GetPreviousCellStory() +{ + LwpTable *pTable = GetTable(); + if (!pTable) + { + assert(sal_False); + return NULL; + } + sal_uInt16 nRow = crowid; + sal_uInt16 nCol = ccolid; + + // if table is reset paragraph in columns, get cell on the top side of current cell + if (pTable->IsNumberDown()) + { + if (nRow == 0) + { + return NULL; + } + nRow -=1; + } + else + { + // if not, get cell on the left side of current cell + if (nCol == 0) + { + if (nRow == 0) + { + return NULL; + } + else + { + nRow--; + nCol = pTable->GetColumn() - 1; + } + } + else + { + nCol -=1; + } + } + + // get the object id pointer of previous cell story + LwpTableLayout * pTableLayout = GetTableLayout(); + if (!pTableLayout) + { + assert(sal_False); + return NULL; + } + return pTableLayout->SearchCellStoryMap(nRow, nCol); +} + +/** + * @short judge border type by cell neighbour + * @param nRow + * @param nCol + * @param pTableLayout + * @return LwpCellBorderType + */ +LwpCellBorderType LwpCellLayout::GetCellBorderType(sal_uInt16 nRow, sal_uInt16 nCol, LwpTableLayout * pTableLayout) +{ + if (!pTableLayout) + { + assert(sal_False); + return enumWholeBorder; + } + + // get left cell and judge if neighbour border is different + XFBorders * pBorders = GetXFBorders(); + if(!pBorders) + { + return enumWholeBorder; + } + XFBorder *pLeftBorder = pBorders->GetLeft(); + XFBorder *pBottomBorder = pBorders->GetBottom(); + sal_Bool bNoLeftBorder = sal_False; + sal_Bool bNoBottomBorder = sal_False; + + LwpCellLayout * pLeftNeighbour = GetCellByRowCol(nRow, GetLeftColID(nCol), pTableLayout); + if (pLeftNeighbour) + { + XFBorders * pNeighbourBorders = pLeftNeighbour->GetXFBorders(); + if (pNeighbourBorders) + { + XFBorder * pRightBorder = pNeighbourBorders->GetRight(); + if (*pLeftBorder == *pRightBorder) + { + // for these 2 types cell, left border should be ignored for sake of avoiding duplication border + // but if left border is different with right border of left cell + // we should not ignored it + bNoLeftBorder = sal_True; + } + delete pNeighbourBorders; + } + + } + + LwpCellLayout * pBelowNeighbour = GetCellByRowCol(GetBelowRowID(nRow), nCol, pTableLayout); + if (pBelowNeighbour) //&& (eType == enumRightNotLastCellBorder || eType == enumLeftNotLastCellBorder) ) + { + XFBorders * pBelowBorders = pBelowNeighbour->GetXFBorders(); + if (pBelowBorders) + { + XFBorder * pTopBorder = pBelowBorders->GetTop(); + if (*pTopBorder == *pBottomBorder) + { + // for these 2 types cell, bottom border should be ignored for sake of avoiding duplication border + // but if bottom border is different with right border of left cell + // we should not ignored it + bNoBottomBorder = sal_True; + } + delete pBelowBorders; + } + } + + delete pBorders; + + if (bNoBottomBorder) + { + if (bNoLeftBorder) + { + return enumNoLeftNoBottomBorder; + } + return enumNoBottomBorder; + } + if (bNoLeftBorder) + { + return enumNoLeftBorder; + } + return enumWholeBorder; +} + +/** + * @short Get neighbour cell by specifying ROW+COL + * @param nRow + * @param nCol + * @return LwpCellLayout * + */ +LwpCellLayout * LwpCellLayout::GetCellByRowCol(sal_uInt16 nRow, sal_uInt16 nCol, LwpTableLayout * pTableLayout) +{ + return pTableLayout->GetCellByRowCol(nRow, nCol); +} +/** + * @short Register table's default cell layout + * @param + * @return + */ +void LwpCellLayout::RegisterDefaultCell() +{ + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + for (sal_uInt16 eLoop = enumWholeBorder; eLoop < enumCellBorderTopLimit; eLoop++) + { + // register cell style + XFCellStyle *pCellStyle = new XFCellStyle(); + + ApplyPadding(pCellStyle); + ApplyBackColor(pCellStyle); + ApplyWatermark(pCellStyle); + ApplyFmtStyle(pCellStyle); + pCellStyle->SetAlignType(enumXFAlignNone, GetVerticalAlignmentType()); + + XFBorders * pBorders = GetXFBorders(); + if (pBorders) + { + switch(eLoop) + { + case enumNoBottomBorder: + // _ + //| | + // + // remove bottom line + pBorders->SetWidth(enumXFBorderBottom, 0); + break; + case enumNoLeftNoBottomBorder: + // _ + // | + // + // remove left and bottom + pBorders->SetWidth(enumXFBorderLeft, 0); + pBorders->SetWidth(enumXFBorderBottom, 0); + break; + case enumWholeBorder: + //-- + //|| + //-- + // nothing to remove + break; + case enumNoLeftBorder: + // + //| | + //-- + // remove left line + pBorders->SetWidth(enumXFBorderLeft, 0); + break; + default: + assert(sal_False); + } + pCellStyle->SetBorders(pBorders); + } + m_CellStyleNames[eLoop] = pXFStyleManager->AddStyle(pCellStyle)->GetStyleName(); + } +} +/** + * @short Register 4 types of cell style and register content styles + * @param + * @param + * @param + * @return + */ +void LwpCellLayout::RegisterStyle() +{ + LwpVirtualLayout * pParent = static_cast<LwpVirtualLayout *>(GetParent()->obj()); + if (!pParent || pParent->GetLayoutType() != LWP_ROW_LAYOUT) + { + // default cell layout, we must register 4 styles for it + RegisterDefaultCell(); + return; + } + + // register cell style + XFCellStyle *pCellStyle = new XFCellStyle(); + + ApplyPadding(pCellStyle); +// ApplyBackColor(pCellStyle); + ApplyBackGround(pCellStyle); + ApplyWatermark(pCellStyle); + ApplyFmtStyle(pCellStyle); + ApplyBorders(pCellStyle); + + pCellStyle->SetAlignType(enumXFAlignNone, GetVerticalAlignmentType()); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_StyleName = pXFStyleManager->AddStyle(pCellStyle)->GetStyleName(); + + // content object register styles + LwpObject * pObj = m_Content.obj(); + if (pObj) + { + pObj->SetFoundry(m_pFoundry); + pObj->RegisterStyle(); + } + + //register child layout style + RegisterChildStyle(); + /* + LwpVirtualLayout* pLayout = static_cast<LwpVirtualLayout*>(GetChildHead()->obj()); + while(pLayout) + { + pLayout->SetFoundry(m_pFoundry); + pLayout->RegisterStyle(); + pLayout = static_cast<LwpVirtualLayout*>(pLayout->GetNext()->obj()); + } + */ +} +/** + * @short Read cell layout + * @param + * @return + */ +void LwpCellLayout::Read() +{ + LwpObjectStream* pStrm = m_pObjStrm; + + LwpMiddleLayout::Read(); + + // before the layout hierarchy rework + if (LwpFileHeader::m_nFileRevision < 0x000b) + { + assert(sal_False); + } + else + { + crowid = pStrm->QuickReaduInt16(); + ccolid = (sal_uInt8) pStrm->QuickReaduInt16(); // written as a lushort + + sal_uInt16 type; + + type = pStrm->QuickReaduInt16(); + pStrm->SkipExtra(); + cType = (LeaderDotType)type; + + cLayNumerics.ReadIndexed(pStrm); + cLayDiagonalLine.ReadIndexed(pStrm); + + pStrm->SkipExtra(); + } +} +/** + * @short Get leader char + * @param none + * @return char ascii, if none, return 0 + */ +sal_uInt8 LwpCellLayout::GetLeaderChar() +{ + switch(cType) + { + case LDT_NONE: + return 0; + case LDT_DOTS: + return '.'; + case LDT_DASHES: + return '-'; + case LDT_UNDERSCORES: + return '_'; + default: + assert(sal_False); + } + return 0; +} +/** +* Apply protect attribute to cell of table +* @date 04/04/2005 +* @param aTableID - ID of the table which the cell belongs to +* @param +* @return XFCell* +*/ +void LwpCellLayout::ApplyProtect(XFCell * pCell, LwpObjectID aTableID) +{ + sal_Bool bProtected = sal_False; + // judge current cell + if (IsProtected()) + { + bProtected = sal_True; + } + else + { + // judge base on + LwpCellLayout * pBase = static_cast<LwpCellLayout *>(m_BasedOnStyle.obj()); + if (pBase && pBase->IsProtected()) + { + bProtected = sal_True; + } + else + { + // judge whole table + LwpTable * pTable = static_cast<LwpTable *>(aTableID.obj()); + LwpTableLayout * pTableLayout = static_cast<LwpTableLayout *>(pTable->GetTableLayout()); + LwpSuperTableLayout * pSuper = pTableLayout->GetSuperTableLayout(); + if (pSuper && pSuper->IsProtected()) + { + bProtected = sal_True; + } + } + } + + pCell->SetProtect(bProtected); +} + + +LwpConnectedCellLayout::LwpConnectedCellLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpCellLayout(objHdr, pStrm) +{} + +LwpConnectedCellLayout::~LwpConnectedCellLayout() +{} +/** + * @short Set current connected cell layout to cell layout map + * @param pCellLayoutMap - cell layout map reference + * @return + */ +void LwpConnectedCellLayout::SetCellMap() +{ + // this function is called from LwpTableLayout, so it can't be NULL + LwpTableLayout * pTableLayout = GetTableLayout(); + sal_uInt16 nRowSpan = m_nRealrowspan; + + for (sal_uInt16 iLoop = 0; iLoop < nRowSpan; iLoop ++) + { + for (sal_uInt16 jLoop = 0; jLoop < cnumcols; jLoop ++) + pTableLayout->SetWordProCellMap(iLoop + crowid, jLoop + ccolid, this); + } +} + +/** + * @short judge border type by cell neighbour + * @param nRow + * @param nCol + * @param pTableLayout + * @return LwpCellBorderType + */ +LwpCellBorderType LwpConnectedCellLayout::GetCellBorderType(sal_uInt16 nRow, sal_uInt16 nCol, LwpTableLayout * pTableLayout) +{ + if (!pTableLayout) + { + assert(sal_False); + return enumWholeBorder; + } + + sal_uInt16 nRowSpan = m_nRealrowspan; + + // get left cell and judge if neighbour border is different + XFBorders * pBorders = GetXFBorders(); + if(!pBorders) + { + return enumWholeBorder; + } + XFBorder *pLeftBorder = pBorders->GetLeft(); + XFBorder *pBottomBorder = pBorders->GetBottom(); + sal_Bool bNoLeftBorder = sal_True; + sal_Bool bNoBottomBorder = sal_True; + + if (nCol == 0) + { + bNoLeftBorder = sal_False; + } + else + { + for (sal_uInt16 iLoop=0; iLoop < nRowSpan; iLoop++) + { + LwpCellLayout * pLeftNeighbour = GetCellByRowCol(nRow+iLoop, GetLeftColID(nCol), pTableLayout); + if (pLeftNeighbour) + { + XFBorders * pNeighbourBorders = pLeftNeighbour->GetXFBorders(); + if (pNeighbourBorders) + { + XFBorder * pRightBorder = pNeighbourBorders->GetRight(); + if (*pLeftBorder != *pRightBorder) + { + // if left border is different with right border of left cell + // we should not ignored it + bNoLeftBorder = sal_False; + break; + } + delete pNeighbourBorders; + } + } + } + } + + if ( (nRow + nRowSpan) == pTableLayout->GetTable()->GetRow() ) + { + bNoBottomBorder = sal_False; + } + else + { + for (sal_uInt16 iLoop = 0; iLoop < cnumcols; iLoop ++) + { + LwpCellLayout * pBelowNeighbour = GetCellByRowCol(nRow + nRowSpan, nCol+iLoop, pTableLayout); + if (pBelowNeighbour) + { + XFBorders * pBelowBorders = pBelowNeighbour->GetXFBorders(); + if (pBelowBorders) + { + XFBorder * pTopBorder = pBelowBorders->GetTop(); + if (*pTopBorder != *pBottomBorder) + { + // if bottom border is different with right border of left cell + // we should not ignored it + bNoBottomBorder = sal_False; + break; + } + delete pBelowBorders; + } + } + } + } + delete pBorders; + + if (bNoBottomBorder) + { + if (bNoLeftBorder) + { + return enumNoLeftNoBottomBorder; + } + return enumNoBottomBorder; + } + if (bNoLeftBorder) + { + return enumNoLeftBorder; + } + return enumWholeBorder; +} +/** + * @short Read connected cell layout + * @param + * @return + */ +void LwpConnectedCellLayout::Read() +{ + LwpCellLayout::Read(); + sal_uInt16 numcols; + + cnumrows = m_pObjStrm->QuickReaduInt16(); + numcols = m_pObjStrm->QuickReaduInt16(); // written as a lushort + cnumcols = (sal_uInt8)numcols; + + m_nRealrowspan = cnumrows; + m_nRealcolspan = cnumcols; + + m_pObjStrm->SkipExtra(); +} +XFCell* LwpConnectedCellLayout::ConvertCell(LwpObjectID aTableID, sal_uInt16 nRow, sal_uInt16 nCol) +{ + XFCell * pXFCell = LwpCellLayout::ConvertCell(aTableID, nRow, nCol); + pXFCell->SetColumnSpaned(cnumcols); +// if(!m_bSplitFlag) +// { +// } + return pXFCell; +} +/** + * @short parse connected cell layout + * @param pOutputStream - output stream + * @return + */ + void LwpConnectedCellLayout::Parse(IXFStream* pOutputStream) +{ +} + +LwpHiddenCellLayout::LwpHiddenCellLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpCellLayout(objHdr, pStrm) +{} + +LwpHiddenCellLayout::~LwpHiddenCellLayout() +{} +/** + * @short Set current hidden cell layout to cell layout map + * @param + * @return + */ +void LwpHiddenCellLayout::SetCellMap() +{ + return; +} +/** + * @short Read hidden cell layout + * @param + * @return + */ +void LwpHiddenCellLayout::Read() +{ + LwpCellLayout::Read(); + + cconnectedlayout.ReadIndexed(m_pObjStrm); + m_pObjStrm->SkipExtra(); + +} +/** + * @short Convert hidden cell layout + * @param aTableID - Object ID of table + * @return XFCell * - pointer to converted cell + */ + +XFCell* LwpHiddenCellLayout::ConvertCell(LwpObjectID aTableID, sal_uInt16 nRow, sal_uInt16 nCol) +{ + if (!cconnectedlayout.obj()) + return NULL; + LwpConnectedCellLayout* pConnCell = static_cast<LwpConnectedCellLayout* >(cconnectedlayout.obj()); + + if (nRow < (pConnCell->GetNumrows()+pConnCell->GetRowID())) + return NULL; + // if the hidden cell should be displayed for limit of SODC + // use the default cell layout + XFCell* pXFCell = NULL; + LwpTable *pTable = static_cast<LwpTable *>(aTableID.obj()); + if (pTable) + { + LwpCellLayout *pDefault = static_cast<LwpCellLayout *>(pTable->GetDefaultCellStyle()->obj()); + if (pDefault) + { + pXFCell = pDefault->ConvertCell(aTableID, nRow, nCol); + } + else + { + pXFCell = pConnCell->ConvertCell(aTableID, nRow, nCol); + } + pXFCell->SetColumnSpaned(pConnCell->GetNumcols()); + } + else + { + assert(sal_False); + } + return pXFCell; +} +/** + * @short parse hidden cell layout + * @param pOutputStream - output stream + * @return + */ + void LwpHiddenCellLayout::Parse(IXFStream* pOutputStream) +{ +} + + +LwpParallelColumnsBlock::LwpParallelColumnsBlock(LwpObjectHeader &objHdr, LwpSvStream* pStrm):LwpCellLayout(objHdr, pStrm) +{} + +LwpParallelColumnsBlock::~LwpParallelColumnsBlock() +{} + +void LwpParallelColumnsBlock::Read() +{ + LwpCellLayout::Read(); + m_pObjStrm->SkipExtra(); +} diff --git a/lotuswordpro/source/filter/lwpcelllayout.hxx b/lotuswordpro/source/filter/lwpcelllayout.hxx new file mode 100644 index 000000000000..836e9098704a --- /dev/null +++ b/lotuswordpro/source/filter/lwpcelllayout.hxx @@ -0,0 +1,209 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - cell layouts + */ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ +#ifndef _LWPCELLLAYOUT_HXX +#define _LWPCELLLAYOUT_HXX +#include <vector> +#include <map> +#include "lwplayout.hxx" +#include "lwptablelayout.hxx" + +typedef enum +{ + enumWholeBorder = 0, + enumNoLeftBorder, + enumNoBottomBorder, + enumNoLeftNoBottomBorder, + enumCellBorderTopLimit = 4, +} LwpCellBorderType; + + +class XFCell; +class XFCellStyle; +class LwpCellList; +class LwpTable; +class LwpTableLayout; +/** + * @brief + * VO_CELLLAYOUT object + */ +class LwpCellLayout : public LwpMiddleLayout +{ +public: + LwpCellLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpCellLayout(); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_CELL_LAYOUT;} + virtual XFCell* ConvertCell(LwpObjectID aTableID, sal_uInt16 nRow, sal_uInt16 nCol); + sal_uInt16 GetRowID(){return crowid;}; + sal_uInt8 GetColID(){return ccolid;}; + void RegisterStyle(); + LwpObjectID * GetNumericsObject() {return &cLayNumerics;}; + LwpObjectID * GetPreviousCellStory(); + virtual LwpPara* GetLastParaOfPreviousStory(); + LwpTableLayout * GetTableLayout(); + virtual void SetCellMap(void); + double GetActualWidth(); + sal_uInt8 GetLeaderChar(); + OUString GetNumfmtName(){return m_NumfmtName;} +protected: + void Read(); +// LwpTableLayout * GetTableLayout(); + LwpTable * GetTable(); + void ApplyPadding(XFCellStyle* pCellStyle); + void ApplyBorders(XFCellStyle* pCellStyle); + // add by , 06/03/2005 + void ApplyPatternFill(XFCellStyle* pCellStyle); + void ApplyBackGround(XFCellStyle* pCellStyle); + // end add + void ApplyBackColor(XFCellStyle* pCellStyle); + void ApplyWatermark(XFCellStyle* pCellStyle); + void ApplyProtect(XFCell * pCell, LwpObjectID aTableID); + void ApplyFmtStyle(XFCellStyle *pCellStyle); + OUString GetCellStyleName(sal_uInt16 nRow, sal_uInt16 nCol, LwpTableLayout * pTableLayout); + void RegisterDefaultCell(); + virtual LwpCellBorderType GetCellBorderType(sal_uInt16 nRow, sal_uInt16 nCol, LwpTableLayout * pTableLayout); + LwpCellLayout * GetCellByRowCol(sal_uInt16 nRow, sal_uInt16 nCol, LwpTableLayout * pTableLayout); + virtual sal_uInt16 GetLeftColID(sal_uInt16 nCol){return nCol - 1; }; + virtual sal_uInt16 GetBelowRowID(sal_uInt16 nRow){return nRow + 1; }; + + sal_uInt16 crowid; + sal_uInt8 ccolid; + LwpObjectID cLayNumerics; + LwpObjectID cLayDiagonalLine; + + enum LeaderDotType + { + LDT_NONE = 0, + LDT_DOTS = 1, + LDT_DASHES = 2, + LDT_UNDERSCORES = 3 + }; + LeaderDotType cType; + OUString m_CellStyleNames[enumCellBorderTopLimit]; + + OUString m_NumfmtName;//Add by , to support number color,2005/11/30 +private: + LwpCellList* GetCellList(LwpFoundry* pFoundry, LwpObjectID aTableID, sal_uInt16 nRow, sal_uInt8 nCol); +}; + +/** + * @brief + * VO_HIDDENCELLLAYOUT object + */ +class LwpHiddenCellLayout : public LwpCellLayout +{ +public: + LwpHiddenCellLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpHiddenCellLayout(); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_HIDDEN_CELL_LAYOUT;} + virtual void Parse(IXFStream* pOutputStream); + virtual XFCell* ConvertCell(LwpObjectID aTableID, sal_uInt16 nRow, sal_uInt16 nCol); + void RegisterStyle(){}; + virtual void SetCellMap(void); +protected: + void Read(); + LwpObjectID cconnectedlayout; +}; + +/** + * @brief + * VO_CONNECTEDCELLLAYOUT object + */ +class LwpConnectedCellLayout : public LwpCellLayout +{ +public: + LwpConnectedCellLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpConnectedCellLayout(); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_CONNECTED_CELL_LAYOUT;} + virtual void Parse(IXFStream* pOutputStream); + virtual XFCell* ConvertCell(LwpObjectID aTableID, sal_uInt16 nRow, sal_uInt16 nCol); + sal_uInt16 GetNumrows(){return m_nRealrowspan;} + sal_uInt8 GetNumcols(){return m_nRealcolspan;} + virtual void SetCellMap(void); + void SetNumrows(sal_uInt16 nVal){m_nRealrowspan = nVal;} + void SetNumcols(sal_uInt8 nVal){m_nRealcolspan = nVal;} +protected: + void Read(); + virtual sal_uInt16 GetBelowRowID(sal_uInt16 nRow){return nRow + m_nRealrowspan; }; + virtual LwpCellBorderType GetCellBorderType(sal_uInt16 nRow, sal_uInt16 nCol, LwpTableLayout * pTableLayout); + sal_uInt16 cnumrows; + sal_uInt8 cnumcols; +// sal_Bool m_bSplitFlag; + sal_uInt16 m_nRealrowspan; + sal_uInt8 m_nRealcolspan; +}; +/** + * @brief + * VO_PCOLBLOCK object + */ + +class LwpParallelColumnsBlock : public LwpCellLayout +{ +public: + LwpParallelColumnsBlock(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpParallelColumnsBlock(); +protected: + void Read(); + +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpchangemgr.cxx b/lotuswordpro/source/filter/lwpchangemgr.cxx new file mode 100644 index 000000000000..a6364f82fed3 --- /dev/null +++ b/lotuswordpro/source/filter/lwpchangemgr.cxx @@ -0,0 +1,383 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jun 2005 Created + ************************************************************************/ +#include "lwpchangemgr.hxx" +#include <rtl/ustring.hxx> +#include "lwppara.hxx" +#include "lwpfribheader.hxx" +#include "lwpfribptr.hxx" +#include "lwpfrib.hxx" +#include "lwpstory.hxx" +#include "lwpfribsection.hxx" +#include "lwpsection.hxx" +#include "lwpfribbreaks.hxx" +#include "lwpfribframe.hxx" +#include "lwpfribtable.hxx" +#include "lwphyperlinkmgr.hxx" +#include "lwpfootnote.hxx" +#include "lwpnotes.hxx" +#include "lwpfribmark.hxx" +#include "xfilter/xftextspan.hxx" +#include "xfilter/xftextcontent.hxx" +#include "xfilter/xftabstop.hxx" +#include "xfilter/xflinebreak.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xfhyperlink.hxx" + +LwpChangeMgr::LwpChangeMgr() +{ + m_nCounter = 0; + m_DocFribMap.clear(); + m_HeadFootFribMap.clear(); + m_pFribMap = &m_DocFribMap; + m_ChangeList.clear(); +} +LwpChangeMgr::~LwpChangeMgr() +{ + m_pFribMap=NULL; + m_DocFribMap.clear(); + m_HeadFootFribMap.clear(); + m_ChangeList.clear(); +} + +void LwpChangeMgr::AddChangeFrib(LwpFrib* pFrib) +{ + m_nCounter++; + OUString sID = A2OUSTR("ct")+ Int32ToOUString(m_nCounter); + m_pFribMap->insert(std::pair<LwpFrib*,OUString>(pFrib,sID)); +} + +OUString LwpChangeMgr::GetChangeID(LwpFrib* pFrib) +{ + std::map<LwpFrib*,OUString>::iterator iter; + iter = m_pFribMap->find(pFrib); + if (iter == m_pFribMap->end()) + return A2OUSTR(""); + else + return iter->second; +} + +void LwpChangeMgr::ConvertAllChange(IXFStream* pStream) +{ + std::map<LwpFrib*,OUString>::iterator iter; + for (iter=m_DocFribMap.begin();iter !=m_DocFribMap.end();iter++) + { + if (iter->first->GetRevisionType() == LwpFrib::REV_INSERT) + { + XFChangeInsert* pInsert = new XFChangeInsert; + pInsert->SetChangeID(iter->second); + pInsert->SetEditor(iter->first->GetEditor()); + m_ChangeList.push_back(pInsert); + } + else if (iter->first->GetRevisionType() == LwpFrib::REV_DELETE) + { + XFChangeDelete* pDelete = new XFChangeDelete; + pDelete->SetChangeID(iter->second); + pDelete->SetEditor(iter->first->GetEditor()); +/// ConvertFribContent(pDelete,iter->first); //delete tmp,note by ,2005/7/1 + m_ChangeList.push_back(pDelete); + } + } + + std::vector<XFChangeRegion*>::iterator iter1; + pStream->GetAttrList()->Clear(); + if (m_ChangeList.size() == 0) + return; +//Add by ,for disable change tracking,2005/11/21 + pStream->GetAttrList()->AddAttribute( A2OUSTR("text:track-changes"),A2OUSTR("false")); +//Add end + pStream->StartElement( A2OUSTR("text:tracked-changes") ); + for (iter1=m_ChangeList.begin();iter1 !=m_ChangeList.end();iter1++) + (*iter1)->ToXml(pStream); + + pStream->EndElement(A2OUSTR("text:tracked-changes")); + +// m_DocFribMap.clear(); + + for (iter1=m_ChangeList.begin();iter1 !=m_ChangeList.end();iter1++) + { + delete *iter1; + *iter1=NULL; + } + m_ChangeList.clear(); +} +void LwpChangeMgr::SetHeadFootFribMap(sal_Bool bFlag) +{ + if (bFlag == sal_True) + m_pFribMap = &m_HeadFootFribMap; + else + { + m_HeadFootFribMap.clear(); + m_pFribMap = &m_DocFribMap; + } +} + +void LwpChangeMgr::SetHeadFootChange(XFContentContainer* pCont) +{ + std::map<LwpFrib*,OUString>::iterator iter; + XFChangeList* pChangeList = new XFChangeList; + + for (iter=m_HeadFootFribMap.begin();iter !=m_HeadFootFribMap.end();iter++) + { + if (iter->first->GetRevisionType() == LwpFrib::REV_INSERT) + { + XFChangeInsert* pInsert = new XFChangeInsert; + pInsert->SetChangeID(iter->second); + pInsert->SetEditor(iter->first->GetEditor()); + pChangeList->Add(pInsert); + } + else if (iter->first->GetRevisionType() == LwpFrib::REV_DELETE) + { + XFChangeDelete* pDelete = new XFChangeDelete; + pDelete->SetChangeID(iter->second); + pDelete->SetEditor(iter->first->GetEditor()); + pChangeList->Add(pDelete); + } + } + + pCont->Add(pChangeList); + +// m_HeadFootFribMap.clear(); +} + +void LwpChangeMgr::ConvertFribContent(XFContentContainer* pCont, LwpFrib* pFrib) +{ + XFParagraph* pXFPara = new XFParagraph; + LwpPara* pPara = pFrib->GetMyPara(); + if (pPara) + pXFPara->SetStyleName(pPara->GetStyleName()); + + switch(pFrib->GetType())//copy code from class lwpfribptr + { + case FRIB_TAG_TEXT: + { + LwpFribText* textFrib= static_cast<LwpFribText*>(pFrib); + textFrib->XFConvert(pXFPara,pPara->GetStory()); + } + break; + case FRIB_TAG_TAB: + { + LwpFribTab* tabFrib = static_cast<LwpFribTab*>(pFrib); + if (pFrib->m_ModFlag) + { + XFTextSpan *pSpan = new XFTextSpan(); + pSpan->SetStyleName(tabFrib->GetStyleName()); + XFTabStop *pTab = new XFTabStop(); + pSpan->Add(pTab); + pXFPara->Add(pSpan); + } + else + { + XFTabStop *pTab = new XFTabStop(); + pXFPara->Add(pTab); + } + } + break; +/* case FRIB_TAG_SECTION: + { + delete pXFPara; + LwpFribSection* pSectionFrib = static_cast<LwpFribSection*>(pFrib); + pSectionFrib->ParseSection(); + } + break; + case FRIB_TAG_PAGEBREAK: + { + LwpFribPageBreak* pPageBreak = static_cast<LwpFribPageBreak*>(pFrib); + LwpPageLayout* pLayout = static_cast<LwpPageLayout*>(pPageBreak->GetLayout()->obj()); + if(pLayout) + { + pPageBreak->ParseLayout(); + } + else + { + if (pPageBreak->IsLastFrib() == sal_True) + { + pXFPara->SetStyleName( pPageBreak->GetStyleName() ); + } + else + { + //parse pagebreak + XFParagraph *pNewPara = new XFParagraph(); + pNewPara->SetStyleName(pFrib->GetStyleName()); + pPara->AddXFContent(pNewPara); + } + } + } + break; + case FRIB_TAG_COLBREAK: + { + XFParagraph *pNewPara = new XFParagraph(); + pNewPara->SetStyleName(pFrib->GetStyleName()); + pPara->AddXFContent(pNewPara); + } + break; +*/ case FRIB_TAG_LINEBREAK: + { + XFLineBreak *pLineBreak = new XFLineBreak(); + pXFPara->Add(pLineBreak); + } + break; + case FRIB_TAG_UNICODE: //fall through + case FRIB_TAG_UNICODE2: //fall through + case FRIB_TAG_UNICODE3: //fall through + { + LwpFribUnicode* unicodeFrib= static_cast<LwpFribUnicode*>(pFrib); + unicodeFrib->XFConvert(pXFPara,pPara->GetStory()); + } + break; + case FRIB_TAG_HARDSPACE: + { + rtl::OUString sHardSpace(sal_Unicode(0x00a0)); + LwpHyperlinkMgr* pHyperlink = + pPara->GetStory()->GetHyperlinkMgr(); + if (pHyperlink->GetHyperlinkFlag()) + pFrib->ConvertHyperLink(pXFPara,pHyperlink,sHardSpace); + else + pFrib->ConvertChars(pXFPara,sHardSpace); + } + break; + case FRIB_TAG_SOFTHYPHEN: + { + rtl::OUString sSoftHyphen(sal_Unicode(0x00ad)); + pFrib->ConvertChars(pXFPara,sSoftHyphen); + } + break; +/* case FRIB_TAG_FRAME: + { + LwpFribFrame* frameFrib= static_cast<LwpFribFrame*>(pFrib); + LwpObject* pLayout = frameFrib->GetLayout(); + if (pLayout->GetTag() == VO_DROPCAPLAYOUT) + { + pPara->GetFoundry()->GetDropcapMgr()->SetXFPara(pXFPara); + //LwpObject* pDropCap = frameFrib->GetLayout(); + //pDropCap ->XFConvert(m_pXFPara); + } + //pLayout->XFConvert(m_pXFPara); + frameFrib->XFConvert(pXFPara); + } + break; +*/ case FRIB_TAG_CHBLOCK: + { + LwpFribCHBlock* chbFrib = static_cast<LwpFribCHBlock*>(pFrib); + chbFrib->XFConvert(pXFPara,pPara->GetStory()); + } + break; +/* case FRIB_TAG_TABLE: + { + LwpFribTable* tableFrib = static_cast<LwpFribTable*>(pFrib); + //tableFrib->XFConvert(m_pPara->GetXFContainer()); + tableFrib->XFConvert(pXFPara); + } + break; +*/ case FRIB_TAG_BOOKMARK: + { + LwpFribBookMark* bookmarkFrib = static_cast<LwpFribBookMark*>(pFrib); + bookmarkFrib->XFConvert(pXFPara); + } + break; + case FRIB_TAG_FOOTNOTE: + { + LwpFribFootnote* pFootnoteFrib = static_cast<LwpFribFootnote*>(pFrib); + pFootnoteFrib->XFConvert(pXFPara); + break; + } + case FRIB_TAG_FIELD: + { + LwpFribField* fieldFrib = static_cast<LwpFribField*>(pFrib); + fieldFrib->XFConvert(pXFPara); + break; + } + case FRIB_TAG_NOTE: + { + LwpFribNote* pNoteFrib = static_cast<LwpFribNote*>(pFrib); + pNoteFrib->XFConvert(pXFPara); + break; + } + case FRIB_TAG_PAGENUMBER: + { + LwpFribPageNumber* pagenumFrib = static_cast<LwpFribPageNumber*>(pFrib); + pagenumFrib->XFConvert(pXFPara); + break; + } + case FRIB_TAG_DOCVAR: + { + LwpFribDocVar* docFrib = static_cast<LwpFribDocVar*>(pFrib); + docFrib->XFConvert(pXFPara); + break; + } + case FRIB_TAG_RUBYMARKER: + { + LwpFribRubyMarker* rubyFrib = static_cast<LwpFribRubyMarker*>(pFrib); + rubyFrib->XFConvert(pXFPara); + break; + } + case FRIB_TAG_RUBYFRAME: + { + LwpFribRubyFrame* rubyfrmeFrib = static_cast<LwpFribRubyFrame*>(pFrib); + rubyfrmeFrib->XFConvert(pXFPara); + break; + } + default : + break; + } + pCont->Add(pXFPara); +} diff --git a/lotuswordpro/source/filter/lwpchangemgr.hxx b/lotuswordpro/source/filter/lwpchangemgr.hxx new file mode 100644 index 000000000000..37288b84cbe9 --- /dev/null +++ b/lotuswordpro/source/filter/lwpchangemgr.hxx @@ -0,0 +1,95 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jun 2005 Created + ************************************************************************/ +#ifndef _LWPCHANGEMGR_HXX_ +#define _LWPCHANGEMGR_HXX_ + +#include <map> +#include <vector> +#include "lwpfrib.hxx" +#include "lwpobjstrm.hxx" +#include "lwpbasetype.hxx" +#include "lwpoverride.hxx" +#include "lwpfoundry.hxx" +#include "xfilter/xfchange.hxx" +#include "xfilter/xfcontentcontainer.hxx" + +class LwpChangeMgr +{ +public: + void AddChangeFrib(LwpFrib* pFrib); + OUString GetChangeID(LwpFrib* pFrib); + void ConvertAllChange(IXFStream* pStream); + void SetHeadFootFribMap(sal_Bool bFlag); + void SetHeadFootChange(XFContentContainer* pCont); + ~LwpChangeMgr(); + LwpChangeMgr(); +private: + std::map<LwpFrib*,OUString>* m_pFribMap; + std::map<LwpFrib*,OUString> m_DocFribMap; + std::map<LwpFrib*,OUString> m_HeadFootFribMap; + std::vector<XFChangeRegion*> m_ChangeList; + sal_uInt32 m_nCounter; + void ConvertFribContent(XFContentContainer* pCont, LwpFrib* pFrib); +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwpcharacterstyle.cxx b/lotuswordpro/source/filter/lwpcharacterstyle.cxx new file mode 100644 index 000000000000..e8cbd50773f5 --- /dev/null +++ b/lotuswordpro/source/filter/lwpcharacterstyle.cxx @@ -0,0 +1,207 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpcharacterstyle.hxx" +#include "lwpfilehdr.hxx" +#include "lwptools.hxx" +#include "lwpoverride.hxx" +#include "lwpatomholder.hxx" +#include "lwpfont.hxx" +#include "lwpfoundry.hxx" +#include "lwpcharborderoverride.hxx" + +/*class LwpTextStyle*/ +LwpTextStyle::LwpTextStyle(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpDLNFPVList(objHdr, pStrm), + m_nFontID(0), m_nFinalFontID(0), m_nCSFlags(0), m_nUseCount(0), + m_pDescription(new LwpAtomHolder), m_pLangOverride(new LwpTextLanguageOverride), + m_pTxtAttrOverride(new LwpTextAttributeOverride), + m_pCharacterBorderOverride(new LwpCharacterBorderOverride), + m_pAmikakeOverride(new LwpAmikakeOverride), + m_nStyleDefinition(0), m_nKey(0) +{ +} + +void LwpTextStyle::Read() +{ + LwpDLNFPVList::Read(); + ReadCommon(); +} + +LwpTextStyle::~LwpTextStyle() +{ + if (m_pDescription) + { + delete m_pDescription; + } + if (m_pLangOverride) + { + delete m_pLangOverride; + } + if (m_pTxtAttrOverride) + { + delete m_pTxtAttrOverride; + } + if (m_pCharacterBorderOverride) + { + delete m_pCharacterBorderOverride; + } + if (m_pAmikakeOverride) + { + delete m_pAmikakeOverride; + } +} + +void LwpTextStyle::ReadCommon() +{ + m_pObjStrm->QuickRead(&m_nFontID, 4); + m_pObjStrm->QuickRead(&m_nFinalFontID, 4); + m_pObjStrm->QuickRead(&m_nCSFlags, 2); + m_pObjStrm->QuickRead(&m_nUseCount, 4); + + m_pDescription->Read(m_pObjStrm); + + m_pLangOverride->Read(m_pObjStrm); + m_pTxtAttrOverride->Read(m_pObjStrm); +//#ifdef AMIKAKE + if (LwpFileHeader::m_nFileRevision < 0x000B) + { + m_pCharacterBorderOverride->Read(m_pObjStrm); + m_pAmikakeOverride->Read(m_pObjStrm); + } + else + { + m_CharacterBorder.ReadIndexed(m_pObjStrm); + m_Amikake.ReadIndexed(m_pObjStrm); + } +//#endif + sal_uInt16 nCount = 6; + if (LwpFileHeader::m_nFileRevision > 0x0005) + { + m_pObjStrm->QuickRead(&nCount, 2); + } + + m_FaceStyle.ReadIndexed(m_pObjStrm); + + if (nCount > 1) + { + m_SizeStyle.ReadIndexed(m_pObjStrm); + m_AttributeStyle.ReadIndexed(m_pObjStrm); + m_FontStyle.ReadIndexed(m_pObjStrm); + m_CharacterBorderStyle.ReadIndexed(m_pObjStrm); + m_AmikakeStyle.ReadIndexed(m_pObjStrm); + } + + if (m_pObjStrm->CheckExtra()) + { + m_pObjStrm->QuickRead(&m_nStyleDefinition, 4); + + if (m_pObjStrm->CheckExtra()) + { + m_pObjStrm->QuickRead(&m_nKey, 2); + m_pObjStrm->SkipExtra(); + } + } + +} + +#include "xfilter/xfparastyle.hxx" +#include "xfilter/xffont.hxx" + +void LwpTextStyle::RegisterStyle() +{ + if (!m_pFoundry) + { + assert(false); + return; + } + + XFTextStyle* pStyle = new XFTextStyle(); + + //Set name + OUString styleName = GetName()->str(); + pStyle->SetStyleName(styleName); + + //Create font + LwpFontManager* pFontMgr = m_pFoundry->GetFontManger(); + XFFont* pFont = pFontMgr->CreateFont(m_nFinalFontID); + pStyle->SetFont(pFont); + + //Set other properties if needed + + //Add style + LwpStyleManager* pStyleMgr = m_pFoundry->GetStyleManager(); + pStyleMgr->AddStyle(*GetObjectID(), pStyle); + +} + +/*class LwpCharacterStyle*/ +LwpCharacterStyle::LwpCharacterStyle(LwpObjectHeader& objHdr, LwpSvStream* pStrm) : +LwpTextStyle(objHdr, pStrm) +{ +} + +void LwpCharacterStyle::Read() +{ + LwpTextStyle::Read(); +} diff --git a/lotuswordpro/source/filter/lwpcharacterstyle.hxx b/lotuswordpro/source/filter/lwpcharacterstyle.hxx new file mode 100644 index 000000000000..fb85ee5030c9 --- /dev/null +++ b/lotuswordpro/source/filter/lwpcharacterstyle.hxx @@ -0,0 +1,137 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ +#ifndef _LWPCHARACTERSTYLE_HXX +#define _LWPCHARACTERSTYLE_HXX + +#include "lwpobj.hxx" +#include "lwpdlvlist.hxx" + + +class LwpAtomHolder; +class LwpTextLanguageOverride; +class LwpTextAttributeOverride; +class LwpCharacterBorderOverride; +class LwpAmikakeOverride; + +class LwpTextStyle : public LwpDLNFPVList +{ +public: + LwpTextStyle(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + + virtual ~LwpTextStyle(); + + inline sal_uInt32 GetFinalFontID() const; + + virtual void RegisterStyle(); + +protected: + void ReadCommon(); + void Read(); + +protected: + + sal_uInt32 m_nFontID; + sal_uInt32 m_nFinalFontID; + sal_uInt16 m_nCSFlags; + sal_uInt32 m_nUseCount; + + LwpAtomHolder* m_pDescription; + LwpTextLanguageOverride* m_pLangOverride; + LwpTextAttributeOverride* m_pTxtAttrOverride; + + LwpCharacterBorderOverride* m_pCharacterBorderOverride; + LwpAmikakeOverride* m_pAmikakeOverride; + + LwpObjectID m_CharacterBorder; + LwpObjectID m_Amikake; + LwpObjectID m_FaceStyle; + + LwpObjectID m_SizeStyle; + LwpObjectID m_AttributeStyle; + LwpObjectID m_FontStyle; + LwpObjectID m_CharacterBorderStyle; + LwpObjectID m_AmikakeStyle; + + sal_uInt32 m_nStyleDefinition; +// sal_uInt16 m_nBasedOnCount; + sal_uInt16 m_nKey; + +}; + +inline sal_uInt32 LwpTextStyle::GetFinalFontID() const +{ + return m_nFinalFontID; +} + +class LwpCharacterStyle : public LwpTextStyle +{ +public: + LwpCharacterStyle(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + + void Read(); + +private: + +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpcharborderoverride.cxx b/lotuswordpro/source/filter/lwpcharborderoverride.cxx new file mode 100644 index 000000000000..149243329fcb --- /dev/null +++ b/lotuswordpro/source/filter/lwpcharborderoverride.cxx @@ -0,0 +1,148 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpcharborderoverride.hxx" +#include "lwpborderstuff.hxx" +#include "lwpmargins.hxx" + +LwpCharacterBorderOverride::LwpCharacterBorderOverride() : +m_pBorderStuff(new LwpBorderStuff), m_pMargins(new LwpMargins) +{ +} + +LwpCharacterBorderOverride::~LwpCharacterBorderOverride() +{ + if (m_pBorderStuff) + { + delete m_pBorderStuff; + } + if (m_pMargins) + { + delete m_pMargins; + } +} + +void LwpCharacterBorderOverride::Read(LwpObjectStream* pStrm) +{ + if (pStrm->QuickReadBool()) + { + ReadCommon(pStrm); + m_pBorderStuff->Read(pStrm); + m_pMargins->Read(pStrm); + pStrm->QuickRead(&m_nAboveWidth, 4); + pStrm->QuickRead(&m_nBelowWidth, 4); + } + + pStrm->SkipExtra(); +} + +void LwpCharacterBorderOverride::Override(LwpCharacterBorderOverride* pOther) +{ + if (m_nApply & PBO_STUFF) + { + if (this->IsBorderStuffOverridden()) + { + pOther->OverrideBorderStuff(m_pBorderStuff); + } + else + { + pOther->RevertBorderStuff(); + } + } + + if (m_nApply & PBO_MARGINS) + { + if (this->IsMarginsOverridden()) + { + pOther->OverrideMargins(m_pMargins); + } + else + { + pOther->RevertMargins(); + } + } + + if (m_nApply & PBO_ABOVE) + { + if (this->IsAboveWidthOverridden()) + { + pOther->OverrideAboveWidth(m_nAboveWidth); + } + else + { + pOther->RevertAboveWidth(); + } + } + + if (m_nApply & PBO_BELOW) + { + if (this->IsBelowWidthOverridden()) + { + pOther->OverrideBelowWidth(m_nBelowWidth); + } + else + { + pOther->RevertBelowWidth(); + } + } +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwpcharborderoverride.hxx b/lotuswordpro/source/filter/lwpcharborderoverride.hxx new file mode 100644 index 000000000000..a06fe9245f7a --- /dev/null +++ b/lotuswordpro/source/filter/lwpcharborderoverride.hxx @@ -0,0 +1,195 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPCHARBORDEROVERRIDE_HXX +#define _LWPCHARBORDEROVERRIDE_HXX + +#include "lwpoverride.hxx" + +class LwpBorderStuff; +class LwpMargins; +class LwpCharacterBorderOverride : public LwpOverride +{ +public: + LwpCharacterBorderOverride(); + + virtual ~LwpCharacterBorderOverride(); + + void Read(LwpObjectStream* pStrm); + + void Override(LwpCharacterBorderOverride* pOther); + + inline LwpBorderStuff* GetBorderStuff(); + inline LwpMargins* GetMargins(); + inline sal_Int32 GetAboveWidth() const; + inline sal_Int32 GetBelowWidth() const; + + inline sal_Bool IsBorderStuffOverridden(); + inline sal_Bool IsMarginsOverridden(); + inline sal_Bool IsAboveWidthOverridden(); + inline sal_Bool IsBelowWidthOverridden(); + + inline void OverrideBorderStuff(LwpBorderStuff* pOther); + inline void OverrideMargins(LwpMargins* pOther); + inline void OverrideAboveWidth(sal_Int32 nNewWidth); + inline void OverrideBelowWidth(sal_uInt32 nNewWidth); + + inline void RevertBorderStuff(); + inline void RevertMargins(); + inline void RevertAboveWidth(); + inline void RevertBelowWidth(); + +private: + LwpBorderStuff* m_pBorderStuff; + LwpMargins* m_pMargins; + sal_Int32 m_nAboveWidth; + sal_Int32 m_nBelowWidth; + + enum + { + PBO_STUFF = 0x01, + PBO_MARGINS = 0x04, + PBO_ABOVE = 0x40, + PBO_BELOW = 0x80 + }; +}; + +inline LwpMargins* LwpCharacterBorderOverride::GetMargins() +{ + return m_pMargins; +} + +inline LwpBorderStuff* LwpCharacterBorderOverride::GetBorderStuff() +{ + return m_pBorderStuff; +} + +inline sal_Int32 LwpCharacterBorderOverride::GetAboveWidth() const +{ + return m_nAboveWidth; +} + +inline sal_Int32 LwpCharacterBorderOverride::GetBelowWidth() const +{ + return m_nBelowWidth; +} + +inline sal_Bool LwpCharacterBorderOverride::IsBorderStuffOverridden() +{ + return (sal_Bool)((m_nOverride & PBO_STUFF) != 0); +} + +inline sal_Bool LwpCharacterBorderOverride::IsMarginsOverridden() +{ + return (sal_Bool)((m_nOverride & PBO_MARGINS) != 0); +} + +inline sal_Bool LwpCharacterBorderOverride::IsAboveWidthOverridden() +{ + return (sal_Bool)((m_nOverride & PBO_ABOVE) != 0); +} + +inline sal_Bool LwpCharacterBorderOverride::IsBelowWidthOverridden() +{ + return (sal_Bool)((m_nOverride & PBO_BELOW) != 0); +} + +inline void LwpCharacterBorderOverride::OverrideBorderStuff(LwpBorderStuff* pOther) +{ + m_pBorderStuff = pOther; + LwpOverride::Override(PBO_STUFF, STATE_ON); +} +inline void LwpCharacterBorderOverride::OverrideMargins(LwpMargins* pOther) +{ + m_pMargins = pOther; + LwpOverride::Override(PBO_MARGINS, STATE_ON); +} +inline void LwpCharacterBorderOverride::OverrideAboveWidth(sal_Int32 nNewWidth) +{ + m_nAboveWidth = nNewWidth; + LwpOverride::Override(PBO_ABOVE, STATE_ON); +} +inline void LwpCharacterBorderOverride::OverrideBelowWidth(sal_uInt32 nNewWidth) +{ + m_nBelowWidth = nNewWidth; + LwpOverride::Override(PBO_BELOW, STATE_ON); +} + +inline void LwpCharacterBorderOverride::RevertBorderStuff() +{ + LwpOverride::Override(PBO_STUFF, STATE_STYLE); +} +inline void LwpCharacterBorderOverride::RevertMargins() +{ + LwpOverride::Override(PBO_MARGINS, STATE_STYLE); +} +inline void LwpCharacterBorderOverride::RevertAboveWidth() +{ + LwpOverride::Override(PBO_ABOVE, STATE_STYLE); +} +inline void LwpCharacterBorderOverride::RevertBelowWidth() +{ + LwpOverride::Override(PBO_BELOW, STATE_STYLE); +} + +#endif diff --git a/lotuswordpro/source/filter/lwpcharsetmgr.cxx b/lotuswordpro/source/filter/lwpcharsetmgr.cxx new file mode 100644 index 000000000000..e6cf2e84dd0a --- /dev/null +++ b/lotuswordpro/source/filter/lwpcharsetmgr.cxx @@ -0,0 +1,119 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ +#include "lwpcharsetmgr.hxx" +//Added by yanjun for SS migration : 2007-12-21 +#include "rtl/textenc.h" +//End +LwpCharSetMgr* LwpCharSetMgr::Instance = NULL; + +LwpCharSetMgr* LwpCharSetMgr::GetInstance() +{ + if (Instance == NULL) + Instance = new LwpCharSetMgr; + return Instance; +} + +void LwpCharSetMgr::SetCodePageMap() +{//sal_uInt16 wordproCode,rtl_TextEncoding encoding, tmp hardcoding, 1-18 +/* m_CodePageMap[256] = + m_CodePageMap[259] = + m_CodePageMap[819] = + m_CodePageMap[921] =*/ + m_CodePageMap[437] = RTL_TEXTENCODING_ASCII_US; + m_CodePageMap[850] = RTL_TEXTENCODING_IBM_850; + //m_CodePageMap[851] = RTL_TEXTENCODING_IBM_851; + m_CodePageMap[852] = RTL_TEXTENCODING_IBM_852; + m_CodePageMap[857] = RTL_TEXTENCODING_IBM_857; + m_CodePageMap[860] = RTL_TEXTENCODING_IBM_860; + m_CodePageMap[863] = RTL_TEXTENCODING_IBM_863; + m_CodePageMap[865] = RTL_TEXTENCODING_IBM_865; + m_CodePageMap[866] = RTL_TEXTENCODING_IBM_866; + m_CodePageMap[869] = RTL_TEXTENCODING_IBM_869; + m_CodePageMap[874] = RTL_TEXTENCODING_MS_874;//thai + m_CodePageMap[932] = RTL_TEXTENCODING_MS_932; //japanese + m_CodePageMap[936] = RTL_TEXTENCODING_MS_936; //chinese simple + m_CodePageMap[949] = RTL_TEXTENCODING_MS_949;//korean + m_CodePageMap[950] = RTL_TEXTENCODING_BIG5;//chinese traditional + m_CodePageMap[1250] = RTL_TEXTENCODING_MS_1250;//Central European + m_CodePageMap[1252] = RTL_TEXTENCODING_MS_1252; + m_CodePageMap[1251] = RTL_TEXTENCODING_MS_1251; //ukrainian belarusian macedonian russian + m_CodePageMap[1253] = RTL_TEXTENCODING_MS_1253;//greek + m_CodePageMap[1254] = RTL_TEXTENCODING_MS_1254;//Turkish + m_CodePageMap[1255] = RTL_TEXTENCODING_MS_1255;//hebrew + m_CodePageMap[1256] = RTL_TEXTENCODING_MS_1256;//arabic + m_CodePageMap[1257] = RTL_TEXTENCODING_MS_1257;//estonian +} + +rtl_TextEncoding LwpCharSetMgr::GetTextCharEncoding(sal_uInt16 wordproCode) +{ + std::map<sal_uInt16,rtl_TextEncoding>::iterator + pos = m_CodePageMap.find(wordproCode); + if (pos != m_CodePageMap.end()) + return m_CodePageMap[wordproCode]; + return GetTextCharEncoding(); +} + +rtl_TextEncoding LwpCharSetMgr::GetTextCharEncoding() +{ + return RTL_TEXTENCODING_MS_1252;//here should be a default value,1252 or get from platform, 1-18 +} diff --git a/lotuswordpro/source/filter/lwpcharsetmgr.hxx b/lotuswordpro/source/filter/lwpcharsetmgr.hxx new file mode 100644 index 000000000000..1db3848da947 --- /dev/null +++ b/lotuswordpro/source/filter/lwpcharsetmgr.hxx @@ -0,0 +1,86 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ +#ifndef _LWPCHARSETMGR_HXX +#define _LWPCHARSETMGR_HXX + +#include "lwpfilehdr.hxx" +#include <map> +//#include <pair> + +class LwpCharSetMgr +{ +public: + LwpCharSetMgr(){SetCodePageMap();}; + ~LwpCharSetMgr(){}; + static LwpCharSetMgr* GetInstance(); + void SetCodePageMap(); + rtl_TextEncoding GetTextCharEncoding(sal_uInt16 wordproCode); + rtl_TextEncoding GetTextCharEncoding(); +private: + std::map<sal_uInt16,rtl_TextEncoding> m_CodePageMap; + static LwpCharSetMgr* Instance; +}; + + + +#endif diff --git a/lotuswordpro/source/filter/lwpchartstreamtools.cxx b/lotuswordpro/source/filter/lwpchartstreamtools.cxx new file mode 100644 index 000000000000..f4e6a1d49487 --- /dev/null +++ b/lotuswordpro/source/filter/lwpchartstreamtools.cxx @@ -0,0 +1,359 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/***************************************************************************** +* Change History +* <<Date>> <<Name of editor>> <<Description>> +2005/2 draft code for implementation of chart stream helpers +****************************************************************************/ + +/** + * @file + * For LWP filter architecture prototype +*/ + +#include "lwpchartstreamtools.hxx" +#include "xfilter/xfdrawchart.hxx" +#include "xfilter/xfparagraph.hxx" + +#include <com/sun/star/xml/sax/SAXParseException.hpp> + +/** +* @short Get the chart stream from bento layer +* @descr +* @param pDocStream the document stream +* @param pChartName The name of the requested chart stream +* @return pStream The chart stream, may be NULL +*/ +SvStream* LwpChartStreamTools::GetChartStream(LwpSvStream* pDocStream, const char* pChartName) +{ + // if small file, use the compressed stream for BENTO + LwpSvStream *pSvStream = pDocStream->GetCompressedStream() ? pDocStream->GetCompressedStream(): pDocStream; + + SvStream* pStream = NULL; + pSvStream->Seek(0); + OpenStormBento::LtcBenContainer* pContainer = NULL;; + ULONG nRet = OpenStormBento::BenOpenContainer(pSvStream,&pContainer); + if ( 0==nRet ) + { + pStream = pContainer->FindValueStreamWithPropertyName(pChartName); + } + return pStream; +} + +/** +* @short Output the chart into output stream +* @param aChartRect the rectangle of the chart +* @param pXChartStrm Chart stream +* @param pOutputStream the output stream +*/ +void LwpChartStreamTools::OutputChart(XFRect aChartRect, IXFContent* pXChartStrm, IXFStream* pOutputStream) +{ + XFDrawChart* pXChart = new XFDrawChart; + pXChart->SetPosition(aChartRect); + pXChart->Add(pXChartStrm); + + //write to xml + XFParagraph xpara; + xpara.Add(pXChart); + xpara.ToXml(pOutputStream); +} + +void LwpChartStreamTools::OutputChart(XFRect aChartRect, IXFContent* pXChartStrm, XFContentContainer* pCont, OUString strStyleName) +{ + XFDrawChart* pXChart = new XFDrawChart; + pXChart->SetStyleName( strStyleName); + pXChart->SetPosition(aChartRect); + pXChart->SetAnchorType(enumXFAnchorFrame); + pXChart->Add(pXChartStrm); + + pCont->Add(pXChart); + + //write to xml + /*XFParagraph* pPara = new XFParagraph(); + pPara->Add(pXChart); + pCont->Add(pPara); + */ +} + +/** +* @short Get the stream length +* @param pStream the stream +* @param the stream length +*/ +INT32 LwpChartStreamTools::GetStreamLen(SvStream* pStream) +{ + UINT32 nPos = pStream->Tell(); + pStream->Seek(STREAM_SEEK_TO_END); + INT32 nStrmLen = pStream->Tell(); + pStream->Seek(nPos); + return nStrmLen; +} + +/** +* @short Make the chart storage object +* @param pStream the chart stream +* @param aChartRect the rectangle of the chart +* @param xIPObj [out]the inplace object +* @param xStorage [out]the storage object of the chart +*/ +#include "lwpchartwrapper.hxx" +void LwpChartStreamTools::MakeChartStorage( SvStream* pStream, Rectangle aChartRect, SvInPlaceObjectRef& xIPObj, SvStorageRef& xStorage) +{ + // SfxItemSet aItemSet( rDoc.GetAttrPool()); //Style of chart area + INT32 nStrmLen = GetStreamLen(pStream); + LtcLwpChartWrapper aChart(pStream,nStrmLen); + aChart.CreateChart(aChartRect,xIPObj,xStorage); + aChart.Read(); +} + +/** +* @short Translate the storage to XML stream +* @param xStorage [out]the storage object of a chart +* @param xIPObj [in]the inplace object +*/ +#include "schxmlwrapper.hxx" +void LwpChartStreamTools::ChartToXML(SvStorageRef xStorage, SvInPlaceObjectRef xIPObj) +{ + xStorage->SetVersion( SOFFICE_FILEFORMAT_60 ); + + SfxInPlaceObjectRef aSfxObj( xIPObj ); + SfxObjectShell* pSh = aSfxObj->GetObjectShell(); + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > xModel = pSh->GetModel(); + + SchXMLWrapper aFilter( xModel, *xStorage, sal_False ); + + // update user info before writing + pSh->UpdateDocInfoForSave(); + + aFilter.Export(); +} + +//void LwpChartStreamTools::ChartToXML(SvStorageRef xStorage, SvInPlaceObjectRef xIPObj) +//{ +// xStorage->SetVersion( SOFFICE_FILEFORMAT_60 ); +// +// SfxInPlaceObjectRef aSfxObj( xIPObj ); +// SfxObjectShell* pSh = aSfxObj->GetObjectShell(); +// pSh->Save(); +//} + +/** +* @short Get the xml stream from the storage +* @param xStorage the storage object +* @param aStrmName the stream name +*/ +SvStorageStreamRef LwpChartStreamTools::GetStream(SvStorageRef xStorage, String aStrmName) +{ + SvStorageStreamRef rStream; + if( ! xStorage->IsStream( aStrmName) ) + { + assert(false); + } + else + { + rStream = xStorage->OpenStream( aStrmName, STREAM_READ | STREAM_NOCREATE ); + } + return rStream; +} + +/** +* @short Dump the xml stream into a file +*/ +void LwpChartStreamTools::DumpStream(SvStorageStreamRef rStream, char* aName) +{ + INT32 nLen = GetStreamLen(&rStream); + char* pBuf = new char[nLen]; + rStream->Read(pBuf, nLen); + std::ofstream aFile(aName, ios_base::out); + aFile.write(pBuf,nLen); + rStream->Seek(0); +} + +/** +* @short Get the name of chart stream +* @param pID the id of the VO_Graphic object, which map to a chart stream. +* @return the name of the chart stream +*/ +const char* LwpChartStreamTools::GetChartName(LwpObjectID* pID) +{ +#define MAX_STREAMORSTORAGENAME 32 //The value is got from wordpro source + static char pChartName[MAX_STREAMORSTORAGENAME]; + + char aGrStrmPrefix[] = "Gr"; + char aDataStrmSuffix[] = "-D"; + + sprintf( (char*)pChartName,"%s%lX,%lX%s", aGrStrmPrefix,pID->GetHigh(), + pID->GetLow(),aDataStrmSuffix); + + return pChartName; +} + +/** +* @short Parse the chart stream in Bento layer. +* @descr +* @param pOutputStream the pointer to IXFStream, which output the xml content. +* @return +* @todo any error code return are needed? +*/ +void LwpChartStreamTools::ParseChart( LwpSvStream* pDocStream, + LwpObjectID* pID, + Rectangle aRectIn100thMM, + XFRect aRectInCM, + IXFStream* pOutputStream) +{ + XFChartStream* pXFChartStrm = new XFChartStream; + + try + { + //GetChartName + const char* pChartName = GetChartName(pID); + + //Get chart stream + SvStream* pStream = GetChartStream( pDocStream, pChartName ); + if (!pStream) + { + assert(false); + return; + } + + SvInPlaceObjectRef xIPObj; + SvStorageRef xStorage; + + MakeChartStorage( pStream, aRectIn100thMM, xIPObj, xStorage); + ChartToXML(xStorage, xIPObj); +// SvStorageStreamRef rStyleStream = GetStream(xStorage,String::CreateFromAscii( "styles.xml" )); + SvStorageStreamRef rCntStream = GetStream(xStorage,String::CreateFromAscii( "content.xml" )); +// DumpStream(rCntStream,"d:\\allinone.xml"); + if (rCntStream.Is()) + { + pXFChartStrm->SetChartStream(rCntStream); + } + + OutputChart( aRectInCM, pXFChartStrm, pOutputStream); + + delete pStream; + } + catch (com::sun::star::xml::sax::SAXParseException&) { + assert(false); + } + catch( com::sun::star::xml::sax::SAXException& ) + { + assert(false); + } + catch( com::sun::star::io::IOException&) + { + assert(false); + } + catch( com::sun::star::uno::Exception&) + { + assert(false); + } +} + +void LwpChartStreamTools::ParseChart( LwpSvStream* pDocStream, + LwpObjectID* pID, + Rectangle aRectIn100thMM, + XFRect aRectInCM, + XFContentContainer* pCont, + OUString strStyleName) +{ + XFChartStream* pXFChartStrm = new XFChartStream; + + try + { + //GetChartName + const char* pChartName = GetChartName(pID); + + //Get chart stream + SvStream* pStream = GetChartStream( pDocStream, pChartName ); + if (!pStream) + { + assert(false); + return; + } + + SvInPlaceObjectRef xIPObj; + SvStorageRef xStorage; + + MakeChartStorage( pStream, aRectIn100thMM, xIPObj, xStorage); + ChartToXML(xStorage, xIPObj); +// SvStorageStreamRef rStyleStream = GetStream(xStorage,String::CreateFromAscii( "styles.xml" )); + SvStorageStreamRef rCntStream = GetStream(xStorage,String::CreateFromAscii( "content.xml" )); +// DumpStream(rCntStream,"d:\\allinone.xml"); + if (rCntStream.Is()) + { + pXFChartStrm->SetChartStream(rCntStream); + } + + OutputChart( aRectInCM, pXFChartStrm, pCont, strStyleName); + + delete pStream; + } + catch (com::sun::star::xml::sax::SAXParseException& ) { + assert(false); + } + catch( com::sun::star::xml::sax::SAXException& ) + { + assert(false); + } + catch( com::sun::star::io::IOException&) + { + assert(false); + } + catch( com::sun::star::uno::Exception&) + { + assert(false); + } +} diff --git a/lotuswordpro/source/filter/lwpchartstreamtools.hxx b/lotuswordpro/source/filter/lwpchartstreamtools.hxx new file mode 100644 index 000000000000..2f0c39bbbf24 --- /dev/null +++ b/lotuswordpro/source/filter/lwpchartstreamtools.hxx @@ -0,0 +1,149 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/***************************************************************************** +* Change History +* <<Date>> <<Name of editor>> <<Description>> +2005/2 draft code for chart stream helpers +****************************************************************************/ + +/** + * @file + * For LWP filter architecture prototype +*/ + +#ifndef LWPCHARTSTREAMTOOLS_HXX_ +#define LWPCHARTSTREAMTOOLS_HXX_ + +#include <tools/stream.hxx> +#include "bento.hxx" +#include <tools/gen.hxx> +#include <so3/ipobj.hxx> + +#include "lwpobjid.hxx" +#include "lwpobjfactory.hxx" + +//For sax parser +#ifndef _COM_SUN_STAR_XML_SAX_INPUTSOURCE_HPP_ +#include <com/sun/star/xml/sax/InputSource.hpp> +#endif + +#ifndef _COM_SUN_STAR_XML_SAX_XDTDHANDLER_HPP_ +#include <com/sun/star/xml/sax/XDTDHandler.hpp> +#endif + +#ifndef _COM_SUN_STAR_XML_SAX_XPARSER_HPP_ +#include <com/sun/star/xml/sax/XParser.hpp> +#endif + +#ifndef _COMPHELPER_PROCESSFACTORY_HXX_ +#include <comphelper/processfactory.hxx> +#endif + +//using namespace ::com::sun::star; +using namespace ::rtl; +using namespace comphelper; + +#include "xfilter/xfchartxmlhandler.hxx" +#include "xfilter/xfrect.hxx" +class IXFContent; + +/** +* @brief +* tools class for chart stream process +*/ + +class LwpChartStreamTools +{ +public: + static SvStream* GetChartStream(LwpSvStream* pDocStream, const char* pChartName); + + static void OutputChart(XFRect aChartRect, IXFContent* pXChartStrm, IXFStream* pOutputStream); + + //Added by for XFConvert refactor, 03/31/2005 + static void OutputChart(XFRect aChartRect, IXFContent* pXChartStrm, XFContentContainer* pCont, OUString strStyleName); + //End of Add + + static INT32 GetStreamLen(SvStream* pStream); + + static void MakeChartStorage( SvStream* pStream, + Rectangle aChartRect, + SvInPlaceObjectRef& xIPObj, + SvStorageRef& xStorage); + + static void ChartToXML(SvStorageRef xStorage, SvInPlaceObjectRef xIPObj); + + static SvStorageStreamRef GetStream(SvStorageRef xStorage, String aStrmName); + + static void DumpStream(SvStorageStreamRef rStream, char* aName); + + static const char* GetChartName(LwpObjectID* pID); + +public: + static void ParseChart( LwpSvStream* pDocStream, + LwpObjectID* pID, + Rectangle aRectIn100thMM, + XFRect aRectInCM, + IXFStream* pOutputStream); + //Added by for XFConvert refactor, 03/31/2005 + static void ParseChart( LwpSvStream* pDocStream, + LwpObjectID* pID, + Rectangle aRectIn100thMM, + XFRect aRectInCM, + XFContentContainer* pCont, + OUString strStyleName); + //End of Add +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpchartwrapper.cxx b/lotuswordpro/source/filter/lwpchartwrapper.cxx new file mode 100644 index 000000000000..688ff29e1ce5 --- /dev/null +++ b/lotuswordpro/source/filter/lwpchartwrapper.cxx @@ -0,0 +1,93 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#include "lwpchartwrapper.hxx" +#include <sschart/charttools.hxx> +using namespace NAME_CHART; + +LtcLwpChartWrapper::LtcLwpChartWrapper(SvStream* pStream,UINT32 nStrmLen) +{ + m_pImpChart.reset(new LtcImpChart(pStream,nStrmLen) ); + + m_spDatahandler.reset(new ltcDataWindowHandler()); + m_pImpChart->SetData(m_spDatahandler); +} + +sal_Bool LtcLwpChartWrapper::Read() +{ + sal_Bool bRet = sal_False; + m_pImpChart->SetStrmOffset(0); + chtFltError eRet = m_pImpChart->Read(); + if (eChtERR_OK==eRet) + { + bRet = sal_True; + } + return bRet; +} + +void LtcLwpChartWrapper::CreateChart(Rectangle aChartRect,SvInPlaceObjectRef& xIPObj,SvStorageRef& xStorage) +{ + m_pImpChart->CreateChartObj(aChartRect, xIPObj, xStorage); +} + +////////////////////////////////////////////////////////////////////////// +void LtcLwpChartDataHandler::ApplyAreaStyle() +{ + CHART_TYPE eChartType = GetChartType(); + if ( eChartType==RADAR || eChartType==RADAR_AREA ) + { + LtcChartTools::ApplyRadarDefaultArea(this,m_xChartDoc); + } +} diff --git a/lotuswordpro/source/filter/lwpchartwrapper.hxx b/lotuswordpro/source/filter/lwpchartwrapper.hxx new file mode 100644 index 000000000000..d15a3ae67712 --- /dev/null +++ b/lotuswordpro/source/filter/lwpchartwrapper.hxx @@ -0,0 +1,79 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef LWPCHARTWRAPPER_HXX_ +#define LWPCHARTWRAPPER_HXX_ + +#include <sschart/ltcimpchart.hxx> +#include <boost/shared_ptr.hpp> + +class LtcLwpChartWrapper +{ +public: + LtcLwpChartWrapper(SvStream* pStream,UINT32 nStrmLen); + sal_Bool Read(); + void CreateChart(Rectangle aChartRect,SvInPlaceObjectRef& xIPObj,SvStorageRef& xStorage); + +private: + auto_ptr<NAME_CHART::LtcImpChart> m_pImpChart; + boost::shared_ptr<NAME_CHART::ltcDataWindowHandler> m_spDatahandler; +}; + +class LtcLwpChartDataHandler: public NAME_CHART::ltcDataWindowHandler +{ +public: + void ApplyAreaStyle(); +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpcolor.cxx b/lotuswordpro/source/filter/lwpcolor.cxx new file mode 100644 index 000000000000..9e68fc1b818c --- /dev/null +++ b/lotuswordpro/source/filter/lwpcolor.cxx @@ -0,0 +1,149 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpcolor.hxx" +/** + * @descr read color and then resolve the RGB values +*/ +void LwpColor::Read(LwpObjectStream *pStrm) +{ + pStrm->QuickRead(&m_nRed, sizeof(m_nRed)); + pStrm->QuickRead(&m_nGreen, sizeof(m_nGreen)); + pStrm->QuickRead(&m_nBlue, sizeof(m_nBlue)); + pStrm->QuickRead(&m_nExtra, sizeof(m_nExtra)); + ResolveRGB(); +} + +/** + * @descr return the BGR format +*/ +sal_uInt32 LwpColor::To24Color() +{ + return ((m_nRed >> 8) | + (m_nGreen & 0xFF00) | + (static_cast<sal_uInt32>((m_nBlue & 0xFF00) << 8))); +} +/** + * @descr resolver RGB values per the extra bytes +*/ +void LwpColor::ResolveRGB() +{ + switch(m_nExtra) + { + case AGLRGB_RGB: + break; + case AGLRGB_RED: + m_nRed = 0xFFFF; + m_nGreen = 0x0000; + m_nBlue = 0x0000; + break; + case AGLRGB_GREEN: + m_nRed = 0x0000; + m_nGreen = 0xFFFF; + m_nBlue = 0x0000; + break; + case AGLRGB_BLUE: + m_nRed = 0x0000; + m_nGreen = 0x0000; + m_nBlue = 0xFFFF; + break; + case AGLRGB_BLACK: + m_nRed = 0x0000; + m_nGreen = 0x0000; + m_nBlue = 0x0000; + break; + case AGLRGB_WHITE: + m_nRed = 0xFFFF; + m_nGreen = 0xFFFF; + m_nBlue = 0xFFFF; + break; + case AGLRGB_GRAY: + m_nRed = 0x8080; + m_nGreen = 0x8080; + m_nBlue = 0x8080; + break; + case AGLRGB_LTGRAY: + m_nRed = 0xC0C0; + m_nGreen = 0xC0C0; + m_nBlue = 0xC0C0; + break; + case AGLRGB_DKGRAY: + m_nRed = 0x4040; + m_nGreen = 0x4040; + m_nBlue = 0x4040; + break; + case AGLRGB_INVALID: + case AGLRGB_TRANSPARENT: + default: + m_nRed = 0; + m_nGreen = 0; + m_nBlue = 0; + } +} +void LwpColor::operator = (const LwpColor& rOther) +{ + m_nRed = rOther.m_nRed; + m_nGreen = rOther.m_nGreen; + m_nBlue = rOther.m_nBlue; + m_nExtra = rOther.m_nExtra; +} diff --git a/lotuswordpro/source/filter/lwpcolor.hxx b/lotuswordpro/source/filter/lwpcolor.hxx new file mode 100644 index 000000000000..df6177e56566 --- /dev/null +++ b/lotuswordpro/source/filter/lwpcolor.hxx @@ -0,0 +1,130 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPCOLOR_HXX +#define _LWPCOLOR_HXX + +#include "lwpobjstrm.hxx" +#include "lwpheader.hxx" +/** + * @brief lwpcolor class + * (red, green, blue, extra) +*/ +class LwpColor +{ +public: + LwpColor():m_nRed(0), m_nGreen(0), m_nBlue(0), m_nExtra(0){}; + ~LwpColor(){}; +public: + void Read(LwpObjectStream *pStrm); + sal_uInt16 GetRed(); + sal_uInt16 GetGreen(); + sal_uInt16 GetBlue(); + BOOL IsValidColor(); + sal_uInt32 To24Color(); + //add by , 01/26/2005 + void operator = (const LwpColor& rOther); + //end + sal_Bool IsTransparent(); +private: + sal_uInt16 m_nRed; // When extra is AGLRGB_INDEX, m_nRed holds the + sal_uInt16 m_nGreen; // hi 16 bits and m_nGreen holds the lo 16 bits of + sal_uInt16 m_nBlue; // the 32-bit LUT index. + sal_uInt16 m_nExtra; + enum ColorOverride { + AGLRGB_RGB = 0, + AGLRGB_BLACK = 1, + AGLRGB_WHITE = 2, + AGLRGB_GRAY = 3, + AGLRGB_LTGRAY = 4, + AGLRGB_DKGRAY = 5, + AGLRGB_RED = 6, + AGLRGB_GREEN = 7, + AGLRGB_BLUE = 8, + AGLRGB_INDEX = 98, + AGLRGB_INVALID = 99, + AGLRGB_TRANSPARENT = 100 + }; + void ResolveRGB(); +}; +inline sal_uInt16 LwpColor::GetRed() +{ + return m_nRed; +} +inline sal_uInt16 LwpColor::GetGreen() +{ + return m_nGreen; +} +inline sal_uInt16 LwpColor::GetBlue() +{ + return m_nBlue; +} +inline BOOL LwpColor::IsValidColor() +{ + return ((m_nExtra!=AGLRGB_INVALID) && (m_nExtra!=AGLRGB_TRANSPARENT)); +} +inline sal_Bool LwpColor::IsTransparent() +{ + return (m_nExtra==AGLRGB_TRANSPARENT); +} +#endif diff --git a/lotuswordpro/source/filter/lwpcontent.cxx b/lotuswordpro/source/filter/lwpcontent.cxx new file mode 100644 index 000000000000..2ddfada3dfa8 --- /dev/null +++ b/lotuswordpro/source/filter/lwpcontent.cxx @@ -0,0 +1,153 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpstory.hxx" +#include "lwpfilehdr.hxx" +#include "lwpholder.hxx" + +LwpHeadContent::LwpHeadContent(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpContent(objHdr, pStrm) +{} + + +void LwpHeadContent::Read() +{ + LwpContent::Read(); + m_pObjStrm->SkipExtra(); +} + +LwpContent::LwpContent(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpDLNFVList(objHdr, pStrm) +{} +void LwpContent::Read() +{ + LwpDLNFVList::Read(); + + LwpObjectStream* pStrm = m_pObjStrm; + + m_LayoutsWithMe.Read(pStrm); + //sal_uInt16 nFlagsSkip; + //pStrm->QuickRead(&nFlagsSkip, sizeof(nFlagsSkip)); + pStrm->QuickRead(&m_nFlags, sizeof(m_nFlags)); + m_nFlags &= ~(CF_CHANGED | CF_DISABLEVALUECHECKING); + //LwpAtomHolder ClassName; + //ClassName.Read(pStrm); + m_ClassName.Read(pStrm); + + LwpObjectID SkipID; + if(LwpFileHeader::m_nFileRevision >= 0x0006) + { + //SkipID.ReadIndexed(pStrm); + //SkipID.ReadIndexed(pStrm); + m_NextEnumerated.ReadIndexed(pStrm); + m_PreviousEnumerated.ReadIndexed(pStrm); + } + + if (LwpFileHeader::m_nFileRevision >= 0x0007) + { + if(LwpFileHeader::m_nFileRevision < 0x000B) + { + SkipID.ReadIndexed(pStrm); + pStrm->SkipExtra(); + } + else + { + sal_uInt8 HasNotify; + pStrm->QuickRead(&HasNotify, sizeof(HasNotify)); + if(HasNotify) + { + SkipID.ReadIndexed(pStrm); + pStrm->SkipExtra(); + } + } + } + + pStrm->SkipExtra(); +} + +LwpVirtualLayout* LwpContent::GetLayout(LwpVirtualLayout* pStartLayout) +{ + return m_LayoutsWithMe.GetLayout(pStartLayout); +} + +sal_Bool LwpContent::HasNonEmbeddedLayouts() +{ + LwpVirtualLayout* pLayout = NULL; + while(pLayout = GetLayout(pLayout)) + { + if(!pLayout->NoContentReference()) + return sal_True; + } + return sal_False; +} + +sal_Bool LwpContent::IsStyleContent() +{ + LwpVirtualLayout* pLayout = NULL; + while(pLayout = GetLayout(pLayout)) + { + if(pLayout->IsStyleLayout()) + return sal_True; + } + return sal_False; +} diff --git a/lotuswordpro/source/filter/lwpcontent.hxx b/lotuswordpro/source/filter/lwpcontent.hxx new file mode 100644 index 000000000000..a1d07c70210f --- /dev/null +++ b/lotuswordpro/source/filter/lwpcontent.hxx @@ -0,0 +1,158 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * LwpContent, LwpHeadContent: base class for Word Pro content object + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPCONTENT_HXX +#define _LWPCONTENT_HXX + +#include "lwpheader.hxx" +#include "lwpobj.hxx" +#include "lwpatomholder.hxx" +#include "lwplayout.hxx" +#include "lwphyperlinkmgr.hxx" +/** + * @brief + * Base class of all Lwp content objects + */ +class LwpContent : public LwpDLNFVList +{ +public: + LwpContent(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpContent(){}; +protected: + LwpAssociatedLayouts m_LayoutsWithMe; + sal_uInt16 m_nFlags; + LwpAtomHolder m_ClassName; + LwpObjectID m_NextEnumerated; + LwpObjectID m_PreviousEnumerated; + /* Flag bits */ + enum + { + CF_CHANGED = 0x0001, + CF_MODIFIED = 0x0004, + CF_LOCAL = 0x0008, + CF_INFOOTNOTE = 0x0010, + CF_METACHANGED = 0x0020, + CF_PRIVATE = 0x0040, + CF_DEACTIVATED = 0x0080, + CF_VALUECHANGED = 0x0100, + CF_DISABLEVALUECHECKING = 0x0200, + CF_DONTNOTIFYDOCUMENT = 0x0400, // for numeric formatting + CF_ISOVERRIDE = 0x0800, + CF_ISBULLET = 0x1000, + CF_CONTINUEDON = 0x2000, + CF_CONTINUEDFROM = 0x4000, + + // Bits that should be transferred when we duplicate a content + CF_COPYMASK = (CF_MODIFIED | CF_PRIVATE) + }; +protected: + void Read(); +public: + inline LwpAssociatedLayouts* GetLayoutsWithMe(); + LwpVirtualLayout* GetLayout(LwpVirtualLayout* pStartLayout); + inline sal_Bool IsActive(); + virtual sal_Bool IsTable(); + inline OUString GetClassName(); + inline LwpContent* GetNextEnumerated(); + sal_Bool HasNonEmbeddedLayouts(); + sal_Bool IsStyleContent(); +}; + +LwpAssociatedLayouts* LwpContent::GetLayoutsWithMe() +{ + return &m_LayoutsWithMe; +} + +inline sal_Bool LwpContent::IsActive() +{ + return !(m_nFlags & CF_DEACTIVATED); +} + +inline sal_Bool LwpContent::IsTable() +{ + return sal_False; +} + +inline OUString LwpContent::GetClassName() +{ + return m_ClassName.str(); +} + +inline LwpContent* LwpContent::GetNextEnumerated() +{ + return static_cast<LwpContent*>(m_NextEnumerated.obj()); +} +/** + * @brief + * Head object of content list + */ +class LwpHeadContent : public LwpContent +{ +public: + LwpHeadContent(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpHeadContent(){}; +protected: + void Read(); +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpdefobj.cxx b/lotuswordpro/source/filter/lwpdefobj.cxx new file mode 100644 index 000000000000..eb6e1567ca2d --- /dev/null +++ b/lotuswordpro/source/filter/lwpdefobj.cxx @@ -0,0 +1,88 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpdefobj.hxx" + +LwpDefaultObject::LwpDefaultObject(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + :LwpObject(objHdr, pStrm),m_DataBuffer(NULL) +{} + +LwpDefaultObject::~LwpDefaultObject() +{ + if(m_DataBuffer) + { + delete [] m_DataBuffer; + m_DataBuffer = NULL; + } +} + +void LwpDefaultObject::Read() +{ + if(m_DataBuffer) + { + delete [] m_DataBuffer; + m_DataBuffer = NULL; + } + m_DataBuffer = new sal_uInt8[m_ObjHdr.GetSize()]; + m_pObjStrm->QuickRead(m_DataBuffer, m_ObjHdr.GetSize()); +} diff --git a/lotuswordpro/source/filter/lwpdefobj.hxx b/lotuswordpro/source/filter/lwpdefobj.hxx new file mode 100644 index 000000000000..ec2e461151a7 --- /dev/null +++ b/lotuswordpro/source/filter/lwpdefobj.hxx @@ -0,0 +1,81 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef LWPDEFAULTOBJECT_HXX_ +#define LWPDEFAULTOBJECT_HXX_ + +#include "lwpobj.hxx" +#include "lwpheader.hxx" + +class LwpDefaultObject : public LwpObject +{ +public: + LwpDefaultObject(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpDefaultObject(); +private: + sal_uInt8 *m_DataBuffer; +public: + //inline sal_uInt8* GetBuffer(){return m_DataBuffer;} + void Read(); +}; +#endif diff --git a/lotuswordpro/source/filter/lwpdefs.hxx b/lotuswordpro/source/filter/lwpdefs.hxx new file mode 100644 index 000000000000..8380d2cd5ae7 --- /dev/null +++ b/lotuswordpro/source/filter/lwpdefs.hxx @@ -0,0 +1,423 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * definitions for all object types VO_TYPE + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPDEFS_HXX +#define _LWPDEFS_HXX + +#define BAD_OFFSET 0xFFFFFFFFUL +#define BAD_ATOM ((sal_Int32)(-1)) // Invalid Atom ID + +//Please remove the item from the commented defines after you add the tag to the following enum. +enum VO_TYPE +{ + VO_PARA = 0, + VO_DOCUMENT = 5, + VO_STORY = 13, + VO_VERQTR = 40, + VO_HEADCONTENT = 47, + VO_HEADLAYOUT = 142, + VO_PAGELAYOUT = 143, + VO_DOCSOCK = 155, + VO_DIVISIONINFO = 7, + VO_HEADHOLDER = 90, + VO_DIVOPTS = 176, + VO_DOCDATA = 137, + VO_HEADERLAYOUT = 139, + VO_FOOTERLAYOUT = 140, + VO_FRAMELAYOUT = 141, + VO_TOCSUPERTABLELAYOUT = 149, + VO_TOCLEVELDATA = 171, + VO_LAYOUTGEOMETRY = 185, + VO_LAYOUTSCALE = 186, + VO_LAYOUTMARGINS = 187, + VO_LAYOUTCOLUMNS = 188, + VO_LAYOUTBORDERSTUFF = 189, + VO_LAYOUTGUTTERSTUFF = 190, + VO_LAYOUTBACKGROUNDSTUFF = 191, + VO_LAYOUTJOINSTUFF = 192, + VO_LAYOUTSHADOW = 193, + VO_LAYOUTNUMERICS = 194, + VO_LAYOUTRELATIVITY = 195, + VO_LAYOUTEXTERNALBORDERSTUFF = 219, + VO_GRAPHIC = 41, + VO_VERGTR = 205, + + // 01/12/2005 + VO_PARASTYLE = 23, + VO_CHARACTERSTYLE = 106, + VO_SILVERBULLET = 127, + VO_ALIGNMENTPIECE = 196, + VO_INDENTPIECE = 197, + VO_SPACINGPIECE = 199, + VO_CHARBORDERPIECE = 202, + VO_AMIKAKEPIECE = 203, + // end + + // start + VO_TABRACK = 38, + VO_PARABORDERPIECE = 198, + VO_BREAKSPIECE = 200, + VO_NUMBERINGPIECE = 201, + VO_TABPIECE = 204, + VO_PARABACKGROUNDPIECE = 218, + // end + // 02/01/2005 + VO_SECTION = 136, + VO_INDEXSECTION = 48, + VO_HEADTAILHOLDER = 169, + VO_PAGEHINT = 10, + VO_OBJECTHOLDER = 98, + VO_POBJECTHOLDER = 133, + // added for OLE + VO_OLEOBJECT = 54, + // end OLE + + // added for table + VO_TABLE = 17, + VO_CELLLAYOUT = 18, + VO_SUPERTABLELAYOUT = 109, + VO_TABLELAYOUT = 31, + VO_SUPERTABLE = 115, + VO_ROWLAYOUT = 32, + VO_ROWLIST = 76, + VO_CELLLIST = 74, + VO_NUMERICVALUE = 123, + VO_FORMULAINFO = 82, + VO_COLUMNLAYOUT = 35, + VO_TABLERANGE = 66, + VO_CELLRANGE = 67, + VO_FOLDER = 75, + VO_DEPENDENT = 77, + VO_CONNECTEDCELLLAYOUT = 28, + VO_HIDDENCELLLAYOUT = 29, + VO_TABLEHEADINGLAYOUT = 117, + VO_ROWHEADINGLAYOUT = 118, + VO_TABLEHEADING = 209, + VO_TABLEHINT = 19, + // end table + + //add by + VO_DROPCAPLAYOUT = 217, + VO_CHBLKMARKER = 94, + VO_PROPLIST = 165, + VO_BOOKMARK = 64, + VO_FIELDMARKER = 87, + //add end + + //for footnote + VO_FOOTNOTE = 53, + VO_FOOTNOTEOPTS = 177, + VO_FOOTNOTELAYOUT = 65, + VO_FNROWLAYOUT = 59, + VO_FNCELLLAYOUT = 61, + VO_ENDNOTELAYOUT = 138, + VO_ENSUPERTABLELAYOUT = 113, + VO_FNSUPERTABLELAYOUT = 111, + VO_FOOTNOTETABLE = 58, + VO_CONTONLAYOUT = 145, + VO_CONTFROMLAYOUT = 146, + + //for frame group + VO_GROUPLAYOUT = 108, + VO_GROUPFRAME = 173, + + //For index manager + VO_ROOTLEAFOBJINDEX = 0xFFFB, // Root Index with no kids + VO_ROOTOBJINDEX = 0xFFFC, // Root Index with kids + + //Add new type of index + VO_OBJINDEX = 0xFFFD, // Obj Index with kids + + VO_LEAFOBJINDEX = 0xFFFE , // Leaf Index + + VO_LISTLIST = 100, + + //For comment notes + VO_NOTELAYOUT = 159, + VO_NOTEHEADERLAYOUT = 178, + VO_NOTETEXTLAYOUT = 166, + VO_VPLAYOUT = 132, + + // for parallel column + VO_SUPERPARALLELCOLUMNLAYOUT = 174, + VO_PCOLLAYOUT = 206, + VO_PCOLBLOCK = 207, + VO_PARALLELCOLUMNS = 163, + + //for ruby mark + VO_RUBYMARKER = 179, + VO_RUBYLAYOUT = 180, + + VO_GLOSSARY = 157, + VO_SUPERGLOSSARYLAYOUT = 175, + //for default tab distance + VO_VERDOCUMENT = 161, + + + //The last one + VO_INVALID = -1 +}; + +/* + static const VO_OBJINDEX = 0xFFFD ; // Intermediate Level Index +*/ +/* +#define VO_LAYOUT 1 +#define VO_NOTIFY 2 +#define VO_LINE 3 +#define VO_PRESENT 4 +#define VO_PAGECONTAINER 6 +#define VO_COLUMN 8 +#define VO_CELLGADGET 9 +#define VO_PAGEHINT 10 +#define VO_PANE 11 +#define VO_SUBPAGECONTAINER 12 +#define VO_TABSEG 14 +#define VO_FRAMECONTAINER 15 +#define VO_LINEHINT 16 +#define VO_TABLE 17 +#define VO_CELLLAYOUT 18 +#define VO_TABLEHINT 19 +#define VO_CELLCONTAINER 20 +#define VO_TABLECONTAINER 21 +#define VO_ROWCONTAINER 22 + +#define VO_COVERCELLCONTAINER 24 +#define VO_HIDDENCELLCONTAINER 25 +#define VO_SPACESHAPE 26 +#define VO_TABLEHEADINGCONTAINER 27 +#define VO_CONNECTEDCELLLAYOUT 28 +#define VO_HIDDENCELLLAYOUT 29 +#define VO_SUPERLINE 30 +#define VO_TABLELAYOUT 31 +#define VO_ROWLAYOUT 32 +#define VO_TABLEROWCACHE 33 +#define VO_TABLECOLUMNCACHE 34 +#define VO_COLUMNLAYOUT 35 +#define VO_HANDLENODE 36 +#define VO_FORMATLISTNODE 37 + +#define VO_TEMPPAGEHINT 39 + +#define VO_COLLAPSEGADGET 42 +#define VO_PERMISSIVELAYOUT 43 +#define VO_ELEVATORGADGET 44 +#define VO_STORYMARKER 45 +#define VO_HEADCONTAINER 46 + + +#define VO_NAMEDOUTLINESEQ 49 +#define VO_VIEWPORTCONTAINER 50 +#define VO_PRESENTATIONINFO 51 +#define VO_OBJECTINDEX 52 + +#define VO_OLEOBJECT 54 +#define VO_FOOTNOTECONTAINER 55 +#define VO_LITTLEPAGEGADGET 56 +#define VO_OUTLINEBUTTONGADGET 57 + +#define VO_FNROWLAYOUT 59 +#define VO_FNROWCONTAINER 60 +#define VO_FNCELLLAYOUT 61 +#define VO_FNCELLCONTAINER 62 +#define VO_3DBUTTONGADGET 63 +#define VO_BOOKMARK 64 + +#define VO_TABLERANGE 66 +#define VO_CELLRANGE 67 +#define VO_REVLINEGADGET 68 +#define VO_REVCHARGADGET 69 +#define VO_SCROLLBUTTONGADGET 70 +#define VO_VSCROLLBARGADGET 71 +#define VO_HSCROLLBARGADGET 72 +#define VO_SCROLLBARGADGET 73 +#define VO_CELLLIST 74 +#define VO_FOLDER 75 +#define VO_ROWLIST 76 +#define VO_DEPENDENT 77 +#define VO_NUMBERHINT 78 +#define VO_MARKER 79 +#define VO_NOTEGADGET 80 +#define VO_DDELINK 81 +#define VO_FORMULAINFO 82 +#define VO_THUMBGADGET 83 +#define VO_GHOSTTHUMBGADGET 84 +#define VO_BOOKMARKGADGET 85 +#define VO_LINKGADGET 86 + +#define VO_CHECKPOINT 88 +#define VO_STORYCHECKPOINT 89 + +#define VO_TABLEMARKER 91 +#define VO_TABLECHECKPOINT 92 +#define VO_FOOTNOTELISTLIST 93 +#define VO_CHBLKMARKER 94 +#define VO_ROWGADGET 95 +#define VO_COLUMNGADGET 96 +#define VO_CORNERGADGET 97 + +#define VO_GRAPHICOLECHECKPOINT 99 + +#define VO_DEMANDLOADER 101 +#define VO_COLUMNSIZEGADGET 102 +#define VO_ROWSIZEGADGET 103 +#define VO_CELLMOVEGADGET 104 +#define VO_CELLSELECTIONGADGET 105 +#define VO_CHARACTERSTYLE 106 +#define VO_GROUPCONTAINER 107 + +#define VO_SUPERTABLELAYOUT 109 +#define VO_SUPERTABLECONTAINER 110 + +#define VO_FNSUPERTABLECONTAINER 112 + +#define VO_ENSUPERTABLECONTAINER 114 +#define VO_SUPERTABLE 115 +#define VO_ROWCOLUMNSIZEGADGET 116 +#define VO_TABLEHEADINGLAYOUT 117 +#define VO_ROWHEADINGLAYOUT 118 +#define VO_TOMBSTONE 119 +#define VO_CAPTION 120 +#define VO_VERCONTROL 121 +#define VO_ANCHORGADGET 122 +#define VO_NUMERICVALUE 123 +#define VO_TEXTVALUE 124 +#define VO_REFERENCEVALUE 125 +#define VO_DLTREENODE 126 + +#define VO_PARADATAHOLDER 128 +#define VO_NOTIFYPERSISTENT 129 +#define VO_TYPVERCONTROL 130 +#define VO_USRVERCONTROL 131 +#define VO_POBJECTHOLDER 133 +#define VO_CELLNUMBERHINT 134 +#define VO_STXINFO 135 // SmarText object + + + + + + + +#define VO_MARKERLIST 144 + +#define VO_NAMEDVERCONTROL 147 +#define VO_DIRTBAG 148 + +#define VO_OBJPTRHOLDER 150 +#define VO_COLUMNWIDTHCACHE 151 +#define VO_NOTIFYLISTHOLDER 152 +#define VO_OBJECTHOLDERNV 153 +#define VO_BASELINEGADGET 154 + +#define VO_DLVOLISTHEADHOLDER 156 +#define VO_DELETEDTEXTGADGET 158 + +#define VO_FOOTNOTESEEN 160 + +#define VO_OUTLINESEQITEM 162 + +#define VO_CHBGADGET 164 +#define VO_PROPLIST 165 +#define VO_STXMANAGER 167 // SmarText object +#define VO_STXLINK 168 // SmarText object + +#define VO_VERPTR 170 + +#define VO_VERDOCINFO 172 + + +#ifdef RUBY + +#define VO_RUBYGADGET 181 +#endif +#define VO_OLEGADGET 182 +#define VO_AMIASWPSEUDOOBJHOLDER 183 +#define VO_LONGHOLDER 184 + + +#define VO_REVA_MAXTYPES 186 + + + +#define VO_CONNECTEDBLOCK 208 +#define VO_TABLEHEADING 209 +#define VO_BOOKMARKMARKERLIST 210 +#define VO_FIELDMARKERLIST 211 +#define VO_CHBMARKERLIST 212 +#define VO_DDEMARKERLIST 213 +#define VO_RUBYMARKERLIST 214 +#ifdef RUBY +#define VO_RUBYMARKERGADGET 215 +#endif +#define VO_DROPCAPCONTAINER 216 + + + +#define VO_LAYOUTEXTERNALJOINSTUFF 220 + + +#define VO_OBJINDEX 0xFFFD // Intermediate Level Index +*/ + +#endif diff --git a/lotuswordpro/source/filter/lwpdivinfo.cxx b/lotuswordpro/source/filter/lwpdivinfo.cxx new file mode 100644 index 000000000000..b89cf27a66dd --- /dev/null +++ b/lotuswordpro/source/filter/lwpdivinfo.cxx @@ -0,0 +1,174 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpdivinfo.hxx" +#include "lwpobjstrm.hxx" +#include "lwpfilehdr.hxx" +#include "lwpholder.hxx" +#include "lwppagehint.hxx" + +LwpDivInfo::LwpDivInfo(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpObject(objHdr, pStrm) +{} + +LwpDivInfo::~LwpDivInfo(){} + +void LwpDivInfo::Read() +{ + + SkipFront(); + m_ParentID.ReadIndexed(m_pObjStrm); + if (LwpFileHeader::m_nFileRevision < 0x0006) + { + m_pObjStrm->SkipExtra(); + } + m_Name.Read(m_pObjStrm); + if (LwpFileHeader::m_nFileRevision < 0x0006) + { + m_pObjStrm->SkipExtra(); + } + + m_LayoutID.ReadIndexed(m_pObjStrm); + m_pObjStrm->QuickRead(&m_nFlags, sizeof(m_nFlags)); + if (LwpFileHeader::m_nFileRevision < 0x0010) // In 98, graphic links count too + { + if ((m_nFlags & DI_ANYOLEDDELINKS) == 0) + m_nFlags &= ~DI_KNOWIFANYOLEDDELINKS; + } + + m_ExternalName.Read(m_pObjStrm); + m_ExternalType.Read(m_pObjStrm); + m_ClassName.Read(m_pObjStrm); + m_InitialLayoutID.ReadIndexed(m_pObjStrm); + + m_pObjStrm->QuickRead(&m_nPageNoStyle, sizeof(m_nPageNoStyle)); + m_TabColor.Read(m_pObjStrm); + + // read filler page stuff + m_FillerPageTextID.ReadIndexed(m_pObjStrm); + + // read external file object stuff + sal_uInt16 type; + m_pObjStrm->QuickRead(&type, sizeof(type)); + //cpExternalFile = LNULL; + + assert(type==0); + m_pObjStrm->SkipExtra(); + +} + +void LwpDivInfo::SkipFront() +{ + LwpObjectID toSkip; + + toSkip.ReadIndexed(m_pObjStrm); // skip ListNext; + if (LwpFileHeader::m_nFileRevision < 0x0006) + { + m_pObjStrm->SkipExtra(); + } + toSkip.ReadIndexed(m_pObjStrm); // skip ListPrevious; + if (LwpFileHeader::m_nFileRevision < 0x0006) + { + m_pObjStrm->SkipExtra(); + } + toSkip.ReadIndexed(m_pObjStrm); // skip Head; + if (LwpFileHeader::m_nFileRevision < 0x0006) + { + toSkip.ReadIndexed(m_pObjStrm); //skip tail + m_pObjStrm->SkipExtra(); + } +} + +void LwpDivInfo::GetNumberOfPages(sal_uInt16 & nPageno) +{ + if(IsGotoable()) + { + if (IsOleDivision()) + { + //not support now + return; + } + else + { + nPageno += GetMaxNumberOfPages(); + } + } +} + +sal_uInt16 LwpDivInfo::GetMaxNumberOfPages() +{ + LwpDocument* pDiv = GetDivision(); + if(!pDiv) + return 0; + LwpDLVListHeadTailHolder* pHeadTail = static_cast<LwpDLVListHeadTailHolder*>(pDiv->GetPageHintsID()->obj()); + if(pHeadTail) + { + LwpPageHint* pPageHint =static_cast<LwpPageHint*>(pHeadTail->GetTail()->obj()); + if(pPageHint && !pPageHint->GetPageLayoutID()->IsNull()) + { + return pPageHint->GetPageNumber(); + } + } + + return 0; +} diff --git a/lotuswordpro/source/filter/lwpdivinfo.hxx b/lotuswordpro/source/filter/lwpdivinfo.hxx new file mode 100644 index 000000000000..68252584ff76 --- /dev/null +++ b/lotuswordpro/source/filter/lwpdivinfo.hxx @@ -0,0 +1,166 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPDIVINFO_HXX +#define _LWPDIVINFO_HXX + +#include "lwpobj.hxx" +#include "lwpobjid.hxx" +#include "lwpatomholder.hxx" +#include "lwpcolor.hxx" +#include "lwpheader.hxx" +#include "lwpdoc.hxx" + +#define STR_OleDivisionClassName "OLEDivision" + + +class LwpDivInfo : public LwpObject +{ +public: + LwpDivInfo(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + ~LwpDivInfo(); + LwpObjectID* GetInitialLayoutID(){ return &m_InitialLayoutID;} + LwpObjectID* GetFillerPageTextID(){ return &m_FillerPageTextID;} + // add by ,03/14/2004 + rtl::OUString GetDivName() { return m_Name.str(); } + // end add + + rtl::OUString GetClassName() { return m_ClassName.str(); } + inline sal_Bool HasContents(); + inline sal_Bool IsOleDivision(); + inline sal_Bool IsScrollable(); + inline sal_Bool IsGotoable(); + inline LwpDocument* GetDivision(); + void GetNumberOfPages(sal_uInt16& nPageno); + sal_uInt16 GetMaxNumberOfPages(); + LwpAtomHolder* GetExternalName(){return &m_ExternalName;}; +protected: + void Read(); +private: + LwpObjectID m_ParentID; + LwpAtomHolder m_Name; + LwpObjectID m_LayoutID; + sal_uInt16 m_nFlags; + LwpAtomHolder m_ExternalName; + LwpAtomHolder m_ExternalType; + LwpAtomHolder m_ClassName; + LwpObjectID m_InitialLayoutID; + //pCDLVOListHeadHolder cPresInfo; + + sal_uInt16 m_nPageNoStyle; + LwpColor m_TabColor; + LwpObjectID m_FillerPageTextID; + + enum + { + DI_SCROLLABLE = 0x01, + DI_HASCONTENTS = 0x02, + DI_EXPANDED = 0x04, + DI_SHOWSTAB = 0x08, + + DI_MUDPUPPY = 0x10, + DI_NOTDELETABLE = 0x20, + DI_BEGINGROUP = 0x40, + DI_GROUP = 0x80, + + DI_ENDGROUP = 0x100, + DI_SUPPRESS_FILLER_PAGE_HEADERS = 0x200, + DI_EXTERNALFILE = 0x400, + DI_FIXED = 0x800, + + DI_KNOWIFANYOLEDDELINKS = 0x1000, + DI_ANYOLEDDELINKS = 0x2000 + }; + + void SkipFront(); + +}; + +inline sal_Bool LwpDivInfo::HasContents() +{ + return (m_nFlags & DI_HASCONTENTS) ? sal_True : sal_False; +} + +inline sal_Bool LwpDivInfo::IsOleDivision() +{ + OUString strClassName = GetClassName(); + if (strClassName.equals(A2OUSTR(STR_OleDivisionClassName))) + return sal_True; + return sal_False; +} + +inline sal_Bool LwpDivInfo::IsScrollable() +{ + return (m_nFlags & DI_SCROLLABLE) ? sal_True : sal_False; +} + +inline sal_Bool LwpDivInfo::IsGotoable() +{ + return HasContents() && (IsScrollable() || IsOleDivision()); +} + +inline LwpDocument* LwpDivInfo::GetDivision() +{ + return static_cast<LwpDocument*>(m_ParentID.obj()); +} +#endif diff --git a/lotuswordpro/source/filter/lwpdivopts.cxx b/lotuswordpro/source/filter/lwpdivopts.cxx new file mode 100644 index 000000000000..753c86ea9bc6 --- /dev/null +++ b/lotuswordpro/source/filter/lwpdivopts.cxx @@ -0,0 +1,133 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpdivopts.hxx" +#include "lwpfilehdr.hxx" + +LwpHyphenOptions::LwpHyphenOptions() +{} + +LwpHyphenOptions::~LwpHyphenOptions() +{} + +void LwpHyphenOptions::Read(LwpObjectStream *pStrm) +{ + pStrm->QuickRead(&m_nFlags, sizeof(m_nFlags)); + pStrm->QuickRead(&m_nZoneBefore, sizeof(m_nZoneBefore)); + pStrm->QuickRead(&m_nZoneAfter, sizeof(m_nZoneAfter)); + pStrm->QuickRead(&m_nMaxLines, sizeof(m_nMaxLines)); + pStrm->SkipExtra(); +} + + + +LwpTextLanguage::LwpTextLanguage(){}; +LwpTextLanguage::~LwpTextLanguage(){} + +void LwpTextLanguage::Read(LwpObjectStream *pStrm) +{ + pStrm->QuickRead(&m_nLanguage, sizeof(m_nLanguage)); + pStrm->SkipExtra(); + + if( LwpFileHeader::m_nFileRevision <= 0x0a) + m_nLanguage = ConvertFrom96(m_nLanguage); +} + +sal_uInt16 LwpTextLanguage::ConvertFrom96(sal_uInt16 orgLang) +{ + // Reading a Word Pro 96 into Word Pro 97 + switch (orgLang) + { + case 0x2809U: // AMI_MEDICAL 96 + orgLang = 0x8409U; //0x8409U 97 + break; + case 0x2C09U: // AMI_BRMEDICAL 96 + orgLang = 0x8809U; // 0x8809U 97 + break; + case 0x3409U: // AMI_BRITISHMEDIZE 96 + orgLang = 0x8C09U; // 0x8C09U 97 + break; + case 0x3009U: // AMI_BRITISHIZE 96 + orgLang = 0x1009U; // 0x1009U 97 + break; + case 0x819U: // AMI_RUSSIANIO 96 + orgLang = 0x8419U; // 0x8419U 97 + break; + } + return orgLang; +} + +LwpDivisionOptions::LwpDivisionOptions(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpObject(objHdr, pStrm) +{} + +LwpDivisionOptions::~LwpDivisionOptions() +{} + +void LwpDivisionOptions::Read() +{ + m_HyphOpts.Read(m_pObjStrm); + m_pObjStrm->QuickRead(&m_nOptionFlag, sizeof(m_nOptionFlag)); + m_Lang.Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); +} diff --git a/lotuswordpro/source/filter/lwpdivopts.hxx b/lotuswordpro/source/filter/lwpdivopts.hxx new file mode 100644 index 000000000000..6dad309ee966 --- /dev/null +++ b/lotuswordpro/source/filter/lwpdivopts.hxx @@ -0,0 +1,120 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPDIVISIONOPTIONS_HXX +#define _LWPDIVISIONOPTIONS_HXX + +#include "lwpobj.hxx" +#include "lwpobjid.hxx" +#include "lwpatomholder.hxx" +#include "lwpcolor.hxx" +#include "lwpheader.hxx" + +class LwpHyphenOptions +{ +public: + LwpHyphenOptions(); + ~LwpHyphenOptions(); + void Read(LwpObjectStream *pStrm); +private: + sal_uInt16 m_nFlags; + sal_uInt16 m_nZoneBefore; + sal_uInt16 m_nZoneAfter; + sal_uInt16 m_nMaxLines; +}; + + +/* +Text languange. +This class which holds identifiers for language and dialect. +DESCRIPTION You can mark text as being a certain language. When we spell + check or grammar check we'll use this info to determine which dictionary + to use. + The only reserved value is 0, which means "default language". The + default language is specified by the document. +*/ +class LwpTextLanguage +{ +public: + LwpTextLanguage(); + ~LwpTextLanguage(); + void Read(LwpObjectStream *pStrm); +private: + sal_uInt16 ConvertFrom96(sal_uInt16 orgLang); + sal_uInt16 m_nLanguage; +}; + + +class LwpDivisionOptions : public LwpObject +{ +public: + LwpDivisionOptions(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + ~LwpDivisionOptions(); +protected: + void Read(); +private: + LwpHyphenOptions m_HyphOpts; + sal_uInt16 m_nOptionFlag; + LwpTextLanguage m_Lang; +}; +#endif diff --git a/lotuswordpro/source/filter/lwpdllist.cxx b/lotuswordpro/source/filter/lwpdllist.cxx new file mode 100644 index 000000000000..58218cfc0b01 --- /dev/null +++ b/lotuswordpro/source/filter/lwpdllist.cxx @@ -0,0 +1,99 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * double linked class implementation + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpdllist.hxx" + +LwpDLList::LwpDLList(LwpDLList* Next, LwpDLList* Previous) +{ + insert(Next, Previous); +} + +LwpDLList::LwpDLList(void) +{ + m_pNext = m_pPrevious = NULL; +} + +void +LwpDLList::insert(LwpDLList* Next,LwpDLList* Previous) +{ + if (Next) + Next->SetPrevious(this); + if (Previous) + Previous->SetNext(this); + m_pNext = Next; + m_pPrevious = Previous; +} + +LwpDLList::~LwpDLList(void) +{ + remove(); +} + +void LwpDLList::remove() +{ + /* fix up other links */ + if(m_pPrevious) + m_pPrevious->SetNext(m_pNext); + if(m_pNext) + m_pNext->SetPrevious(m_pPrevious); +} diff --git a/lotuswordpro/source/filter/lwpdllist.hxx b/lotuswordpro/source/filter/lwpdllist.hxx new file mode 100644 index 000000000000..1a69eec800f6 --- /dev/null +++ b/lotuswordpro/source/filter/lwpdllist.hxx @@ -0,0 +1,104 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * double linked list + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPDLLIST_HXX_ +#define _LWPDLLIST_HXX_ +#include "lwpheader.hxx" +class LwpDLList +{ +public: + LwpDLList(LwpDLList*,LwpDLList*); + LwpDLList(void); + virtual ~LwpDLList(); + void insert(LwpDLList*, LwpDLList*); + void remove(void); + LwpDLList* GetNext(void); + LwpDLList* GetPrevious(void); + void SetNext(LwpDLList*); + void SetPrevious(LwpDLList*); +private: + LwpDLList* m_pNext; + LwpDLList* m_pPrevious; +}; + +inline LwpDLList* LwpDLList::GetNext(void) +{ + return m_pNext; +} + +inline void LwpDLList::SetNext(LwpDLList* Next) +{ + m_pNext = Next; +} + +inline LwpDLList* LwpDLList::GetPrevious(void) +{ + return m_pPrevious; +} + +inline void LwpDLList::SetPrevious(LwpDLList* Previous) +{ + m_pPrevious = Previous; +} + +#endif diff --git a/lotuswordpro/source/filter/lwpdlvlist.cxx b/lotuswordpro/source/filter/lwpdlvlist.cxx new file mode 100644 index 000000000000..ab04e9ad1bad --- /dev/null +++ b/lotuswordpro/source/filter/lwpdlvlist.cxx @@ -0,0 +1,185 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * list class implementation + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpdlvlist.hxx" +#include "lwpfilehdr.hxx" +#include "lwpproplist.hxx" + +LwpDLVList::LwpDLVList(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpObject(objHdr, pStrm) +{} +/** + * @descr Read LwpDLVList data from object stream + **/ +void LwpDLVList::Read() +{ + LwpObjectStream* pObjStrm = m_pObjStrm; + m_ListNext.ReadIndexed(pObjStrm); + if( LwpFileHeader::m_nFileRevision < 0x0006 ) + pObjStrm->SkipExtra(); + + m_ListPrevious.ReadIndexed(pObjStrm); + if( LwpFileHeader::m_nFileRevision < 0x0006 ) + pObjStrm->SkipExtra(); + +} +LwpDLNFVList::LwpDLNFVList(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpDLVList(objHdr, pStrm) +{} +/** + * @descr Read LwpDLNFVList data from object stream + **/ +void LwpDLNFVList::Read() +{ + LwpDLVList::Read(); + + LwpObjectStream* pObjStrm = m_pObjStrm; + + m_ChildHead.ReadIndexed(pObjStrm); + if( LwpFileHeader::m_nFileRevision < 0x0006 || !m_ChildHead.IsNull() ) + m_ChildTail.ReadIndexed(pObjStrm); + if( LwpFileHeader::m_nFileRevision < 0x0006 ) + pObjStrm->SkipExtra(); + + m_Parent.ReadIndexed(pObjStrm); + if( LwpFileHeader::m_nFileRevision < 0x0006 ) + pObjStrm->SkipExtra(); + + ReadName(pObjStrm); +} +/** + * @descr Read name of LwpDLNFVList from object stream + **/ +void LwpDLNFVList::ReadName(LwpObjectStream* pObjStrm) +{ + m_Name.Read(pObjStrm); + if( LwpFileHeader::m_nFileRevision < 0x0006 ) + pObjStrm->SkipExtra(); +} +/** + * @descr ctor of LwpDLNFPVList from object stream + * Note that m_bHasProperties is initialized to true + **/ +LwpDLNFPVList::LwpDLNFPVList(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpDLNFVList(objHdr, pStrm), + m_bHasProperties(sal_True),m_pPropList(NULL) +{} +/** + * @descr Read name of LwpDLNFVList from object stream + **/ +void LwpDLNFPVList::Read() +{ + LwpDLNFVList::Read(); + + LwpObjectStream* pObjStrm = m_pObjStrm; + ReadPropertyList(pObjStrm); + pObjStrm->SkipExtra(); +} +/** + * @descr Read property list + **/ +void LwpDLNFPVList::ReadPropertyList(LwpObjectStream* pObjStrm) +{ + if( LwpFileHeader::m_nFileRevision >= 0x0000B) + { + pObjStrm->QuickRead(&m_bHasProperties, sizeof(m_bHasProperties)); + if (m_bHasProperties) + { + m_pPropList = new LwpPropList; + m_pPropList->Read(pObjStrm); + } + } +} +/** + * @descr release property list + **/ +LwpDLNFPVList::~LwpDLNFPVList() +{ + if(m_pPropList) + { + delete m_pPropList; + } +} + +/** + * @descr Read head id and tail id + **/ +void LwpDLVListHeadTail::Read(LwpObjectStream* pObjStrm) +{ + m_ListHead.ReadIndexed(pObjStrm); + if( (LwpFileHeader::m_nFileRevision < 0x0006) || !m_ListHead.IsNull()) + { + m_ListTail.ReadIndexed(pObjStrm); + } + if( LwpFileHeader::m_nFileRevision < 0x0006) + { + pObjStrm->SkipExtra(); + } +} +/** + * @descr Read head id + **/ +void LwpDLVListHead::Read(LwpObjectStream* pObjStrm) +{ + m_objHead.ReadIndexed(pObjStrm); +} diff --git a/lotuswordpro/source/filter/lwpdlvlist.hxx b/lotuswordpro/source/filter/lwpdlvlist.hxx new file mode 100644 index 000000000000..9fd7101adc8d --- /dev/null +++ b/lotuswordpro/source/filter/lwpdlvlist.hxx @@ -0,0 +1,205 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * list related class + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef LWPDLVLIST_HXX_ +#define LWPDLVLIST_HXX_ + +#include "lwpatomholder.hxx" +#include "lwpobj.hxx" +/** + * @brief Double Linked Virtual List +*/ +class LwpDLVList : public LwpObject +{ +public: + LwpDLVList(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpDLVList(){}; +protected: + LwpObjectID m_ListPrevious; + LwpObjectID m_ListNext; +protected: + void Read(); +public: + inline LwpObjectID* GetNext(); + inline LwpObjectID* GetPrevious(); +}; +LwpObjectID* LwpDLVList::GetNext() +{ + return &m_ListNext; +} +LwpObjectID* LwpDLVList::GetPrevious() +{ + return &m_ListPrevious; +} +/** + * @brief Double Linked Named Family Virtual List +*/ +class LwpDLNFVList : public LwpDLVList +{ +public: + LwpDLNFVList(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpDLNFVList(){}; +protected: + LwpObjectID m_ChildHead; + LwpObjectID m_ChildTail; + LwpObjectID m_Parent; + LwpAtomHolder m_Name; +protected: + void Read(); + void ReadName(LwpObjectStream* pObjStrm); +public: + // 01/17/2005 + inline LwpAtomHolder* GetName(); + //end + inline LwpObjectID* GetChildHead(); + inline LwpObjectID* GetChildTail(); + inline LwpObjectID* GetParent(); +}; + +LwpAtomHolder* LwpDLNFVList::GetName() +{ + return &m_Name; +} + +LwpObjectID* LwpDLNFVList::GetChildHead() +{ + return &m_ChildHead; +} + +LwpObjectID* LwpDLNFVList::GetChildTail() +{ + return &m_ChildTail; +} + +LwpObjectID* LwpDLNFVList::GetParent() +{ + return &m_Parent; +} + +class LwpPropList; +/** + * @brief Double Linked Named Family Properties Virtual List +*/ +class LwpDLNFPVList : public LwpDLNFVList +{ +public: + LwpDLNFPVList(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpDLNFPVList(); +protected: + sal_Bool m_bHasProperties; + LwpPropList* m_pPropList; +protected: + void Read(); + void ReadPropertyList(LwpObjectStream* pObjStrm); +public: + inline LwpPropList* GetPropList(); +}; + +LwpPropList* LwpDLNFPVList::GetPropList() +{ + return m_pPropList; +} + +/** + * @brief Double Linked Virtual List Head Tail +*/ +class LwpDLVListHeadTail +{ +public: + LwpDLVListHeadTail(){}; + void Read(LwpObjectStream* pObjStrm); +private: + LwpObjectID m_ListHead; + LwpObjectID m_ListTail; +public: + inline LwpObjectID* GetHead(); + inline LwpObjectID* GetTail(); +}; +LwpObjectID* LwpDLVListHeadTail::GetHead() +{ + return &m_ListHead; +} +LwpObjectID* LwpDLVListHeadTail::GetTail() +{ + return &m_ListTail; +} + +/** + * @brief Double Linked Virtual List Head +*/ +class LwpDLVListHead +{ +public: + LwpDLVListHead(){}; + ~LwpDLVListHead(){}; + void Read(LwpObjectStream* pObjStrm); + inline LwpObjectID* GetFirst(); +protected: + LwpObjectID m_objHead;//LwpDLVList +}; +LwpObjectID* LwpDLVListHead::GetFirst() +{ + return &m_objHead; +} + +#endif diff --git a/lotuswordpro/source/filter/lwpdoc.cxx b/lotuswordpro/source/filter/lwpdoc.cxx new file mode 100644 index 000000000000..478fdc862580 --- /dev/null +++ b/lotuswordpro/source/filter/lwpdoc.cxx @@ -0,0 +1,830 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "lwpglobalmgr.hxx" +#include "lwpdoc.hxx" +#include "lwpfootnote.hxx" +#include "lwppagehint.hxx" +#include "lwpdivinfo.hxx" +#include "lwpholder.hxx" +#include "lwpparastyle.hxx" +#include "lwpstory.hxx" +#include "lwppara.hxx" +#include "lwpsilverbullet.hxx" +#include "lwplayout.hxx" +#include "lwppagelayout.hxx" +#include "xfilter/xfstylemanager.hxx" +#ifndef _OSL_THREAD_H_ +#include <osl/thread.h> +#endif + +LwpDocument::LwpDocument(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpDLNFPVList(objHdr, pStrm), m_pLnOpts(NULL) +{} + +LwpDocument::~LwpDocument() +{ + if(m_pLnOpts) + { + delete m_pLnOpts; + } + if(m_pFoundry) + { + delete m_pFoundry; + } +} +/** + * @descr Read VO_Document from object stream + **/ +void LwpDocument::Read() +{ + LwpDLNFPVList::Read(); + + ReadPlug(); + + m_pObjStrm->QuickRead(&m_nPersistentFlags, sizeof(m_nPersistentFlags)); + + //Skip the SortOption and UIDocument + { + LwpSortOption m_DocSort( m_pObjStrm ); + LwpUIDocument m_UIDoc( m_pObjStrm ); + } + + m_pLnOpts = new LwpLineNumberOptions(m_pObjStrm); + + //Skip LwpUserDictFiles + { + LwpUserDictFiles m_UsrDicts( m_pObjStrm ); + } + + if( !IsChildDoc()) + { + //Skip LwpPrinterInfo + LwpPrinterInfo m_PrtInfo( m_pObjStrm ); + } + + m_pFoundry = new LwpFoundry(m_pObjStrm, this); + + m_DivOpts.ReadIndexed(m_pObjStrm); + + if(!IsChildDoc()) + { + m_FootnoteOpts.ReadIndexed(m_pObjStrm); + m_DocData.ReadIndexed(m_pObjStrm); + } + else + { + //Skip the docdata used in old version + LwpObjectID dummyDocData; + dummyDocData.ReadIndexed(m_pObjStrm); + } + m_DivInfo.ReadIndexed(m_pObjStrm); + m_Epoch.Read(m_pObjStrm); + m_WYSIWYGPageHints.ReadIndexed(m_pObjStrm); + m_VerDoc.ReadIndexed(m_pObjStrm); + m_STXInfo.ReadIndexed(m_pObjStrm); +} + +/** + * @descr Read plug related data from m_pObjStram + **/ +void LwpDocument::ReadPlug() +{ + m_DocSockID.ReadIndexed(m_pObjStrm); + m_pObjStrm->QuickRead(&m_nFlags, sizeof(m_nFlags)); + m_pObjStrm->SkipExtra(); +} + +/** + * @descr Parse obj to IXFStream + **/ +void LwpDocument::Parse(IXFStream* pOutputStream) +{ + //check the name and skip script division + if (!IsSkippedDivision()) + { + //the frames which anchor are to page must output before other contents + ParseFrameInPage(pOutputStream); + ParseDocContent(pOutputStream); + } + + LwpObject* pDocSock = GetSocket()->obj( VO_DOCSOCK ); + if(pDocSock!=NULL) + { + pDocSock->Parse(pOutputStream); + } +} + +sal_Bool LwpDocument::IsSkippedDivision() +{ + OUString sDivName; + sal_uInt8 ret = sal_False; + LwpDivInfo* pDiv = static_cast<LwpDivInfo*>(GetDivInfoID()->obj(VO_DIVISIONINFO)); + if (pDiv == NULL) + return sal_True; + sDivName = pDiv->GetDivName(); + if (sDivName.getLength()>0 && !pDiv->IsGotoable())//including toa,scripts division + return sal_True; + //skip endnote division + OUString strClassName = pDiv->GetClassName(); + if (strClassName.equals(A2OUSTR(STR_DivisionEndnote)) + || strClassName.equals(A2OUSTR(STR_DivisionGroupEndnote)) + || strClassName.equals(A2OUSTR(STR_DocumentEndnote))) + { + LwpPageLayout* pPageLayout =static_cast<LwpPageLayout*>(pDiv->GetInitialLayoutID()->obj(VO_PAGELAYOUT)); + if(pPageLayout) + { + LwpStory* pStory = static_cast<LwpStory*>(pPageLayout->GetContent()->obj(VO_STORY)); + if(pStory) + { + //This judgement maybe have problem. If there is only one para in the story, + //this endnote division has no other contents except endnote table. + LwpObjectID* pFirst = pStory->GetFirstPara(); + LwpObjectID* pLast = pStory->GetLastPara(); + if(*pFirst == *pLast) + ret = sal_True; + } + } + } + return ret; +} + +/** + * @descr Register all styles in this division + */ +void LwpDocument::RegisterStyle() +{ + RegisterDefaultParaStyles(); + RegisterGraphicsStyles(); + RegisterBulletStyles(); + + RegisterTextStyles(); + RegisterLayoutStyles(); + RegisterStylesInPara(); + + RegisterLinenumberStyles(); + RegisterFootnoteStyles(); + + //Register styles in other document connected with this document: next doc, children doc + LwpObject* pDocSock = GetSocket()->obj(); + if(pDocSock!=NULL) + { + pDocSock->RegisterStyle(); + } +} +/** + * @descr Register all named para styles + */ +void LwpDocument::RegisterTextStyles() +{ + //Register all text styles: para styles, character styles + LwpDLVListHeadHolder* pParaStyleHolder = static_cast<LwpDLVListHeadHolder*>(m_pFoundry->GetTextStyleHead()->obj()); + if(pParaStyleHolder) + { + LwpTextStyle* pParaStyle = static_cast<LwpTextStyle*> (pParaStyleHolder->GetHeadID()->obj()); + while(pParaStyle) + { + pParaStyle->SetFoundry(m_pFoundry); + pParaStyle->RegisterStyle(); + pParaStyle = static_cast<LwpParaStyle*>(pParaStyle->GetNext()->obj()); + } + } + ChangeStyleName();//add by ,for click here block,05/5/26 +} +/** + * @descr Register all layouts styles (page master and master page) + * All para styles used in master page (header and footer) are registered and then showed + */ +void LwpDocument::RegisterLayoutStyles() +{ + //Register all layout styles, before register all styles in para + m_pFoundry->RegisterAllLayouts(); + + //set initial pagelayout in story for parsing pagelayout + LwpDivInfo* pDivInfo = static_cast<LwpDivInfo*> (m_DivInfo.obj( VO_DIVISIONINFO)); + LwpPageLayout* pPageLayout = NULL; + if(pDivInfo) + { + pPageLayout =static_cast<LwpPageLayout*>(pDivInfo->GetInitialLayoutID()->obj(VO_PAGELAYOUT)); + if(pPageLayout) + { + //In Ole division, the content of pagelayout is VO_OLEOBJECT + LwpStory* pStory = static_cast<LwpStory*>(pPageLayout->GetContent()->obj(VO_STORY)); + if(pStory) + { + //add all the pagelayout in order into the pagelayout list; + pStory->SortPageLayout(); + pStory->SetCurrentLayout(pPageLayout); + } + } + } +} +/** + * @descr Register all styles used in para + */ +void LwpDocument::RegisterStylesInPara() +{ + //Register all automatic styles in para + LwpHeadContent* pContent = static_cast<LwpHeadContent*> (m_pFoundry->GetContentManager()->GetContentList()->obj()); + if(pContent) + { + LwpStory* pStory = static_cast<LwpStory*>(pContent->GetChildHead()->obj(VO_STORY)); + while(pStory) + { + //Register the child para + pStory->SetFoundry(m_pFoundry); + pStory->RegisterStyle(); + pStory = static_cast<LwpStory*>(pStory->GetNext()->obj(VO_STORY)); + } + } +} +/** + * @descr Register all bullet styles used in this division + */ +void LwpDocument::RegisterBulletStyles() +{ + //Register bullet styles + LwpDLVListHeadHolder* mBulletHead = static_cast<LwpDLVListHeadHolder*> + (m_pFoundry->GetBulletManagerID()->obj(VO_HEADHOLDER)); + if( mBulletHead ) + { + LwpSilverBullet* pBullet = static_cast<LwpSilverBullet*> + (mBulletHead->GetHeadID()->obj()); + while(pBullet) + { + pBullet->SetFoundry(m_pFoundry); + pBullet->RegisterStyle(); + pBullet = static_cast<LwpSilverBullet*> (pBullet->GetNext()->obj()); + } + } +} +/** + * @descr Register all styles used in VO_Graphic + */ +void LwpDocument::RegisterGraphicsStyles() +{ + //Register all graphics styles, the first object should register the next; + LwpObject* pGraphic = m_pFoundry->GetGraphicListHead()->obj(VO_GRAPHIC); + if(pGraphic) + { + pGraphic->SetFoundry(m_pFoundry); + pGraphic->RegisterStyle(); + } +} +/** + * @descr Register line number styles + */ +void LwpDocument::RegisterLinenumberStyles() +{ + if (!m_pLnOpts) + return; + m_pLnOpts->RegisterStyle(); +} + +/** +* @descr Register footnote/endnote configuration for the entire document +*/ +void LwpDocument::RegisterFootnoteStyles() +{ + //Register footnote and endnote configuration for the entire document + if(!m_FootnoteOpts.IsNull()) + { + LwpFootnoteOptions* pFootnoteOpts = static_cast<LwpFootnoteOptions*>(m_FootnoteOpts.obj()); + if (pFootnoteOpts) + { + pFootnoteOpts->SetMasterPage(A2OUSTR("Endnote")); + pFootnoteOpts->RegisterStyle(); + } + } + //Register endnote page style for endnote configuration, use the last division that has endnote for the endnote page style + //This page style must register after its division default styles have registered + LwpDocument* pEndnoteDiv = GetLastDivisionThatHasEndnote(); + if(this == pEndnoteDiv) + { + LwpDLVListHeadTailHolder* pHeadTail = static_cast<LwpDLVListHeadTailHolder*>(GetPageHintsID()->obj()); + if(pHeadTail) + { + LwpPageHint* pPageHint =static_cast<LwpPageHint*>(pHeadTail->GetTail()->obj()); + if(pPageHint && !pPageHint->GetPageLayoutID()->IsNull()) + { + LwpPageLayout* pPageLayout = static_cast<LwpPageLayout*>(pPageHint->GetPageLayoutID()->obj()); + if(pPageLayout) + { + pPageLayout->SetFoundry(GetFoundry()); + pPageLayout->RegisterEndnoteStyle(); + } + } + } + } +} + +/** +* @descr Register default para styles +*/ +#include "lwpverdocument.hxx" +void LwpDocument::RegisterDefaultParaStyles() +{ + if(!IsChildDoc()) + { + //Get First Division + //LwpDocument* pFirstDoc = GetFirstDivision(); + LwpDocument* pFirstDoc = GetFirstDivisionWithContentsThatIsNotOLE(); + if(pFirstDoc) + { + LwpVerDocument* pVerDoc = static_cast<LwpVerDocument*>(pFirstDoc->GetVerDoc()->obj()); + if(pVerDoc) + { + pVerDoc->RegisterStyle(); + } + } + + } +} + +/** + * @descr Parse content in this division to IXFStream + * LwpDocument->LwpDivInfo->LwpPageLayout.Parse() + */ +void LwpDocument::ParseDocContent(IXFStream* pOutputStream) +{ + //Parse content in PageLayout + LwpDivInfo* pDivInfo = static_cast<LwpDivInfo*> (m_DivInfo.obj()); + if(pDivInfo==NULL) return; + + LwpObject* pLayoutObj = pDivInfo->GetInitialLayoutID()->obj(); + if(pLayoutObj==NULL) + { + //Cause crash when parsing master document, master document not supported now. + //ParseMasterDoc(pOutputStream); + return; + } + pLayoutObj->SetFoundry(m_pFoundry); + pLayoutObj->Parse(pOutputStream); +} +/** + * @descr Parse master doc in this division to IXFStream + * + */ +void LwpDocument::ParseMasterDoc(IXFStream* pOutputStream) +{ + LwpDivInfo* pDivInfo = static_cast<LwpDivInfo*> (m_DivInfo.obj()); + if(pDivInfo==NULL) return; + LwpAtomHolder* pExternal = pDivInfo->GetExternalName(); + if(pExternal && pExternal->HasValue()) + { + OUString linkedfilepath = pExternal->str(); + OUString fileURL = LwpTools::convertToFileUrl(OUStringToOString(linkedfilepath, osl_getThreadTextEncoding())); + XFSection* pSection = new XFSection(); + pSection->SetSourceLink( fileURL); + pSection->ToXml(pOutputStream); + delete pSection; + } +} +/** + * @descr Get the footnoteoptions from the root document + */ +LwpObjectID* LwpDocument::GetValidFootnoteOpts() +{ + LwpDocument* pRoot = GetRootDocument(); + if(pRoot) + { + return pRoot->GetFootnoteOpts(); + } + return NULL; +} + +/** + * @descr Get the endnote type + */ +sal_uInt16 LwpDocument::GetEndnoteType() +{ + LwpDivInfo* pDivInfo =static_cast<LwpDivInfo*>(GetDivInfoID()->obj()); + if (!pDivInfo) + return FN_DONTCARE; + OUString strClassName = pDivInfo->GetClassName(); + if (strClassName.equals(A2OUSTR(STR_DivisionEndnote))) + return FN_DIVISION_SEPARATE; + if (strClassName.equals(A2OUSTR(STR_DivisionGroupEndnote))) + return FN_DIVISIONGROUP_SEPARATE; + if (strClassName.equals(A2OUSTR(STR_DocumentEndnote))) + return FN_DOCUMENT_SEPARATE; + return FN_DONTCARE; +} +/** + * @descr Get previous division + */ +LwpDocument* LwpDocument::GetPreviousDivision() +{ + LwpDocSock* pDocSock = static_cast<LwpDocSock*>(GetSocket()->obj()); + if(pDocSock) + { + return static_cast<LwpDocument*>(pDocSock->GetPrevious()->obj()); + } + return NULL; +} +/** + * @descr Get next division + */ + LwpDocument* LwpDocument::GetNextDivision() +{ + LwpDocSock* pDocSock = static_cast<LwpDocSock*>(GetSocket()->obj()); + if(pDocSock) + { + return static_cast<LwpDocument*>(pDocSock->GetNext()->obj()); + } + return NULL; +} +/** + * @descr Get parent division + */ + LwpDocument* LwpDocument::GetParentDivision() +{ + LwpDocSock* pDocSock = static_cast<LwpDocSock*>(GetSocket()->obj()); + if(pDocSock) + { + return static_cast<LwpDocument*>(pDocSock->GetParent()->obj()); + } + return NULL; +} +/** + * @descr Get previous division in group, copy from lwp source code + */ + LwpDocument* LwpDocument::GetPreviousInGroup() +{ + LwpDocument* pPrev = NULL; + + for (pPrev = GetPreviousDivision(); pPrev; pPrev = pPrev->GetPreviousDivision()) + { + LwpDivInfo* pDivInfo =static_cast<LwpDivInfo*>(pPrev->GetDivInfoID()->obj()); + if(pDivInfo && pDivInfo->HasContents()) + return pPrev; + } + return NULL; +} +/** + * @descr Get previous division in group, copy from lwp source code + */ + LwpDocument* LwpDocument::GetNextInGroup() +{ + LwpDocument* pNext = NULL; + + for (pNext = GetNextDivision(); pNext; pNext = pNext->GetNextDivision()) + { + LwpDivInfo* pDivInfo =static_cast<LwpDivInfo*>(pNext->GetDivInfoID()->obj()); + if(pDivInfo && pDivInfo->HasContents()) + return pNext; + } + + return NULL; +} +/** + * @descr Get previous division which has contents, copy from lwp source code + */ + LwpDocument* LwpDocument::GetPreviousDivisionWithContents() +{ + if(GetPreviousDivision()) + { + LwpDocument* pDoc = GetPreviousDivision()->GetLastDivisionWithContents(); + if (pDoc) + return pDoc; + } + if(GetParentDivision()) + return GetParentDivision()->GetPreviousDivisionWithContents(); + return NULL; +} + /** + * @descr Get last division which has contents, copy from lwp source code + */ + LwpDocument* LwpDocument::GetLastDivisionWithContents() +{ + LwpDivInfo* pDivInfo =static_cast<LwpDivInfo*>(GetDivInfoID()->obj()); + if(pDivInfo && pDivInfo->HasContents()) + { + return this; + } + + LwpDocument* pDivision = GetLastDivision(); + LwpDocument* pContentDivision = NULL; + + while(pDivision) + { + pContentDivision = pDivision->GetLastDivisionWithContents(); + if(pContentDivision) + { + return pContentDivision; + } + pDivision = pDivision->GetPreviousDivision(); + } + + return NULL; +} + /** + * @descr Get last division in group which has contents, copy from lwp source code + */ + LwpDocument* LwpDocument::GetLastInGroupWithContents() +{ + LwpDocument* pLast = NULL; + LwpDocument* pNext = this; + + while (pNext) + { + LwpDivInfo* pDivInfo =static_cast<LwpDivInfo*>(pNext->GetDivInfoID()->obj()); + if (pDivInfo && pDivInfo->HasContents()) + pLast = pNext; + pNext = pNext->GetNextInGroup(); + } + if (pLast) + return pLast; + return NULL; +} + /** + * @descr Get last division + */ + LwpDocument* LwpDocument::GetLastDivision() +{ + LwpDocSock* pDocSock = static_cast<LwpDocSock*>(GetSocket()->obj()); + if(pDocSock) + return static_cast<LwpDocument*>(pDocSock->GetChildTail()->obj()); + return NULL; +} + + /** + * @descr Get first division + */ + LwpDocument* LwpDocument::GetFirstDivision() +{ + LwpDocSock* pDocSock = static_cast<LwpDocSock*>(GetSocket()->obj()); + if(pDocSock) + return static_cast<LwpDocument*>(pDocSock->GetChildHead()->obj()); + return NULL; +} + + /** + * @descr Get root document + */ + LwpDocument* LwpDocument::GetRootDocument() +{ + LwpDocument* pRoot = this; + while(pRoot) + { + if(!pRoot->IsChildDoc()) + return pRoot; + pRoot = pRoot->GetParentDivision(); + } + return NULL; +} + /** + * @descr Get first division with contents that is not ole, copy from lwp-source code + */ + LwpDocument* LwpDocument::GetFirstDivisionWithContentsThatIsNotOLE() +{ + LwpDivInfo* pDivInfo =static_cast<LwpDivInfo*>(GetDivInfoID()->obj()); + if(pDivInfo && pDivInfo->HasContents() + && !pDivInfo->IsOleDivision()) + return this; + + LwpDocument* pDivision = GetFirstDivision(); + + LwpDocument* pContentDivision = NULL; + + while (pDivision) + { + pContentDivision = pDivision->GetFirstDivisionWithContentsThatIsNotOLE(); + if(pContentDivision) + return pContentDivision; + pDivision = pDivision->GetNextDivision(); + } + return NULL; +} + /** + * @descr Get last division that has endnote + */ + LwpDocument* LwpDocument::GetLastDivisionThatHasEndnote() +{ + LwpDocument* pRoot = GetRootDocument(); + LwpDocument *pLastDoc = pRoot->GetLastDivisionWithContents(); + while(pLastDoc) + { + if(pLastDoc->GetEnSuperTableLayout()) + return pLastDoc; + pLastDoc = pLastDoc->GetPreviousDivisionWithContents(); + } + return NULL; + +} + /** + * @descr Get endnote supertable layout, every division has only one endnote supertable layout. + */ + LwpVirtualLayout* LwpDocument::GetEnSuperTableLayout() +{ + LwpHeadLayout* pHeadLayout =static_cast<LwpHeadLayout*>(GetFoundry()->GetLayout()->obj()); + if(pHeadLayout) + { + return pHeadLayout->FindEnSuperTableLayout(); + } + return NULL; +} + +/** + * @descr Get the numbers of page before pEndDivision, copy from lwp source code + */ + sal_Bool LwpDocument::GetNumberOfPages(LwpDocument* pEndDivision, sal_uInt16& nCount) +{ + if(this == pEndDivision) + return sal_True; + + LwpDivInfo* pDivInfo = static_cast<LwpDivInfo*>(m_DivInfo.obj()); + if(pDivInfo) + { + pDivInfo->GetNumberOfPages(nCount); + } + + LwpDocument* pDivision = GetFirstDivision(); + while(pDivision) + { + if(pDivision->GetNumberOfPages(pEndDivision,nCount)) + return sal_True; + pDivision = pDivision->GetNextDivision(); + + } + return sal_False; +} +/** + * @descr Get the numbers of page before curruent division + */ +sal_uInt16 LwpDocument::GetNumberOfPagesBefore() +{ + sal_uInt16 nPageNumber = 0; + LwpDocument* pRoot = GetRootDocument(); + if(pRoot) + pRoot->GetNumberOfPages(this,nPageNumber); + return nPageNumber; +} + /** + * @descr Get the numbers of page before this division + */ + sal_uInt16 LwpDocument::GetMaxNumberOfPages() +{ + sal_uInt16 nPageNumber = 0; + MaxNumberOfPages(nPageNumber); + return nPageNumber; +} + /** + * @descr Get Max number of pages + */ + void LwpDocument::MaxNumberOfPages(sal_uInt16& nNumPages) +{ + LwpDocument* pDivision = GetFirstDivision(); + + LwpDivInfo* pDivInfo = static_cast<LwpDivInfo*>(m_DivInfo.obj()); + if(pDivInfo) + nNumPages += pDivInfo->GetMaxNumberOfPages(); + while(pDivision) + { + pDivision->MaxNumberOfPages(nNumPages); + pDivision = pDivision->GetNextDivision(); + } +} + /** + * @descr Parse the frame which anchor is to page before parse other contents, + * This method is called when the document is root document. + */ +void LwpDocument::ParseFrameInPage(IXFStream * pOutputStream) +{ + if(IsChildDoc()) + return; + + XFContentContainer* pXFContainer = new XFContentContainer; + + XFConvertFrameInPage(pXFContainer); + + pXFContainer->ToXml(pOutputStream); + delete pXFContainer; + pXFContainer = NULL; +} + /** + * @descr Parse the frame which anchor is to page in the entire document + */ +void LwpDocument::XFConvertFrameInPage(XFContentContainer * pCont) +{ + LwpDocument* pDivision = GetFirstDivision(); + + LwpDivInfo* pDivInfo = static_cast<LwpDivInfo*> (GetDivInfoID()->obj()); + if(pDivInfo) + { + LwpPageLayout* pPageLayout =static_cast<LwpPageLayout*>(pDivInfo->GetInitialLayoutID()->obj()); + if(pPageLayout) + { + LwpStory* pStory = static_cast<LwpStory*>(pPageLayout->GetContent()->obj()); + if(pStory) + pStory->XFConvertFrameInPage(pCont); + } + } + while(pDivision) + { + pDivision->XFConvertFrameInPage(pCont); + pDivision = pDivision->GetNextDivision(); + } +} + /** + * @descr change click here to placeholder + */ +void LwpDocument::ChangeStyleName() +{ + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + XFTextStyle* pStyle = static_cast<XFTextStyle*>(pXFStyleManager->FindStyle(A2OUSTR("ClickHere"))); + if (pStyle) + { + pStyle->SetStyleName(A2OUSTR("Placeholder")); + } +} +LwpDocSock::LwpDocSock(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + :LwpDLNFVList(objHdr, pStrm) +{} + + /** + * @descr read VO_DOCSOCK from file + */ +void LwpDocSock::Read() +{ + LwpDLNFVList::Read(); + m_Doc.ReadIndexed(m_pObjStrm); + m_pObjStrm->SkipExtra(); +} + /** + * @descr register styles in documents plugged + */ +void LwpDocSock::RegisterStyle() +{ + LwpObject* pDoc = GetNext()->obj(); + if(pDoc) + pDoc->RegisterStyle(); + + pDoc = GetChildHead()->obj(); + if(pDoc) + pDoc->RegisterStyle(); +} + /** + * @descr parse contents of documents plugged + */ +void LwpDocSock::Parse(IXFStream* pOutputStream) +{ + LwpObject* pDoc = GetChildHead()->obj(); + if(pDoc) + pDoc->Parse(pOutputStream); + + pDoc = GetNext()->obj(); + if(pDoc) + pDoc->Parse(pOutputStream); +} diff --git a/lotuswordpro/source/filter/lwpdoc.hxx b/lotuswordpro/source/filter/lwpdoc.hxx new file mode 100644 index 000000000000..58e982f0ab52 --- /dev/null +++ b/lotuswordpro/source/filter/lwpdoc.hxx @@ -0,0 +1,248 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * LwpDocument header file + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + Jun 2005 Code cleaning by change some members to local variables in Read() + ************************************************************************/ + +#ifndef _LWPDOCUMENT_HXX +#define _LWPDOCUMENT_HXX + + +#include "lwpobj.hxx" +#include "lwpsortopt.hxx" +#include "lwpuidoc.hxx" +#include "lwplnopts.hxx" +#include "lwpusrdicts.hxx" +#include "lwpprtinfo.hxx" +#include "lwpdlvlist.hxx" +#include "lwpheader.hxx" +#include "lwpfoundry.hxx" + +class IXFStream; +class LwpVirtualLayout; +/** + * @brief Document object, represent document and division +*/ +class LwpDocument : public LwpDLNFPVList +{ +public: + LwpDocument(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpDocument(); + +private: + //Data members in file format + LwpObjectID m_DocSockID; + sal_uInt16 m_nFlags; + sal_uInt32 m_nPersistentFlags; + enum + { + DOC_PROTECTED = 0x00000004UL, + /*#define DOC_USECONTENTS 0x00000008UL + #define DOC_LOCKREVISIONS 0x00000200UL + #define DOC_LOCAL 0x00000400UL + */ + DOC_CHILDDOC = 0x00000800UL + /*#define DOC_DOPREVIEW 0x02000000UL + #define DOC_REBUILDENDNOTES 0x04000000UL + #define DOC_FILEPROTECTION 0x10000000UL + #define DOC_PERSISTENTBITS (DOC_PROTECTED | DOC_USECONTENTS | DOC_LOCKREVISIONS | DOC_LOCAL | DOC_CHILDDOC | DOC_DOPREVIEW | DOC_REBUILDENDNOTES | DOC_FILEPROTECTION) + */ + }; + + //Code cleaning by change some members to local variables in Read() + //Reserve the comments for future use + //LwpSortOption* m_pDocSort; + //LwpUIDocument* m_pUIDoc; + LwpLineNumberOptions* m_pLnOpts; + //LwpUserDictFiles* m_pUsrDicts; + //LwpPrinterInfo* m_pPrtInfo; + + LwpObjectID m_DivOpts; + LwpObjectID m_FootnoteOpts; + LwpObjectID m_DocData; + LwpObjectID m_DivInfo; + LwpAtomHolder m_Epoch; + + LwpObjectID m_WYSIWYGPageHints; + LwpObjectID m_VerDoc; + LwpObjectID m_STXInfo; + +protected: + void Read(); + void ReadPlug(); + void ParseDocContent(IXFStream* pOutputStream); + void RegisterTextStyles(); + void RegisterLayoutStyles(); + + void RegisterStylesInPara(); + void RegisterBulletStyles(); + void RegisterGraphicsStyles(); + void RegisterLinenumberStyles(); + void RegisterFootnoteStyles(); + void RegisterDefaultParaStyles(); + void ParseMasterDoc(IXFStream* pOutputStream); + +public: + void Parse(IXFStream* pOutputStream); + void RegisterStyle(); + + inline sal_Bool IsChildDoc(); + inline sal_Bool HonorProtection(); + inline LwpObjectID* GetContentList(); + inline LwpObjectID* GetDocData(); + inline LwpObjectID* GetSocket(); + + inline LwpFoundry* GetFoundry(); + inline LwpObjectID* GetDivInfoID(); + inline LwpObjectID* GetPageHintsID(); + inline LwpObjectID* GetFootnoteOpts(); + inline LwpObjectID* GetVerDoc(); + LwpObjectID* GetValidFootnoteOpts(); + + sal_uInt16 GetEndnoteType(); + LwpDocument* GetPreviousDivision(); + LwpDocument* GetNextDivision(); + LwpDocument* GetParentDivision(); + LwpDocument* GetPreviousInGroup(); + + LwpDocument* GetNextInGroup(); + LwpDocument* GetPreviousDivisionWithContents(); + LwpDocument* GetLastDivisionWithContents(); + LwpDocument* GetLastInGroupWithContents(); + LwpDocument* GetRootDocument(); + LwpDocument* GetFirstDivisionWithContentsThatIsNotOLE(); + LwpDocument* GetLastDivisionThatHasEndnote(); + + LwpDocument* GetLastDivision(); + LwpDocument* GetFirstDivision(); + LwpVirtualLayout* GetEnSuperTableLayout(); + sal_Bool GetNumberOfPages(LwpDocument* pEndDivision, sal_uInt16& nCount); + sal_uInt16 GetMaxNumberOfPages(); + + sal_uInt16 GetNumberOfPagesBefore(); + void ParseFrameInPage(IXFStream* pOutputStream); + +private: + void MaxNumberOfPages(sal_uInt16& nNumPages); + void XFConvertFrameInPage(XFContentContainer* pCont); + void ChangeStyleName(); + sal_Bool IsSkippedDivision();//add by +}; + +inline sal_Bool LwpDocument::IsChildDoc() +{ + return (sal_Bool) ((m_nPersistentFlags & DOC_CHILDDOC) ? TRUE : FALSE); +} +inline sal_Bool LwpDocument::HonorProtection() +{ + return m_nPersistentFlags & DOC_PROTECTED ? sal_True : sal_False; +} +inline LwpObjectID* LwpDocument::GetContentList() +{ + return(m_pFoundry->GetContentManager()->GetContentList()); +} +inline LwpObjectID* LwpDocument::GetSocket() +{ + return &m_DocSockID; +} +inline LwpFoundry* LwpDocument::GetFoundry() +{ + return m_pFoundry; +} +inline LwpObjectID* LwpDocument::GetDivInfoID() +{ + return &m_DivInfo; +} +inline LwpObjectID* LwpDocument::GetPageHintsID() +{ + return &m_WYSIWYGPageHints; +} +inline LwpObjectID* LwpDocument::GetFootnoteOpts() +{ + return &m_FootnoteOpts; +} +inline LwpObjectID* LwpDocument::GetDocData() +{ + return &m_DocData; +} +inline LwpObjectID* LwpDocument::GetVerDoc() +{ + return &m_VerDoc; +} + +/** + * @brief DocumentSock object, divisions are embedded by document socket object +*/ +class LwpDocSock : public LwpDLNFVList +{ +public: + LwpDocSock(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpDocSock(){}; +private: + LwpObjectID m_Doc; +protected: + void Read(); +public: + void RegisterStyle(); + void Parse(IXFStream* pOutputStream); +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpdocdata.cxx b/lotuswordpro/source/filter/lwpdocdata.cxx new file mode 100644 index 000000000000..41a42d667377 --- /dev/null +++ b/lotuswordpro/source/filter/lwpdocdata.cxx @@ -0,0 +1,395 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "lwpdocdata.hxx" +#include "xfilter/xfofficemeta.hxx" +#include "localtime.hxx" +#include <rtl/ustrbuf.hxx> +#include "lwpfilehdr.hxx" +#include "lwpglobalmgr.hxx" + +//std::map<sal_uInt16,LwpEditorAttr*> LwpDocData::m_EditorAttrMap; + +LwpDocData::LwpDocData(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + :LwpObject(objHdr, pStrm)//m_pEditorAttrList(0) +{} + +LwpDocData::~LwpDocData() +{ +} +void LwpDocData::SkipExtra(LwpSvStream* pStream) +{ + sal_uInt16 extra; + pStream->Read(&extra,2); + while(extra != 0) + { + pStream->SeekRel(extra); + pStream->Read(&extra,2); + } +} +void LwpDocData::SkipAtomHandler(LwpSvStream* pStream) +{ + sal_uInt16 disksize; + sal_uInt16 len; + pStream->Read(&disksize,2); + pStream->Read(&len,2); + if(len)pStream->SeekRel(disksize-2); +} +void LwpDocData::Read() +{ + //XFDateTime + ////////////////////////////////////////////////////////////////////////// + //doc options + //cOptionFlag + m_DocOptions.nOptionFlag = m_pObjStrm->QuickReaduInt16(); + //cEncrypt1Password + m_DocOptions.encrypt1password.Read(m_pObjStrm); + //cEncrypt2Password + m_DocOptions.encrypt2password.Read(m_pObjStrm); + //cCharecterSet + m_DocOptions.characterSet.Read(m_pObjStrm); + //cGrammerSet + m_DocOptions.grammerSet.Read(m_pObjStrm); + //cShowMarginMarks + m_DocOptions.nMarginMarks = m_pObjStrm->QuickReaduInt16(); + //cMarginMarksLocation + m_DocOptions.nMarginMarksLocation = m_pObjStrm->QuickReaduInt16(); + //cMarginMarksChar + m_DocOptions.nMarginMarksChar = m_pObjStrm->QuickReaduInt16(); + m_pObjStrm->SkipExtra(); + ////////////////////////////////////////////////////////////////////////// + //doc info + //cDescription + m_DocInfo.description.Read(m_pObjStrm); + //cKeyWord + m_DocInfo.keywords.Read(m_pObjStrm); + //cCreatedBy + m_DocInfo.createdBy.Read(m_pObjStrm); + //cCreationTime + m_DocInfo.nCreationTime = m_pObjStrm->QuickReadInt32(); + LtgLocalTime(m_DocInfo.nCreationTime,m_nCreationTime); + //cLastRevisionTime + m_DocInfo.nLastRevisionTime = m_pObjStrm->QuickReadInt32(); + LtgLocalTime(m_DocInfo.nLastRevisionTime,m_nLastRevisionTime); + //cTotalEditTime + m_DocInfo.nTotalEditTime = m_pObjStrm->QuickReadInt32(); + + m_nTotalEditTime.tm_hour = m_DocInfo.nTotalEditTime / 60; + m_nTotalEditTime.tm_min = m_DocInfo.nTotalEditTime % 60; + m_nTotalEditTime.tm_sec = 0; + //cpVerDocInfo + m_DocInfo.cpVerDocInfo.ReadIndexed(m_pObjStrm); + + //EditorList + m_DocInfo.nNumEditedBy = m_pObjStrm->QuickReaduInt16(); + LwpAtomHolder* pCDLNList = new LwpAtomHolder[m_DocInfo.nNumEditedBy]; + LwpAtomHolder* pEditorList = new LwpAtomHolder[m_DocInfo.nNumEditedBy]; + sal_uInt16 i = 0; + for ( i = 0; i < m_DocInfo.nNumEditedBy; i++) + { + //CDLNList + pCDLNList[i].Read(m_pObjStrm); //cName + m_pObjStrm->SkipExtra(); + //CEditedBy + pEditorList[i].Read(m_pObjStrm); //cName + m_pObjStrm->SkipExtra(); + } + + m_pObjStrm->SkipExtra(); + + delete [] pCDLNList; + delete [] pEditorList; + ////////////////////////////////////////////////////////////////////////// + //doc control + //cGreeting + m_DocControl.cGreeting.Read(m_pObjStrm); + //cFlags + m_DocControl.nFlags = m_pObjStrm->QuickReaduInt16(); + + //cDocControlProtection + m_DocControl.nDocControlProtection = m_pObjStrm->QuickReaduInt16(); + //Len + m_DocControl.nLen1 = m_pObjStrm->QuickReaduInt16(); + //skip doc control password string + m_pObjStrm->SeekRel(m_DocControl.nLen1); + + //cFileProtection + m_DocControl.nFileProtection = m_pObjStrm->QuickReaduInt16(); + //Len + m_DocControl.nLen2 = m_pObjStrm->QuickReaduInt16(); + //skip file password string + m_pObjStrm->SeekRel(m_DocControl.nLen2); + + //cAutoVersioning + m_DocControl.nAutoVersioning = m_pObjStrm->QuickReaduInt16(); + //cDocControlOnlyEditor + m_DocControl.cDocControlOnlyEditor.Read(m_pObjStrm); + //cEditorVerification + m_DocControl.nEditorVerification = m_pObjStrm->QuickReaduInt16(); + + m_pObjStrm->SkipExtra(); + ////////////////////////////////////////////////////////////////////////// + //editor list + //numeditors + sal_uInt16 numeditors = m_pObjStrm->QuickReaduInt16(); + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + + for (i = 0;i<numeditors;i++) + { + LwpEditorAttr* pEditorAttr = new LwpEditorAttr; + //cName + pEditorAttr->cName.Read(m_pObjStrm); + //cInitials + pEditorAttr->cInitials.Read(m_pObjStrm); + //cHiLite + pEditorAttr->cHiLiteColor.Read(m_pObjStrm); + + //cID + pEditorAttr->nID = m_pObjStrm->QuickReaduInt16(); + + //cInsFontOver + //CFontAttributeOverride --cAttrBits + pEditorAttr->cInsFontOver.cFontAttributeOverride.cAttrBits = m_pObjStrm->QuickReaduInt16(); + //CFontAttributeOverride --cAttrOverrideBits + pEditorAttr->cInsFontOver.cFontAttributeOverride.cAttrOverrideBits = m_pObjStrm->QuickReaduInt16(); + //CFontAttributeOverride --cAttrApplyBits + pEditorAttr->cInsFontOver.cFontAttributeOverride.cAttrApplyBits = m_pObjStrm->QuickReaduInt16(); + //CFontAttributeOverride --cAttrOverrideBits2 + pEditorAttr->cInsFontOver.cFontAttributeOverride.cAttrOverrideBits2 = m_pObjStrm->QuickReaduInt8(); + //CFontAttributeOverride --cAttrApplyBits2 + pEditorAttr->cInsFontOver.cFontAttributeOverride.cAttrApplyBits2 = m_pObjStrm->QuickReaduInt8(); + //CFontAttributeOverride --cCase + pEditorAttr->cInsFontOver.cFontAttributeOverride.cCase = m_pObjStrm->QuickReaduInt8(); + //CFontAttributeOverride --cUnder + pEditorAttr->cInsFontOver.cFontAttributeOverride.cUnder = m_pObjStrm->QuickReaduInt8(); + m_pObjStrm->SkipExtra(); + //CFontDescriptionOverrideBase--cOverrideBits + pEditorAttr->cInsFontOver.cFontDescriptionOverrideBase.cOverrideBits = m_pObjStrm->QuickReaduInt8(); + //CFontDescriptionOverrideBase--cApplyBits + pEditorAttr->cInsFontOver.cFontDescriptionOverrideBase.cApplyBits = m_pObjStrm->QuickReaduInt8(); + //CFontDescriptionOverrideBase--cPointSize + pEditorAttr->cInsFontOver.cFontDescriptionOverrideBase.cPointSize = m_pObjStrm->QuickReadInt32(); + //CFontDescriptionOverrideBase--cOverstrike + pEditorAttr->cInsFontOver.cFontDescriptionOverrideBase.cOverstrike = m_pObjStrm->QuickReaduInt8(); + //CFontDescriptionOverrideBase--cTightness + pEditorAttr->cInsFontOver.cFontDescriptionOverrideBase.cTightness = m_pObjStrm->QuickReaduInt16(); + //CFontDescriptionOverrideBase--cColor + pEditorAttr->cInsFontOver.cFontDescriptionOverrideBase.cColor.Read(m_pObjStrm); + + //CFontDescriptionOverrideBase--cBackgroundColor + pEditorAttr->cInsFontOver.cFontDescriptionOverrideBase.cBackgroundColor.Read(m_pObjStrm); + + m_pObjStrm->SkipExtra(); + //cFaceName + pEditorAttr->cInsFontOver.cFaceName.Read(m_pObjStrm); + //cAltFaceName + pEditorAttr->cInsFontOver.cAltFaceName.Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); + + //cDelFontOver + //CFontAttributeOverride --cAttrBits + pEditorAttr->cDelFontOver.cFontAttributeOverride.cAttrBits = m_pObjStrm->QuickReaduInt16(); + //CFontAttributeOverride --cAttrOverrideBits + pEditorAttr->cDelFontOver.cFontAttributeOverride.cAttrOverrideBits = m_pObjStrm->QuickReaduInt16(); + //CFontAttributeOverride --cAttrApplyBits + pEditorAttr->cDelFontOver.cFontAttributeOverride.cAttrApplyBits = m_pObjStrm->QuickReaduInt16(); + //CFontAttributeOverride --cAttrOverrideBits2 + pEditorAttr->cDelFontOver.cFontAttributeOverride.cAttrOverrideBits2 = m_pObjStrm->QuickReaduInt8(); + //CFontAttributeOverride --cAttrApplyBits2 + pEditorAttr->cDelFontOver.cFontAttributeOverride.cAttrApplyBits2 = m_pObjStrm->QuickReaduInt8(); + //CFontAttributeOverride --cCase + pEditorAttr->cDelFontOver.cFontAttributeOverride.cCase = m_pObjStrm->QuickReaduInt8(); + //CFontAttributeOverride --cUnder + pEditorAttr->cDelFontOver.cFontAttributeOverride.cUnder = m_pObjStrm->QuickReaduInt8(); + m_pObjStrm->SkipExtra(); + //CFontDescriptionOverrideBase--cOverrideBits + pEditorAttr->cDelFontOver.cFontDescriptionOverrideBase.cOverrideBits = m_pObjStrm->QuickReaduInt8(); + //CFontDescriptionOverrideBase--cApplyBits + pEditorAttr->cDelFontOver.cFontDescriptionOverrideBase.cApplyBits = m_pObjStrm->QuickReaduInt8(); + //CFontDescriptionOverrideBase--cPointSize + pEditorAttr->cDelFontOver.cFontDescriptionOverrideBase.cPointSize = m_pObjStrm->QuickReadInt32(); + //CFontDescriptionOverrideBase--cOverstrike + pEditorAttr->cDelFontOver.cFontDescriptionOverrideBase.cOverstrike = m_pObjStrm->QuickReaduInt8(); + //CFontDescriptionOverrideBase--cTightness + pEditorAttr->cDelFontOver.cFontDescriptionOverrideBase.cTightness = m_pObjStrm->QuickReaduInt16(); + //CFontDescriptionOverrideBase--cColor + pEditorAttr->cDelFontOver.cFontDescriptionOverrideBase.cColor.Read(m_pObjStrm); + + //CFontDescriptionOverrideBase--cBackgroundColor + pEditorAttr->cDelFontOver.cFontDescriptionOverrideBase.cBackgroundColor.Read(m_pObjStrm); + + m_pObjStrm->SkipExtra(); + //cFaceName + pEditorAttr->cDelFontOver.cFaceName.Read(m_pObjStrm); + //cAltFaceName + pEditorAttr->cDelFontOver.cAltFaceName.Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); + + //cAbilities + pEditorAttr->nAbilities = m_pObjStrm->QuickReaduInt16(); + //cLocks + pEditorAttr->nLocks = m_pObjStrm->QuickReaduInt16(); + //cSuggestions + pEditorAttr->nSuggestions = m_pObjStrm->QuickReaduInt16(); + + //cDelTextAttr + //m_pEditorAttrList[i].cDelTextAttr.Read(m_pObjStrm); + if (m_pObjStrm->QuickReadBool()) + { + pEditorAttr->cDelTextAttr.cOverride.cValues = m_pObjStrm->QuickReaduInt16(); + pEditorAttr->cDelTextAttr.cOverride.cOverride = m_pObjStrm->QuickReaduInt16(); + pEditorAttr->cDelTextAttr.cOverride.cApply = m_pObjStrm->QuickReaduInt16(); + m_pObjStrm->SkipExtra(); + pEditorAttr->cDelTextAttr.cHideLevels = m_pObjStrm->QuickReaduInt16(); + + if (LwpFileHeader::m_nFileRevision>= 0x000b) + { + pEditorAttr->cDelTextAttr.cBaselineOffset = m_pObjStrm->QuickReadInt32(); + } + else + { + pEditorAttr->cDelTextAttr.cBaselineOffset = 0; + } + } + m_pObjStrm->SkipExtra(); + + m_pObjStrm->SkipExtra(); + + pGlobal->SetEditorAttrMap(pEditorAttr->nID, pEditorAttr); + } +} +rtl::OUString LwpDocData::DateTimeToOUString(LtTm& dt) +{ + rtl::OUStringBuffer buf; + buf.append((sal_Int32)dt.tm_year); + buf.append( A2OUSTR("-") ); + buf.append((sal_Int32)dt.tm_mon); + buf.append( A2OUSTR("-") ); + buf.append((sal_Int32)dt.tm_mday); + buf.append( A2OUSTR("T") ); + buf.append((sal_Int32)dt.tm_hour); + buf.append( A2OUSTR(":") ); + buf.append((sal_Int32)dt.tm_min); + buf.append( A2OUSTR(":") ); + buf.append((sal_Int32)dt.tm_sec); + buf.append( A2OUSTR(".") ); + buf.append((sal_Int32)0); + + return buf.makeStringAndClear(); +} +rtl::OUString LwpDocData::TimeToOUString(LtTm& dt) +{ + //PT3H43M44S + rtl::OUStringBuffer buf; + buf.append( A2OUSTR("PT") ); + buf.append((sal_Int32)dt.tm_hour); + buf.append( A2OUSTR("H") ); + buf.append((sal_Int32)dt.tm_min); + buf.append( A2OUSTR("M") ); + buf.append((sal_Int32)dt.tm_sec); + buf.append( A2OUSTR("S") ); + + return buf.makeStringAndClear(); +} +void LwpDocData::Parse(IXFStream *pOutputStream) +{ + //<!DOCTYPE office:document-meta PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "office.dtd"> + //<office:document-meta xmlns:office="http://openoffice.org/2000/office" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="http://openoffice.org/2000/meta" office:version="1.0"> + //</office:document-meta> + XFOfficeMeta xfMeta; + xfMeta.SetCreator(m_DocInfo.createdBy.str()); + xfMeta.SetDescription(m_DocInfo.description.str()); + xfMeta.SetKeywords(m_DocInfo.keywords.str()); + xfMeta.SetCreationTime(DateTimeToOUString(m_nCreationTime)); + xfMeta.SetLastTime(DateTimeToOUString(m_nLastRevisionTime)); + xfMeta.SetEditTime(TimeToOUString(m_nTotalEditTime)); + xfMeta.ToXml(pOutputStream); +} +/* +OUString LwpDocData::GetEditorName(sal_uInt8 nID) +{ + std::map<sal_uInt16,LwpEditorAttr*>::iterator iter; + iter = m_EditorAttrMap.find(nID); + if (iter != m_EditorAttrMap.end()) + return iter->second->cName.str(); + return A2OUSTR(""); +} + +XFColor LwpDocData::GetHighLightColor(sal_uInt8 nID) +{ + std::map<sal_uInt16,LwpEditorAttr*>::iterator iter; + + iter = m_EditorAttrMap.find(nID); + if (iter != m_EditorAttrMap.end()) + { + LwpColor aLwpColor = iter->second->cHiLiteColor; + XFColor aColor(aLwpColor.GetRed(),aLwpColor.GetGreen(),aLwpColor.GetBlue()); + return aColor; + } + else + { + XFColor aColor(255,255,0);//yellow + return aColor; + } +} +void LwpDocData::Reset() +{ + std::map<sal_uInt16,LwpEditorAttr*>::iterator iter; + for (iter =m_EditorAttrMap.begin();iter != m_EditorAttrMap.end(); iter++) + { + delete iter->second; + iter->second = NULL; + } + m_EditorAttrMap.clear(); +}*/ diff --git a/lotuswordpro/source/filter/lwpdocdata.hxx b/lotuswordpro/source/filter/lwpdocdata.hxx new file mode 100644 index 000000000000..91c1f8498978 --- /dev/null +++ b/lotuswordpro/source/filter/lwpdocdata.hxx @@ -0,0 +1,191 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef LWPDOCDATA_HXX_ +#define LWPDOCDATA_HXX_ +#include "lwpobj.hxx" +#include "lwpatomholder.hxx" +#include "localtime.hxx" +#include "lwpcolor.hxx" +#include "xfilter/xfcolor.hxx" +#include <map> + +struct LwpDocOptions +{ + sal_uInt16 nOptionFlag; + LwpAtomHolder encrypt1password; + LwpAtomHolder encrypt2password; + LwpAtomHolder characterSet; + LwpAtomHolder grammerSet; + sal_uInt16 nMarginMarks; + sal_uInt16 nMarginMarksLocation; + sal_uInt16 nMarginMarksChar; +}; +struct LwpDocInfo +{ + LwpAtomHolder description; + LwpAtomHolder keywords; + LwpAtomHolder createdBy; + sal_Int32 nCreationTime; + sal_Int32 nLastRevisionTime; + sal_Int32 nTotalEditTime; + LwpObjectID cpVerDocInfo; + sal_uInt16 nNumEditedBy; + //skip editor list +}; +struct LwpDocControl +{ + LwpAtomHolder cGreeting; + sal_uInt16 nFlags; + sal_uInt16 nDocControlProtection; + sal_uInt16 nLen1; + //skip doc control password string + sal_uInt16 nFileProtection; + sal_uInt16 nLen2; + //skip file password string + sal_uInt16 nAutoVersioning; + LwpAtomHolder cDocControlOnlyEditor; + sal_uInt16 nEditorVerification; +}; +struct lcolor +{ + sal_uInt16 cred; // When extra is AGLRGB_INDEX, cred holds the + sal_uInt16 cgreen; // hi 16 bits and cgreen holds the lo 16 bits of + sal_uInt16 cblue; // the 32-bit LUT index. + sal_uInt16 cextra; +}; +struct LwpFontDescriptionOverrideBase +{ + sal_uInt8 cOverrideBits; + sal_uInt8 cApplyBits; + sal_Int32 cPointSize; + sal_uInt8 cOverstrike; + sal_uInt16 cTightness; + //lcolor cColor; + //lcolor cBackgroundColor; + LwpColor cColor; + LwpColor cBackgroundColor; +}; +struct LwpFontAttributeOverride +{ + sal_uInt16 cAttrBits; + sal_uInt16 cAttrOverrideBits; + sal_uInt16 cAttrApplyBits; + sal_uInt8 cAttrOverrideBits2; + sal_uInt8 cAttrApplyBits2; + sal_uInt8 cCase; + sal_uInt8 cUnder; +}; +struct LwpFontDescriptionOverride +{ + LwpFontAttributeOverride cFontAttributeOverride; + LwpFontDescriptionOverrideBase cFontDescriptionOverrideBase; + LwpAtomHolder cFaceName; + LwpAtomHolder cAltFaceName; +}; +struct LwpOverrideOg +{ + sal_uInt16 cValues; + sal_uInt16 cOverride; + sal_uInt16 cApply; +}; +struct LwpTextAttributeOverrideOg +{ + LwpOverrideOg cOverride; + sal_uInt16 cHideLevels; + sal_Int32 cBaselineOffset; +}; +struct LwpEditorAttr +{ + LwpAtomHolder cName; + LwpAtomHolder cInitials; + LwpColor cHiLiteColor; + sal_uInt16 nID; + LwpFontDescriptionOverride cInsFontOver; + LwpFontDescriptionOverride cDelFontOver; + sal_uInt16 nAbilities; + sal_uInt16 nLocks; + sal_uInt16 nSuggestions; + LwpTextAttributeOverrideOg cDelTextAttr; +}; +class LwpDocData : public LwpObject +{ +public: + LwpDocData(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpDocData(); +private: + LwpDocOptions m_DocOptions; + LwpDocInfo m_DocInfo; + LwpDocControl m_DocControl; +// static std::map<sal_uInt16,LwpEditorAttr*> m_EditorAttrMap; +private: + LtTm m_nCreationTime; + LtTm m_nLastRevisionTime; + LtTm m_nTotalEditTime; +private: + void SkipExtra(LwpSvStream* pStream); + void SkipAtomHandler(LwpSvStream* pStream); + rtl::OUString DateTimeToOUString(LtTm& dt); + rtl::OUString TimeToOUString(LtTm& dt); + +public: + //inline sal_uInt8* GetBuffer(){return m_DataBuffer;} + void Read(); + void Parse(IXFStream *pOutputStream); +// LwpEditorAttr* GetEditorList(){return m_pEditorAttrList;} + //static OUString GetEditorName(sal_uInt8 nID); + //static XFColor GetHighLightColor(sal_uInt8 nID); + //static void Reset(); +}; +#endif diff --git a/lotuswordpro/source/filter/lwpdrawobj.cxx b/lotuswordpro/source/filter/lwpdrawobj.cxx new file mode 100644 index 000000000000..13c25dbf62db --- /dev/null +++ b/lotuswordpro/source/filter/lwpdrawobj.cxx @@ -0,0 +1,1551 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * Implementation file of LwpDrawObjcts and associated class like LwpDrawGroup, LwpDrawRectange + * and so on. + */ +#include "lwpglobalmgr.hxx" +#include "lwpdrawobj.hxx" +#include "lwptools.hxx" +#include <tools/stream.hxx> + +#include "xfilter/xfframe.hxx" + +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xfdrawstyle.hxx" +#include "xfilter/xftextstyle.hxx" +#include "xfilter/xfparastyle.hxx" +#include "xfilter/xfimagestyle.hxx" +#include "xfilter/xftextboxstyle.hxx" +#include "xfilter/xfparagraph.hxx" +#include "xfilter/xftextspan.hxx" +#include "xfilter/xffont.hxx" + +#include "xfilter/xfdrawrect.hxx" +#include "xfilter/xfdrawpath.hxx" +#include "xfilter/xfdrawline.hxx" +#include "xfilter/xfdrawpolygon.hxx" +#include "xfilter/xfdrawellipse.hxx" +#include "xfilter/xfdrawcircle.hxx" +#include "xfilter/xfimage.hxx" + +#include "lwpcharsetmgr.hxx" +#include "lwpsdwrect.hxx" + +/** + * @descr Constructor of class LwpDrawObj + * @param pStream The memory stream which contains the lwp-sdw draw objects + */ +LwpDrawObj::LwpDrawObj(SvStream * pStream, DrawingOffsetAndScale* pTransData) : +m_pStream(pStream), m_pTransData(pTransData), m_eType(OT_UNDEFINED) +{ + this->ReadObjHeaderRecord(); +} + +/** + * @descr read the header record data of lwp-sdw-object + */ +void LwpDrawObj::ReadObjHeaderRecord() +{ + //flags + m_pStream->SeekRel(1); + + //record Length + m_pStream->Read(&m_aObjHeader.nRecLen, sizeof(m_aObjHeader.nRecLen)); + + //boundrect + m_pStream->Read(&m_aObjHeader.nLeft, sizeof(m_aObjHeader.nLeft)); + m_pStream->Read(&m_aObjHeader.nTop, sizeof(m_aObjHeader.nTop)); + m_pStream->Read(&m_aObjHeader.nRight, sizeof(m_aObjHeader.nRight)); + m_pStream->Read(&m_aObjHeader.nBottom, sizeof(m_aObjHeader.nBottom)); + + //nextObj, prevObj + m_pStream->SeekRel(4); +} + +/** + * @descr read the style of closed lwp-sdw-object like: rectangle, ellipse and so on. + */ +void LwpDrawObj::ReadClosedObjStyle() +{ + if ((m_eType != OT_POLYGON) && (m_eType != OT_TEXTART)) + { + m_pStream->SeekRel(8); + } + + m_pStream->Read(&m_aClosedObjStyleRec.nLineWidth, sizeof(m_aClosedObjStyleRec.nLineWidth)); + m_pStream->Read(&m_aClosedObjStyleRec.nLineStyle, sizeof(m_aClosedObjStyleRec.nLineStyle)); + + // pen color + m_pStream->Read(&m_aClosedObjStyleRec.aPenColor.nR, 1); + m_pStream->Read(&m_aClosedObjStyleRec.aPenColor.nG, 1); + m_pStream->Read(&m_aClosedObjStyleRec.aPenColor.nB, 1); + m_pStream->Read(&m_aClosedObjStyleRec.aPenColor.unused, 1); + + // foreground color + m_pStream->Read(&m_aClosedObjStyleRec.aForeColor.nR, 1); + m_pStream->Read(&m_aClosedObjStyleRec.aForeColor.nG, 1); + m_pStream->Read(&m_aClosedObjStyleRec.aForeColor.nB, 1); + m_pStream->Read(&m_aClosedObjStyleRec.aForeColor.unused, 1); + + // background color + m_pStream->Read(&m_aClosedObjStyleRec.aBackColor.nR, 1); + m_pStream->Read(&m_aClosedObjStyleRec.aBackColor.nG, 1); + m_pStream->Read(&m_aClosedObjStyleRec.aBackColor.nB, 1); + m_pStream->Read(&m_aClosedObjStyleRec.aBackColor.unused, 1); + + // fill style + m_pStream->Read(&m_aClosedObjStyleRec.nFillType, sizeof(m_aClosedObjStyleRec.nFillType)); + m_pStream->Read(m_aClosedObjStyleRec.pFillPattern, sizeof(m_aClosedObjStyleRec.pFillPattern)); +} + +/** + * @descr set fill style of drawing objects + * @param pStyle pointer of the drawing xfstyle. + */ +void LwpDrawObj::SetFillStyle(XFDrawStyle* pStyle) +{ + if (!pStyle) + { + assert(false); + return; + } + + XFColor aForeColor(m_aClosedObjStyleRec.aForeColor.nR, + m_aClosedObjStyleRec.aForeColor.nG, m_aClosedObjStyleRec.aForeColor.nB); + XFColor aBackColor(m_aClosedObjStyleRec.aBackColor.nR, + m_aClosedObjStyleRec.aBackColor.nG, m_aClosedObjStyleRec.aBackColor.nB); + + switch (m_aClosedObjStyleRec.nFillType) + { + default: //fall through! + case FT_TRANSPARENT: + { + // set fill style : none + break; + } + case FT_SOLID: + { + pStyle->SetAreaColor(aForeColor); + break; + } + case FT_HORZHATCH: + { + pStyle->SetAreaColor(aBackColor); + pStyle->SetAreaLineStyle(enumXFAreaLineSingle, 0, 0.12, aForeColor); + break; + } + case FT_VERTHATCH: + { + pStyle->SetAreaColor(aBackColor); + pStyle->SetAreaLineStyle(enumXFAreaLineSingle, 90, 0.12, aForeColor); + break; + } + case FT_FDIAGHATCH: + { + pStyle->SetAreaColor(aBackColor); + pStyle->SetAreaLineStyle(enumXFAreaLineSingle, 135, 0.09, aForeColor); + break; + } + case FT_BDIAGHATCH: + { + pStyle->SetAreaColor(aBackColor); + pStyle->SetAreaLineStyle(enumXFAreaLineSingle, 45, 0.09, aForeColor); + break; + } + case FT_CROSSHATCH: + { + pStyle->SetAreaColor(aBackColor); + pStyle->SetAreaLineStyle(enumXFAreaLineCrossed, 0, 0.12, aForeColor); + break; + } + case FT_DIAGCROSSHATCH: + { + pStyle->SetAreaColor(aBackColor); + pStyle->SetAreaLineStyle(enumXFAreaLineCrossed, 45, 0.095, aForeColor); + break; + } + } +} + +/** + * @descr set line/border style of drawing objects. + * @param pStyle pointer of the drawing xfstyle. + * @param nWidth width of line/border. + * @param nLineStyle flag of line/border style: none, dot or solid. + * @param rColor color of line/border. + */ +void LwpDrawObj::SetLineStyle(XFDrawStyle* pStyle, sal_uInt8 nWidth, sal_uInt8 nLineStyle, + const SdwColor& rColor) +{ + if (!pStyle) + { + assert(false); + return; + } + if (nWidth == 0) + { + nLineStyle = LS_NULL; + } + + if (nLineStyle == LS_NULL) + { + // set stroke:none + return; + } + + if (nLineStyle == LS_DOT) + { + pStyle->SetLineDashStyle(enumXFLineDash, 1, 1, 0.05, 0.05, 0.05); + } + + // line width + double fWidth = (double)nWidth/TWIPS_PER_CM; + + // line color + XFColor aXFColor(rColor.nR, rColor.nG, rColor.nB); + + pStyle->SetLineStyle(fWidth, aXFColor); +} + +/** + * @descr set position of a drawing object in the frame. + * @param pObj pointer of the xf-drawing object + */ +void LwpDrawObj::SetPosition(XFFrame* pObj) +{ + double fOffsetX = 0.00, fOffsetY = 0.00; + double fScaleX = 1.00, fScaleY = 1.00; + if (m_pTransData) + { + fOffsetX = m_pTransData->fOffsetX; + fOffsetY = m_pTransData->fOffsetY; + fScaleX = m_pTransData->fScaleX; + fScaleY = m_pTransData->fScaleY; + } + + pObj->SetPosition((double)m_aObjHeader.nLeft/TWIPS_PER_CM * fScaleX+ fOffsetX, + (double)m_aObjHeader.nTop/TWIPS_PER_CM * fScaleY + fOffsetY, + (double)(m_aObjHeader.nRight-m_aObjHeader.nLeft)/TWIPS_PER_CM * fScaleX, + (double)(m_aObjHeader.nBottom-m_aObjHeader.nTop)/TWIPS_PER_CM * fScaleY); +} + +/** + * @descr set arrowhead of a xf-drawing object. only opened drawing objects can be assigned arrowheads + * @param pOpenedObjStyle the xf-drawing object which will be set arrowhead. + * @param nArrowFlag arrowhead flags of the object. + */ +void LwpDrawObj::SetArrowHead(XFDrawStyle* pOpenedObjStyle, sal_uInt8 nArrowFlag, sal_uInt8 nLineWidth) +{ + // no arrowhead + if (!nArrowFlag) + { + return; + } + + if (!pOpenedObjStyle) + { + assert(false); + return; + } + + // arrowhead flag of an object's start side + sal_uInt8 nLeftArrow = nArrowFlag & 0x0F; + + // arrowhead flag of an object's end side + sal_uInt8 nRightArrow = (nArrowFlag & 0xF0) >> 4; + + double fWidth_inch = (double)nLineWidth/TWIPS_PER_CM; + double fArrowSize_inch = fWidth_inch + 0.08; + double fArrowSize = fArrowSize_inch * CM_PER_INCH; + + if (nLeftArrow) + { + pOpenedObjStyle->SetArrowStart( this->GetArrowName(nLeftArrow), fArrowSize, sal_True); + } + if (nRightArrow) + { + pOpenedObjStyle->SetArrowEnd( this->GetArrowName(nRightArrow), fArrowSize, sal_True); + } + +} + +/** + * @descr get arrow style name according to the flag. + * @param nArrowStyle style of the arrowhead. + * @return nWhichSide style name of the arrowhead. + */ +rtl::OUString LwpDrawObj::GetArrowName(sal_uInt8 nArrowStyle) +{ + // style name of arrowhead + rtl::OUString aArrowName; + + switch(nArrowStyle) + { + default: + case AH_ARROW_FULLARROW: + aArrowName = rtl::OUString::createFromAscii("Symmetric arrow"); + break; + case AH_ARROW_HALFARROW: + aArrowName = rtl::OUString::createFromAscii("Arrow concave"); + break; + case AH_ARROW_LINEARROW: + aArrowName = rtl::OUString::createFromAscii("arrow100"); + break; + case AH_ARROW_INVFULLARROW: + aArrowName = rtl::OUString::createFromAscii("reverse arrow"); + break; + case AH_ARROW_INVHALFARROW: + aArrowName = rtl::OUString::createFromAscii("reverse concave arrow"); + break; + case AH_ARROW_INVLINEARROW: + aArrowName = rtl::OUString::createFromAscii("reverse line arrow"); + break; + case AH_ARROW_TEE: + aArrowName = rtl::OUString::createFromAscii("Dimension lines"); + break; + case AH_ARROW_SQUARE: + aArrowName = rtl::OUString::createFromAscii("Square"); + break; + case AH_ARROW_CIRCLE: + aArrowName = rtl::OUString::createFromAscii("Circle"); + break; + } + + return aArrowName; +} + +/** + * @descr template method of creating drawing object from Lwp-Model to XF-Model + * @return pointer of the drawing object of XF-Model. + */ +XFFrame* LwpDrawObj::CreateXFDrawObject() +{ + // read records + this->Read(); + + // register style + rtl::OUString aStyleName = this->RegisterStyle(); + + // create XF-Objects + XFFrame* pXFObj = NULL; + if (m_pTransData + && FABS(m_pTransData->fOffsetX - m_pTransData->fLeftMargin) < THRESHOLD + && FABS(m_pTransData->fOffsetY - m_pTransData->fTopMargin) < THRESHOLD + && FABS(m_pTransData->fScaleX - 1.0) < THRESHOLD + && FABS(m_pTransData->fScaleY - 1.0) < THRESHOLD) + { + pXFObj = this->CreateStandardDrawObj(aStyleName); + } + else + { + pXFObj = this->CreateDrawObj(aStyleName); + } + + // set anchor type + if (pXFObj) + { + pXFObj->SetAnchorType(enumXFAnchorFrame); + } + + return pXFObj; +} + +/** + * @descr Constructor of class LwpDrawLine + * @param pStream The memory stream which contains the lwp-sdw draw objects + */ +LwpDrawLine::LwpDrawLine(SvStream * pStream, DrawingOffsetAndScale* pTransData) +: LwpDrawObj(pStream, pTransData) +{ +} + +/** + * @descr reading function of class LwpDrawLine + */ +void LwpDrawLine::Read() +{ + m_pStream->Read(&m_aLineRec.nStartX, sizeof(m_aLineRec.nStartX)); + m_pStream->Read(&m_aLineRec.nStartY, sizeof(m_aLineRec.nStartY)); + m_pStream->Read(&m_aLineRec.nEndX, sizeof(m_aLineRec.nEndX)); + m_pStream->Read(&m_aLineRec.nEndY, sizeof(m_aLineRec.nEndY)); + m_pStream->Read(&m_aLineRec.nLineWidth, sizeof(m_aLineRec.nLineWidth)); + m_pStream->Read(&m_aLineRec.nLineEnd,sizeof(m_aLineRec.nLineEnd)); + m_pStream->Read(&m_aLineRec.nLineStyle, sizeof(m_aLineRec.nLineStyle)); + + m_pStream->Read(&m_aLineRec.aPenColor.nR, 1); + m_pStream->Read(&m_aLineRec.aPenColor.nG, 1); + m_pStream->Read(&m_aLineRec.aPenColor.nB, 1); + m_pStream->Read(&m_aLineRec.aPenColor.unused, 1); +} + +rtl::OUString LwpDrawLine::RegisterStyle() +{ + XFDrawStyle* pStyle = new XFDrawStyle(); + + // set line style + this->SetLineStyle(pStyle, m_aLineRec.nLineWidth, m_aLineRec.nLineStyle, m_aLineRec.aPenColor); + + // set arrow head + this->SetArrowHead(pStyle, m_aLineRec.nLineEnd, m_aLineRec.nLineWidth); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + return pXFStyleManager->AddStyle(pStyle)->GetStyleName(); + +} + +XFFrame* LwpDrawLine::CreateDrawObj(const rtl::OUString& rStyleName ) +{ + XFDrawPath* pLine = new XFDrawPath(); + pLine->MoveTo(XFPoint((double)(m_aLineRec.nStartX)/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)(m_aLineRec.nStartY)/TWIPS_PER_CM * m_pTransData->fScaleY)); + pLine->LineTo(XFPoint((double)(m_aLineRec.nEndX)/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)(m_aLineRec.nEndY)/TWIPS_PER_CM * m_pTransData->fScaleY)); + this->SetPosition(pLine); + + pLine->SetStyleName(rStyleName); + + return pLine; +} + +XFFrame* LwpDrawLine::CreateStandardDrawObj(const OUString& rStyleName) +{ + XFDrawLine* pLine = new XFDrawLine(); + pLine->SetStartPoint((double)(m_aLineRec.nStartX)/TWIPS_PER_CM,(double)(m_aLineRec.nStartY)/TWIPS_PER_CM); + pLine->SetEndPoint((double)(m_aLineRec.nEndX)/TWIPS_PER_CM,(double)(m_aLineRec.nEndY)/TWIPS_PER_CM); + + pLine->SetStyleName(rStyleName); + return pLine; +} + +/** + * @descr Constructor of class LwpDrawPolyLine + * @param pStream The memory stream which contains the lwp-sdw draw objects + */ +LwpDrawPolyLine::LwpDrawPolyLine(SvStream * pStream, DrawingOffsetAndScale* pTransData) +: LwpDrawObj(pStream, pTransData), m_pVector(NULL) +{ +} +LwpDrawPolyLine::~LwpDrawPolyLine() +{ + if (m_pVector) + { + delete [] m_pVector; + m_pVector = NULL; + } +} + +/** + * @descr reading function of class LwpDrawPolyLine + */ +void LwpDrawPolyLine::Read() +{ + m_pStream->Read(&m_aPolyLineRec.nLineWidth, 1); + m_pStream->Read(&m_aPolyLineRec.nLineEnd, 1); + m_pStream->Read(&m_aPolyLineRec.nLineStyle, 1); + m_pStream->Read(&m_aPolyLineRec.aPenColor.nR, 1); + m_pStream->Read(&m_aPolyLineRec.aPenColor.nG, 1); + m_pStream->Read(&m_aPolyLineRec.aPenColor.nB, 1); + m_pStream->Read(&m_aPolyLineRec.aPenColor.unused, 1); + m_pStream->Read(&m_aPolyLineRec.nNumPoints, 2); + + m_pVector= new SdwPoint [m_aPolyLineRec.nNumPoints]; + + for (sal_uInt16 nC = 0; nC < m_aPolyLineRec.nNumPoints; nC++) + { + m_pStream->Read(&m_pVector[nC].x,2); + m_pStream->Read(&m_pVector[nC].y,2); + } +} + +rtl::OUString LwpDrawPolyLine::RegisterStyle() +{ + XFDrawStyle* pStyle = new XFDrawStyle(); + + // set line style + this->SetLineStyle(pStyle, m_aPolyLineRec.nLineWidth, m_aPolyLineRec.nLineStyle, + m_aPolyLineRec.aPenColor); + + // set arrow head + this->SetArrowHead(pStyle, m_aPolyLineRec.nLineEnd, m_aPolyLineRec.nLineWidth); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + return pXFStyleManager->AddStyle(pStyle)->GetStyleName(); +} + +XFFrame* LwpDrawPolyLine::CreateDrawObj(const rtl::OUString& rStyleName ) +{ + XFDrawPath* pPolyline = new XFDrawPath(); + pPolyline->MoveTo(XFPoint((double)m_pVector[0].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_pVector[0].y/TWIPS_PER_CM * m_pTransData->fScaleY)); + for (sal_uInt8 nC = 1; nC < m_aPolyLineRec.nNumPoints; nC++) + { + pPolyline->LineTo(XFPoint((double)m_pVector[nC].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_pVector[nC].y/TWIPS_PER_CM * m_pTransData->fScaleY)); + } + this->SetPosition(pPolyline); + + pPolyline->SetStyleName(rStyleName); + + return pPolyline; +} + +XFFrame* LwpDrawPolyLine::CreateStandardDrawObj(const OUString& rStyleName) +{ + XFDrawPolyline* pPolyline = new XFDrawPolyline(); + for (sal_uInt8 nC = 0; nC < m_aPolyLineRec.nNumPoints; nC++) + { + pPolyline->AddPoint((double)m_pVector[nC].x/TWIPS_PER_CM, + (double)m_pVector[nC].y/TWIPS_PER_CM); + } + + pPolyline->SetStyleName(rStyleName); + + return pPolyline; +} + +/** + * @descr Constructor of class LwpDrawPolygon + * @param pStream The memory stream which contains the lwp-sdw draw objects + */ +LwpDrawPolygon::LwpDrawPolygon(SvStream * pStream, DrawingOffsetAndScale* pTransData) +: LwpDrawObj(pStream, pTransData) +{ +} +LwpDrawPolygon::~LwpDrawPolygon() +{ + if (m_pVector) + { + delete m_pVector; + m_pVector = NULL; + } +} + +/** + * @descr reading function of class LwpDrawPolygon + */ +void LwpDrawPolygon::Read() +{ + this->ReadClosedObjStyle(); + m_pStream->Read(&m_nNumPoints, sizeof(m_nNumPoints)); + + m_pVector = new SdwPoint [m_nNumPoints]; + + for (sal_uInt16 nC = 0; nC < m_nNumPoints; nC++) + { + m_pStream->Read(&m_pVector[nC].x, 2); + m_pStream->Read(&m_pVector[nC].y, 2); + } +} + +rtl::OUString LwpDrawPolygon::RegisterStyle() +{ + XFDrawStyle* pStyle = new XFDrawStyle(); + + // set line style + this->SetLineStyle(pStyle, m_aClosedObjStyleRec.nLineWidth, m_aClosedObjStyleRec.nLineStyle, + m_aClosedObjStyleRec.aPenColor); + + // set fill style + this->SetFillStyle(pStyle); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + return pXFStyleManager->AddStyle(pStyle)->GetStyleName(); +} + +XFFrame* LwpDrawPolygon::CreateDrawObj(const rtl::OUString& rStyleName) +{ + XFDrawPath* pPolygon = new XFDrawPath(); + pPolygon->MoveTo(XFPoint((double)m_pVector[0].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_pVector[0].y/TWIPS_PER_CM * m_pTransData->fScaleY)); + for (sal_uInt16 nC = 1; nC < m_nNumPoints; nC++) + { + pPolygon->LineTo(XFPoint((double)m_pVector[nC].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_pVector[nC].y/TWIPS_PER_CM * m_pTransData->fScaleY)); + } + pPolygon->ClosePath(); + this->SetPosition(pPolygon); + pPolygon->SetStyleName(rStyleName); + + return pPolygon; +} + +XFFrame* LwpDrawPolygon::CreateStandardDrawObj(const OUString& rStyleName) +{ + XFDrawPolygon* pPolygon = new XFDrawPolygon(); + for (sal_uInt16 nC = 0; nC < m_nNumPoints; nC++) + { + pPolygon->AddPoint((double)m_pVector[nC].x/TWIPS_PER_CM, + (double)m_pVector[nC].y/TWIPS_PER_CM); + } + + pPolygon->SetStyleName(rStyleName); + + return pPolygon; +} + +/** + * @descr Constructor of class LwpDrawRectangle + * @param pStream The memory stream which contains the lwp-sdw draw objects + */ +LwpDrawRectangle::LwpDrawRectangle(SvStream * pStream, DrawingOffsetAndScale* pTransData) +: LwpDrawObj(pStream, pTransData) +{ +} + +/** + * @descr reading function of class LwpDrawRectangle + */ +void LwpDrawRectangle::Read() +{ + this->ReadClosedObjStyle(); + + + sal_uInt8 nPointsCount; + if (m_eType == OT_RNDRECT) + { + nPointsCount = 16; + m_pStream->SeekRel(4); // corner points + } + else + { + nPointsCount = 4; + } + + for (sal_uInt8 nC = 0; nC < nPointsCount; nC++) + { + m_pStream->Read(&m_aVector[nC].x,2); + m_pStream->Read(&m_aVector[nC].y,2); + } +} + +rtl::OUString LwpDrawRectangle::RegisterStyle() +{ + XFDrawStyle* pStyle = new XFDrawStyle(); + + // set line style + this->SetLineStyle(pStyle, m_aClosedObjStyleRec.nLineWidth, m_aClosedObjStyleRec.nLineStyle, + m_aClosedObjStyleRec.aPenColor); + + // set fill style + this->SetFillStyle(pStyle); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + return pXFStyleManager->AddStyle(pStyle)->GetStyleName(); +} + +XFFrame* LwpDrawRectangle::CreateDrawObj(const rtl::OUString& rStyleName) +{ + if (m_eType == OT_RNDRECT) + { + return this->CreateRoundedRect(rStyleName); + } + else + { + XFDrawPath* pRect = new XFDrawPath(); + pRect->MoveTo(XFPoint((double)m_aVector[0].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_aVector[0].y/TWIPS_PER_CM * m_pTransData->fScaleY)); + for (sal_uInt8 nC = 1; nC < 4; nC++) + { + pRect->LineTo(XFPoint((double)m_aVector[nC].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_aVector[nC].y/TWIPS_PER_CM * m_pTransData->fScaleY)); + } + pRect->LineTo(XFPoint((double)m_aVector[0].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_aVector[0].y/TWIPS_PER_CM * m_pTransData->fScaleY)); + pRect->ClosePath(sal_True); + this->SetPosition(pRect); + + pRect->SetStyleName(rStyleName); + + return pRect; + } +} + +XFFrame* LwpDrawRectangle::CreateRoundedRect(const rtl::OUString& rStyleName) +{ + XFDrawPath* pRoundedRect = new XFDrawPath(); + pRoundedRect->MoveTo(XFPoint((double)m_aVector[0].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_aVector[0].y/TWIPS_PER_CM * m_pTransData->fScaleY)); + + sal_uInt8 nPtIndex = 1; + for (sal_uInt8 nC = 0; nC < 7; nC++) + { + if (nC%2 == 0) + { + XFPoint aCtrl1((double)m_aVector[nPtIndex].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_aVector[nPtIndex].y/TWIPS_PER_CM * m_pTransData->fScaleY); + nPtIndex++; + XFPoint aCtrl2((double)m_aVector[nPtIndex].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_aVector[nPtIndex].y/TWIPS_PER_CM * m_pTransData->fScaleY); + nPtIndex++; + XFPoint aDest((double)m_aVector[nPtIndex].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_aVector[nPtIndex].y/TWIPS_PER_CM * m_pTransData->fScaleY); + nPtIndex++; + + pRoundedRect->CurveTo(aDest, aCtrl1, aCtrl2); + } + else + { + XFPoint aDest((double)m_aVector[nPtIndex].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_aVector[nPtIndex].y/TWIPS_PER_CM * m_pTransData->fScaleY); + nPtIndex++; + + pRoundedRect->LineTo(aDest); + } + } + + pRoundedRect->LineTo(XFPoint((double)m_aVector[0].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_aVector[0].y/TWIPS_PER_CM * m_pTransData->fScaleY)); + pRoundedRect->ClosePath(sal_True); + this->SetPosition(pRoundedRect); + + pRoundedRect->SetStyleName(rStyleName); + + return pRoundedRect; +} + +XFFrame* LwpDrawRectangle::CreateStandardDrawObj(const OUString& rStyleName) +{ + if (m_eType == OT_RNDRECT) + { + return this->CreateRoundedRect(rStyleName); + } + else + { + XFDrawRect* pRect = new XFDrawRect(); + double fStartX, fStartY, fWidth, fHeight; + double fRotAngle = 0.0; + SdwRectangle aSdwRect; + Rectangle aOriginalRect; + Point aPt0, aPt1, aPt2, aPt3; + + aPt0.setX(m_aVector[0].x); aPt0.setY(m_aVector[0].y); + aPt1.setX(m_aVector[1].x); aPt1.setY(m_aVector[1].y); + aPt2.setX(m_aVector[2].x); aPt2.setY(m_aVector[2].y); + aPt3.setX(m_aVector[3].x); aPt3.setY(m_aVector[3].y); + + aSdwRect = SdwRectangle(aPt0, aPt1, aPt2, aPt3); + if (aSdwRect.IsRectRotated()) + { + aOriginalRect = aSdwRect.GetOriginalRect(); + fRotAngle = aSdwRect.GetRotationAngle(); + } + else + { + aOriginalRect = Rectangle(aPt0, aPt2); + } + + fStartX = aOriginalRect.TopLeft().X(); + fStartY = aOriginalRect.TopLeft().Y(); + fWidth = aOriginalRect.GetWidth(); + fHeight = aOriginalRect.GetHeight(); + + pRect->SetStartPoint(XFPoint(fStartX/TWIPS_PER_CM + m_pTransData->fOffsetX, + fStartY/TWIPS_PER_CM + m_pTransData->fOffsetY)); + pRect->SetSize(fWidth/TWIPS_PER_CM, fHeight/TWIPS_PER_CM); + + if (aSdwRect.IsRectRotated()) + { + pRect->SetRotate( fRotAngle / PI * 180);// aXFCenter); + } + + pRect->SetStyleName(rStyleName); + + return pRect; + } +} + +/** + * @descr Constructor of class LwpDrawEllipse + * @param pStream The memory stream which contains the lwp-sdw draw objects + */ +LwpDrawEllipse::LwpDrawEllipse(SvStream * pStream, DrawingOffsetAndScale* pTransData) +: LwpDrawObj(pStream, pTransData) +{ +} + +/** + * @descr reading function of class LwpDrawEllipse + */ +void LwpDrawEllipse::Read() +{ + this->ReadClosedObjStyle(); + + for (sal_uInt8 nC = 0; nC < 13; nC++) + { + m_pStream->Read(&m_aVector[nC].x,2); + m_pStream->Read(&m_aVector[nC].y,2); + } +} + +rtl::OUString LwpDrawEllipse::RegisterStyle() +{ + XFDrawStyle* pStyle = new XFDrawStyle(); + + // set line style + this->SetLineStyle(pStyle, m_aClosedObjStyleRec.nLineWidth, m_aClosedObjStyleRec.nLineStyle, + m_aClosedObjStyleRec.aPenColor); + + // set fill style + this->SetFillStyle(pStyle); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + return pXFStyleManager->AddStyle(pStyle)->GetStyleName(); +} + +XFFrame* LwpDrawEllipse::CreateDrawObj(const rtl::OUString& rStyleName ) +{ + XFDrawPath* pEllipse = new XFDrawPath(); + pEllipse->MoveTo(XFPoint((double)m_aVector[0].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_aVector[0].y/TWIPS_PER_CM * m_pTransData->fScaleY)); + sal_uInt8 nPtIndex = 1; + for (sal_uInt8 nC = 0; nC < 4; nC++) + { + XFPoint aCtrl1((double)m_aVector[nPtIndex].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_aVector[nPtIndex].y/TWIPS_PER_CM * m_pTransData->fScaleY); + nPtIndex++; + XFPoint aCtrl2((double)m_aVector[nPtIndex].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_aVector[nPtIndex].y/TWIPS_PER_CM * m_pTransData->fScaleY); + nPtIndex++; + XFPoint aDest((double)m_aVector[nPtIndex].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_aVector[nPtIndex].y/TWIPS_PER_CM * m_pTransData->fScaleY); + nPtIndex++; + + pEllipse->CurveTo(aDest, aCtrl1, aCtrl2); + } + pEllipse->ClosePath(sal_True); + this->SetPosition(pEllipse); + + pEllipse->SetStyleName(rStyleName); + + return pEllipse; +} + +XFFrame* LwpDrawEllipse::CreateStandardDrawObj(const OUString& rStyleName) +{ + return this->CreateDrawObj(rStyleName); +} + +/** + * @descr Constructor of class LwpDrawArc + * @param pStream The memory stream which contains the lwp-sdw draw objects + */ +LwpDrawArc::LwpDrawArc(SvStream * pStream, DrawingOffsetAndScale* pTransData) +: LwpDrawObj(pStream, pTransData) +{ +} + +/** + * @descr reading function of class LwpDrawArc + */ +void LwpDrawArc::Read() +{ + m_pStream->SeekRel(16);// arcRect, startPt, endPt + + m_pStream->Read(&m_aArcRec.nLineWidth, sizeof(m_aArcRec.nLineWidth)); + m_pStream->Read(&m_aArcRec.nLineStyle, sizeof(m_aArcRec.nLineStyle)); + m_pStream->Read(&m_aArcRec.aPenColor.nR, 1); + m_pStream->Read(&m_aArcRec.aPenColor.nG, 1); + m_pStream->Read(&m_aArcRec.aPenColor.nB, 1); + m_pStream->Read(&m_aArcRec.aPenColor.unused, 1); + m_pStream->Read(&m_aArcRec.nLineEnd, sizeof(m_aArcRec.nLineEnd)); + + for (sal_uInt8 nC = 0; nC < 4; nC++) + { + m_pStream->Read(&m_aVector[nC].x,2); + m_pStream->Read(&m_aVector[nC].y,2); + } +} + +rtl::OUString LwpDrawArc::RegisterStyle() +{ + XFDrawStyle* pStyle = new XFDrawStyle(); + + // set line style + this->SetLineStyle(pStyle, m_aArcRec.nLineWidth, m_aArcRec.nLineStyle, + m_aArcRec.aPenColor); + + // set arrow head + this->SetArrowHead(pStyle, m_aArcRec.nLineEnd, m_aArcRec.nLineWidth); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + return pXFStyleManager->AddStyle(pStyle)->GetStyleName(); +} + +XFFrame* LwpDrawArc::CreateDrawObj(const rtl::OUString& rStyleName ) +{ + XFDrawPath* pArc = new XFDrawPath(); + pArc->MoveTo(XFPoint((double)m_aVector[0].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_aVector[0].y/TWIPS_PER_CM * m_pTransData->fScaleY)); + XFPoint aDest((double)m_aVector[3].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_aVector[3].y/TWIPS_PER_CM * m_pTransData->fScaleY); + XFPoint aCtl1((double)m_aVector[1].x/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)m_aVector[1].y/TWIPS_PER_CM * m_pTransData->fScaleY); + XFPoint aCtl2((double)m_aVector[2].x/TWIPS_PER_CM* m_pTransData->fScaleX, + (double)m_aVector[2].y/TWIPS_PER_CM * m_pTransData->fScaleY); + pArc->CurveTo(aDest, aCtl1, aCtl2); +// pArc->CurveTo(XFPoint((double)m_aVector[3].x/TWIPS_PER_CM, (double)m_aVector[3].y/TWIPS_PER_CM), +// XFPoint((double)m_aVector[1].x/TWIPS_PER_CM, (double)m_aVector[1].y/TWIPS_PER_CM), +// XFPoint((double)m_aVector[2].x/TWIPS_PER_CM, (double)m_aVector[2].y/TWIPS_PER_CM)); + this->SetPosition(pArc); + + pArc->SetStyleName(rStyleName); + + return pArc; +} + +XFFrame* LwpDrawArc::CreateStandardDrawObj(const OUString& rStyleName) +{ + return this->CreateDrawObj(rStyleName); +} + +/** + * @descr Constructor of class LwpDrawTextBox + * @param pStream The memory stream which contains the lwp-sdw draw objects + */ +LwpDrawTextBox::LwpDrawTextBox(SvStream* pStream) : LwpDrawObj(pStream) +{ +} + +LwpDrawTextBox::~LwpDrawTextBox() +{ + if (m_aTextRec.pTextString) + { + delete [] m_aTextRec.pTextString; + m_aTextRec.pTextString = NULL; + } +} + +void LwpDrawTextBox::SetFontStyle(XFFont* pFont, SdwTextBoxRecord* pRec) +{ + // color + XFColor aXFColor(pRec->aTextColor.nR, pRec->aTextColor.nG, + pRec->aTextColor.nB); + pFont->SetColor(aXFColor); + //size + pFont->SetFontSize(pRec->nTextSize/20); + // bold + pFont->SetBold((sal_Bool)((pRec->nTextAttrs & TA_BOLD) != 0)); + // italic + pFont->SetItalic((sal_Bool)((pRec->nTextAttrs & TA_ITALIC) != 0)); + // strike-through + if (pRec->nTextAttrs & TA_STRIKETHRU) + { + pFont->SetCrossout(enumXFCrossoutSignel); + } + else + { + pFont->SetCrossout(enumXFCrossoutNone); + } + // underline + if (pRec->nTextAttrs & TA_UNDERLINE) + { + pFont->SetUnderline(enumXFUnderlineSingle); + } + else if (pRec->nTextAttrs & TA_WORDUNDERLINE) + { + pFont->SetUnderline(enumXFUnderlineSingle, sal_True); + } + else if (pRec->nTextAttrs & TA_DOUBLEUNDER) + { + pFont->SetUnderline(enumXFUnderlineDouble); + } + else + { + pFont->SetUnderline(enumXFUnderlineNone); + } + // small-caps + if (pRec->nTextAttrs & TA_SMALLCAPS) + { + pFont->SetTransform(enumXFTransformSmallCaps); + } +} + +/** + * @descr reading function of class LwpDrawTextBox + */ +void LwpDrawTextBox::Read() +{ + m_pStream->Read(&m_aVector.x, 2); + m_pStream->Read(&m_aVector.y, 2); + m_pStream->Read(&m_aTextRec.nTextWidth, sizeof(m_aTextRec.nTextWidth)); + + if (m_aTextRec.nTextWidth == 0) + { + m_aTextRec.nTextWidth = 1; + } + + m_pStream->Read(&m_aTextRec.nTextHeight, sizeof(m_aTextRec.nTextHeight)); + m_pStream->Read(m_aTextRec.tmpTextFaceName, DRAW_FACESIZE); + m_pStream->SeekRel(1);// PitchAndFamily + + m_pStream->Read(&m_aTextRec.nTextSize, sizeof(m_aTextRec.nTextSize)); + + bool TextSizeIsCellHeight = true; + if (m_aTextRec.nTextSize < 0) + { + TextSizeIsCellHeight = false; + m_aTextRec.nTextSize = -m_aTextRec.nTextSize; + } + + //color + m_pStream->Read(&m_aTextRec.aTextColor.nR, 1); + m_pStream->Read(&m_aTextRec.aTextColor.nG, 1); + m_pStream->Read(&m_aTextRec.aTextColor.nB, 1); + m_pStream->Read(&m_aTextRec.aTextColor.unused, 1); + + m_pStream->Read(&m_aTextRec.nTextAttrs, sizeof(m_aTextRec.nTextAttrs)); + m_pStream->Read(&m_aTextRec.nTextCharacterSet, sizeof(m_aTextRec.nTextCharacterSet)); + m_pStream->Read(&m_aTextRec.nTextRotation, sizeof(m_aTextRec.nTextRotation)); + m_pStream->Read(&m_aTextRec.nTextExtraSpacing, sizeof(m_aTextRec.nTextExtraSpacing)); + + /*#ifdef JAPANESE_ENABLED //For Amipro Support KOBA-WADA + lubyte compText[3]; + lsshort TextLength; + lubyte * pTextString; + cBinaryData.GetUBytes(compText, 2); + compText[2] = '\0'; + if (compText[0] == 0 && compText[1] == 0 && recLen > 105 ) + { + // AmiPro R3.1J's extended text object format + TextLength = recLen - 71 - 34; + cBinaryData.SkipUBytes(32); + + pTextString = new lubyte[TextLength]; + + LASSERT(pTextString != LNULL); + + cBinaryData.GetUBytes(pTextString, TextLength); + } + else + { + // AmiPro R3.X original text object format + + // some draw files in version 1.2 have an extra byte following '\0'. + // can't rely on that, so read in the whole string into memory. + TextLength = recLen - 71; + pTextString = new lubyte[TextLength]; + + LASSERT(pTextString != LNULL); + + strcpy((char *)pTextString, (const char *)compText); + cBinaryData.GetUBytes(pTextString + 2, TextLength - 2); + } +#else*/ + // some draw files in version 1.2 have an extra byte following '\0'. + // can't rely on that, so read in the whole string into memory. + + // the 71 is the fixed length before text content in textbox record + sal_Int16 TextLength = m_aObjHeader.nRecLen - 71; + m_aTextRec.pTextString = new sal_uInt8 [TextLength]; + + m_pStream->Read(m_aTextRec.pTextString, TextLength); + +//#endif // AmiPro + +} + +rtl::OUString LwpDrawTextBox::RegisterStyle() +{ + XFParaStyle* pStyle = new XFParaStyle(); + + // font style + // the pFont need to be deleted myself? + XFFont* pFont = new XFFont(); + + rtl_TextEncoding aEncoding = RTL_TEXTENCODING_MS_1252; + rtl::OUString aFontName = rtl::OUString((sal_Char*)m_aTextRec.tmpTextFaceName, + strlen((char*)m_aTextRec.tmpTextFaceName), aEncoding); + pFont->SetFontName(aFontName); + + this->SetFontStyle(pFont, &m_aTextRec); + + pStyle->SetFont(pFont); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + return pXFStyleManager->AddStyle(pStyle)->GetStyleName(); +} + +XFFrame* LwpDrawTextBox::CreateDrawObj(const rtl::OUString& rStyleName ) +{ + XFFrame* pTextBox = new XFFrame(sal_True); +/* this->SetPosition(pTextBox); + XFRect aBoundRect((double)m_aObjHeader.nLeft/TWIPS_PER_CM, (double)m_aObjHeader.nTop/TWIPS_PER_CM, + (double)(m_aObjHeader.nRight-m_aObjHeader.nLeft)/TWIPS_PER_CM, (double)(m_aObjHeader.nBottom-m_aObjHeader.nTop)/TWIPS_PER_CM); + pTextBox->SetPosition(aBoundRect);*/ + + sal_Int16 TextLength = m_aObjHeader.nRecLen - 71; + rtl_TextEncoding aEncoding; + if (!m_aTextRec.nTextCharacterSet) + { + aEncoding = gsl_getSystemTextEncoding(); + } + else + { + // temporary code, need to create Encoding from the value of nTextCharacterSet + aEncoding = LwpCharSetMgr::GetInstance()->GetTextCharEncoding(); + } + +// XFTextSpan* pTextSpan = new XFTextSpan(); +// pTextSpan->SetText(rtl::OUString((sal_Char*)m_aTextRec.pTextString, (TextLength-2), aEncoding)); +// pTextSpan->SetStyleName(rStyleName); + + XFParagraph* pXFPara = new XFParagraph(); + pXFPara->Add(rtl::OUString((sal_Char*)m_aTextRec.pTextString, (TextLength-2), aEncoding)); + pXFPara->SetStyleName(rStyleName); + + pTextBox->Add(pXFPara); + this->SetPosition(pTextBox); + + /* + XFFrameStyle* pBoxStyle = new XFFrameStyle(); + pBoxStyle->SetYPosType(enumXFFrameYPosFromTop, enumXFFrameYRelFrame); + pBoxStyle->SetXPosType(enumXFFrameXPosFromLeft, enumXFFrameXRelFrame); + pBoxStyle->SetPadding(0.0, 0.0, 0.0, 0.0); + */ + XFTextBoxStyle* pBoxStyle = new XFTextBoxStyle(); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + OUString sName = pXFStyleManager->AddStyle(pBoxStyle)->GetStyleName(); + pTextBox->SetStyleName(sName); + + //todo: add the interface for rotating textbox +// if (m_aTextRec.nTextRotation) +// { +// double fAngle = double(3600-m_aTextRec.nTextRotation)/10; +// pTextBox->SetRotate(fAngle); +// } + + return pTextBox; +} + +XFFrame* LwpDrawTextBox::CreateStandardDrawObj(const OUString& rStyleName) +{ + return this->CreateDrawObj(rStyleName); +} + +/** + * @descr Constructor of class LwpDrawTextBox + * @param pStream The memory stream which contains the lwp-sdw draw objects + */ +LwpDrawTextArt::LwpDrawTextArt(SvStream* pStream, DrawingOffsetAndScale* pTransData) +: LwpDrawObj(pStream, pTransData) +{ +} + +LwpDrawTextArt::~LwpDrawTextArt() +{ + if (m_aTextArtRec.aPath[0].pPts) + { + delete [] m_aTextArtRec.aPath[0].pPts; + m_aTextArtRec.aPath[0].pPts = NULL; + } + if (m_aTextArtRec.aPath[1].pPts) + { + delete [] m_aTextArtRec.aPath[1].pPts; + m_aTextArtRec.aPath[1].pPts = NULL; + } + if (m_aTextArtRec.pTextString) + { + delete [] m_aTextArtRec.pTextString; + m_aTextArtRec.pTextString = NULL; + } + +} + +void LwpDrawTextArt::CreateFWPath(XFDrawPath* pPath) +{ + sal_Int16 nX, nY; + nX = (m_aTextArtRec.aPath[0].pPts[0].x + m_aTextArtRec.aPath[1].pPts[0].x) / 2; + nY = (m_aTextArtRec.aPath[0].pPts[0].y + m_aTextArtRec.aPath[1].pPts[0].y) / 2; + XFPoint aStart((double)nX/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)nY/TWIPS_PER_CM * m_pTransData->fScaleY); + pPath->MoveTo(aStart); + + sal_uInt8 nPtIndex = 1; + for (sal_uInt8 nC = 1; nC <= m_aTextArtRec.aPath[0].n; nC++) + { + nX = (m_aTextArtRec.aPath[0].pPts[nPtIndex].x + m_aTextArtRec.aPath[1].pPts[nPtIndex].x) / 2; + nY = (m_aTextArtRec.aPath[0].pPts[nPtIndex].y + m_aTextArtRec.aPath[1].pPts[nPtIndex].y) / 2; + XFPoint aCtrl1((double)nX/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)nY/TWIPS_PER_CM * m_pTransData->fScaleY); + + nPtIndex++; + nX = (m_aTextArtRec.aPath[0].pPts[nPtIndex].x + m_aTextArtRec.aPath[1].pPts[nPtIndex].x) / 2; + nY = (m_aTextArtRec.aPath[0].pPts[nPtIndex].y + m_aTextArtRec.aPath[1].pPts[nPtIndex].y) / 2; + XFPoint aCtrl2((double)nX/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)nY/TWIPS_PER_CM * m_pTransData->fScaleY); + + nPtIndex++; + nX = (m_aTextArtRec.aPath[0].pPts[nPtIndex].x + m_aTextArtRec.aPath[1].pPts[nPtIndex].x) / 2; + nY = (m_aTextArtRec.aPath[0].pPts[nPtIndex].y + m_aTextArtRec.aPath[1].pPts[nPtIndex].y) / 2; + XFPoint aDest((double)nX/TWIPS_PER_CM * m_pTransData->fScaleX, + (double)nY/TWIPS_PER_CM * m_pTransData->fScaleY); + + pPath->CurveTo(aDest, aCtrl1, aCtrl2); + } +} + +void LwpDrawTextArt::Read() +{ + for (sal_uInt8 nC = 0; nC < 4; nC++) + { + m_pStream->Read(&m_aVector[nC].x, 2); + m_pStream->Read(&m_aVector[nC].y, 2); + } + + this->ReadClosedObjStyle(); + m_aTextArtRec.aTextColor = m_aClosedObjStyleRec.aForeColor; + + m_pStream->Read(&m_aTextArtRec.nIndex, 1); + m_pStream->Read(&m_aTextArtRec.nRotation, 2); + + sal_uInt16 nPointNumber; + sal_Int16 nX, nY; + m_pStream->Read(&nPointNumber, 2); + m_aTextArtRec.aPath[0].n = nPointNumber; + m_aTextArtRec.aPath[0].pPts = new SdwPoint [nPointNumber*3+1]; + sal_uInt16 nPt = 0; + for ( nPt = 0; nPt <= nPointNumber*3; nPt++) + { + m_pStream->Read(&nX, 2); + m_pStream->Read(&nY, 2); + m_aTextArtRec.aPath[0].pPts[nPt].x = nX; + m_aTextArtRec.aPath[0].pPts[nPt].y = nY; + } + + m_pStream->Read(&nPointNumber, 2); + m_aTextArtRec.aPath[1].n = nPointNumber; + m_aTextArtRec.aPath[1].pPts = new SdwPoint [nPointNumber*3+1]; + for (nPt = 0; nPt <= nPointNumber*3; nPt++) + { + m_pStream->Read(&nX, 2); + m_pStream->Read(&nY, 2); + m_aTextArtRec.aPath[1].pPts[nPt].x = nX; + m_aTextArtRec.aPath[1].pPts[nPt].y = nY; + } + + m_pStream->SeekRel(1); + + m_pStream->Read(m_aTextArtRec.tmpTextFaceName, DRAW_FACESIZE); + m_pStream->SeekRel(1);// PitchAndFamily + + m_pStream->Read(&m_aTextArtRec.nTextSize, sizeof(m_aTextArtRec.nTextSize)); + bool TextSizeIsCellHeight = true; + if (m_aTextArtRec.nTextSize < 0) + { + TextSizeIsCellHeight = false; + m_aTextArtRec.nTextSize = -m_aTextArtRec.nTextSize; + } + + m_pStream->Read(&m_aTextArtRec.nTextAttrs, sizeof(m_aTextArtRec.nTextAttrs)); + m_pStream->Read(&m_aTextArtRec.nTextCharacterSet, sizeof(m_aTextArtRec.nTextCharacterSet)); +// m_pStream->Read(&m_aTextArtRec.nTextRotation, sizeof(m_aTextArtRec.nTextRotation)); + m_aTextArtRec.nTextRotation = 0; + m_pStream->Read(&m_aTextArtRec.nTextExtraSpacing, sizeof(m_aTextArtRec.nTextExtraSpacing)); + + const sal_uInt16 nTextArtFixedLength = 105; + m_aTextArtRec.nTextLen = m_aObjHeader.nRecLen - nTextArtFixedLength + - (m_aTextArtRec.aPath[0].n*3 + 1)*4 + - (m_aTextArtRec.aPath[1].n*3 + 1)*4; + + m_aTextArtRec.pTextString = new sal_uInt8 [m_aTextArtRec.nTextLen]; + m_pStream->Read(m_aTextArtRec.pTextString, m_aTextArtRec.nTextLen); + m_aTextArtRec.pTextString[m_aTextArtRec.nTextLen-1] = 0; + +} + +rtl::OUString LwpDrawTextArt::RegisterStyle() +{ + XFParaStyle* pStyle = new XFParaStyle(); + + // font style + // the pFont need to be deleted myself? + XFFont* pFont = new XFFont(); + + rtl_TextEncoding aEncoding = RTL_TEXTENCODING_MS_1252; + rtl::OUString aFontName = rtl::OUString((sal_Char*)m_aTextArtRec.tmpTextFaceName, + strlen((char*)m_aTextArtRec.tmpTextFaceName), aEncoding); + pFont->SetFontName(aFontName); + + LwpDrawTextBox::SetFontStyle(pFont, &m_aTextArtRec); + + pStyle->SetFont(pFont); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + return pXFStyleManager->AddStyle(pStyle)->GetStyleName(); +} + +XFFrame* LwpDrawTextArt::CreateDrawObj(const rtl::OUString& rStyleName) +{ + XFFrame* pRetObj = NULL; + XFDrawStyle* pStyle = new XFDrawStyle(); + + pRetObj = new XFDrawPath(); + XFDrawPath* pFWPath = static_cast<XFDrawPath*>(pRetObj); + this->CreateFWPath(pFWPath); + pStyle->SetFontWorkStyle(0, enumXFFWSlantY, enumXFFWAdjustAutosize); + + this->SetPosition(pRetObj); + + rtl_TextEncoding aEncoding; + if (!m_aTextArtRec.nTextCharacterSet) + { + aEncoding = gsl_getSystemTextEncoding(); + } + else + { + // temporary code, need to create Encoding from the value of nTextCharacterSet + aEncoding = LwpCharSetMgr::GetInstance()->GetTextCharEncoding(); + } + + XFParagraph* pXFPara = new XFParagraph(); + pXFPara->Add(rtl::OUString((sal_Char*)m_aTextArtRec.pTextString, (m_aTextArtRec.nTextLen-1), aEncoding)); + pXFPara->SetStyleName(rStyleName); + pRetObj->Add(pXFPara); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + pRetObj->SetStyleName(pXFStyleManager->AddStyle(pStyle)->GetStyleName()); + + return pRetObj; +} + +XFFrame* LwpDrawTextArt::CreateStandardDrawObj(const rtl::OUString& rStyleName ) +{ + return this->CreateDrawObj(rStyleName); +} + + +/** + * @descr Constructor of class LwpDrawMetafile + * @param pStream The memory stream which contains the lwp-sdw draw objects + */ +LwpDrawMetafile::LwpDrawMetafile(SvStream* pStream) : LwpDrawObj(pStream) +{ +} + +/** + * @descr reading function of class LwpDrawMetafile + */ +void LwpDrawMetafile::Read() +{ + m_pStream->SeekRel(m_aObjHeader.nRecLen -16); +} + +/** + * @descr Constructor of class LwpDrawBitmap + * @param pStream The memory stream which contains the lwp-sdw draw objects + */ +LwpDrawBitmap::LwpDrawBitmap(SvStream* pStream) : LwpDrawObj(pStream), m_pImageData(NULL) +{ +} + +LwpDrawBitmap::~LwpDrawBitmap() +{ + if (m_pImageData) + { + delete [] m_pImageData; + m_pImageData = NULL; + } +} + +/** + * @descr reading function of class LwpDrawBitmap + */ +void LwpDrawBitmap::Read() +{ + m_pStream->Read(&m_aBmpRec.nTranslation, sizeof(m_aBmpRec.nTranslation)); + m_pStream->Read(&m_aBmpRec.nRotation, sizeof(m_aBmpRec.nRotation)); + + // 20 == length of draw-specific fields. + // 14 == length of bmp file header. + m_aBmpRec.nFileSize = m_aObjHeader.nRecLen - 20 + 14; + m_pImageData = new sal_uInt8 [m_aBmpRec.nFileSize]; + + BmpInfoHeader2 aInfoHeader2; + m_pStream->Read(&aInfoHeader2.nHeaderLen, 4); + + sal_uInt32 N; + sal_uInt32 rgbTableSize; + + if (aInfoHeader2.nHeaderLen == sizeof(BmpInfoHeader)) + { + m_pStream->Read(&aInfoHeader2.nWidth, 2); + m_pStream->Read(&aInfoHeader2.nHeight, 2); + m_pStream->Read(&aInfoHeader2.nPlanes, 2); + m_pStream->Read(&aInfoHeader2.nBitCount, 2); + + N = aInfoHeader2.nPlanes * aInfoHeader2.nBitCount; + if (N == 24) + { + rgbTableSize = 0; + } + else + { + rgbTableSize = 3 * (1 << N); + } + } + else + { + m_pStream->Read(&aInfoHeader2.nWidth, 4); + m_pStream->Read(&aInfoHeader2.nHeight, 4); + m_pStream->Read(&aInfoHeader2.nPlanes, 2); + m_pStream->Read(&aInfoHeader2.nBitCount, 2); + N = aInfoHeader2.nPlanes * aInfoHeader2.nBitCount; + if (N == 24) + { + rgbTableSize = 0; + } + else + { + rgbTableSize = 4 * (1 << N); + } + + } + + sal_uInt32 nOffBits = 14 + aInfoHeader2.nHeaderLen + rgbTableSize; + m_pImageData[0] = 'B'; + m_pImageData[1] = 'M'; + m_pImageData[2] = (sal_uInt8)m_aBmpRec.nFileSize; + m_pImageData[3] = (sal_uInt8)(m_aBmpRec.nFileSize >> 8); + m_pImageData[4] = (sal_uInt8)(m_aBmpRec.nFileSize >> 16); + m_pImageData[5] = (sal_uInt8)(m_aBmpRec.nFileSize >> 24); + m_pImageData[6] = 0; + m_pImageData[7] = 0; + m_pImageData[8] = 0; + m_pImageData[9] = 0; + m_pImageData[10] = (sal_uInt8)nOffBits; + m_pImageData[11] = (sal_uInt8)(nOffBits >> 8); + m_pImageData[12] = (sal_uInt8)(nOffBits >> 16); + m_pImageData[13] = (sal_uInt8)(nOffBits >> 24); + + sal_uInt32 nDIBRemaining; + sal_uInt8* pPicData = m_pImageData; + if (aInfoHeader2.nHeaderLen== sizeof(BmpInfoHeader)) + { + m_pImageData[14] = (sal_uInt8)aInfoHeader2.nHeaderLen; + m_pImageData[15] = (sal_uInt8)(aInfoHeader2.nHeaderLen >> 8); + m_pImageData[16] = (sal_uInt8)(aInfoHeader2.nHeaderLen >> 16); + m_pImageData[17] = (sal_uInt8)(aInfoHeader2.nHeaderLen >> 24); + m_pImageData[18] = (sal_uInt8)aInfoHeader2.nWidth; + m_pImageData[19] = (sal_uInt8)(aInfoHeader2.nWidth >> 8); + m_pImageData[20] = (sal_uInt8)aInfoHeader2.nHeight; + m_pImageData[21] = (sal_uInt8)(aInfoHeader2.nHeight >> 8); + m_pImageData[22] = (sal_uInt8)aInfoHeader2.nPlanes; + m_pImageData[23] = (sal_uInt8)(aInfoHeader2.nPlanes >> 8); + m_pImageData[24] = (sal_uInt8)aInfoHeader2.nBitCount; + m_pImageData[25] = (sal_uInt8)(aInfoHeader2.nBitCount >> 8); + + nDIBRemaining = m_aBmpRec.nFileSize - 26; + pPicData += 26*sizeof(sal_uInt8); + } + else + { + m_pImageData[14] = (sal_uInt8)aInfoHeader2.nHeaderLen; + m_pImageData[15] = (sal_uInt8)(aInfoHeader2.nHeaderLen >> 8); + m_pImageData[16] = (sal_uInt8)(aInfoHeader2.nHeaderLen >> 16); + m_pImageData[17] = (sal_uInt8)(aInfoHeader2.nHeaderLen >> 24); + m_pImageData[18] = (sal_uInt8)aInfoHeader2.nWidth; + m_pImageData[19] = (sal_uInt8)(aInfoHeader2.nWidth >> 8); + m_pImageData[20] = (sal_uInt8)(aInfoHeader2.nWidth >> 16); + m_pImageData[21] = (sal_uInt8)(aInfoHeader2.nWidth >> 24); + m_pImageData[22] = (sal_uInt8)aInfoHeader2.nHeight; + m_pImageData[23] = (sal_uInt8)(aInfoHeader2.nHeight >> 8); + m_pImageData[24] = (sal_uInt8)(aInfoHeader2.nHeight >> 16); + m_pImageData[25] = (sal_uInt8)(aInfoHeader2.nHeight >> 24); + m_pImageData[26] = (sal_uInt8)aInfoHeader2.nPlanes; + m_pImageData[27] = (sal_uInt8)(aInfoHeader2.nPlanes >> 8); + m_pImageData[28] = (sal_uInt8)aInfoHeader2.nBitCount; + m_pImageData[29] = (sal_uInt8)(aInfoHeader2.nBitCount >> 8); + + nDIBRemaining = m_aBmpRec.nFileSize - 30; + pPicData += 30*sizeof(sal_uInt8); + } + + m_pStream->Read(pPicData, nDIBRemaining); + +/* FILE* pStream; + pStream = fopen( "drawing_test.bmp", "w+" ); + fwrite(m_pImageData, sizeof(sal_uInt8), m_aBmpRec.nFileSize, pStream); + fclose( pStream ); +*/ +} + +rtl::OUString LwpDrawBitmap::RegisterStyle() +{ + XFImageStyle* pBmpStyle = new XFImageStyle(); + pBmpStyle->SetYPosType(enumXFFrameYPosFromTop, enumXFFrameYRelFrame); + pBmpStyle->SetXPosType(enumXFFrameXPosFromLeft, enumXFFrameXRelFrame); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + return pXFStyleManager->AddStyle(pBmpStyle)->GetStyleName(); +} + +XFFrame* LwpDrawBitmap::CreateDrawObj(const rtl::OUString& rStyleName) +{ + XFImage* pImage = new XFImage(); + pImage->SetImageData(m_pImageData, m_aBmpRec.nFileSize); + this->SetPosition(pImage); + + pImage->SetStyleName(rStyleName); + + return pImage; +} + +XFFrame* LwpDrawBitmap::CreateStandardDrawObj(const OUString& rStyleName) +{ + return this->CreateDrawObj(rStyleName); +} diff --git a/lotuswordpro/source/filter/lwpdrawobj.hxx b/lotuswordpro/source/filter/lwpdrawobj.hxx new file mode 100644 index 000000000000..d14efa4dcc6e --- /dev/null +++ b/lotuswordpro/source/filter/lwpdrawobj.hxx @@ -0,0 +1,376 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * The file declares the LwpDrawObjcts and associated class like LwpDrawGroup, LwpDrawRectange + * and so on. + */ + +#ifndef _LWPDRAWOBJ_HXX +#define _LWPDRAWOBJ_HXX + +#include "lwpsdwdrawheader.hxx" + +class SvStream; +class XFFrame; +class XFDrawStyle; + +/** + * @brief + * Lwp-base-draw object. + */ +class LwpDrawObj +{ +protected: + DrawObjectType m_eType; + SvStream* m_pStream; + SdwDrawObjHeader m_aObjHeader; + SdwClosedObjStyleRec m_aClosedObjStyleRec; + DrawingOffsetAndScale* m_pTransData; + +public: + LwpDrawObj(SvStream* pStream, DrawingOffsetAndScale* pTransData = NULL); + virtual ~LwpDrawObj() {}; + +private: + void ReadObjHeaderRecord(); + +protected: + void ReadClosedObjStyle(); + void SetFillStyle(XFDrawStyle* pStyle); + void SetLineStyle(XFDrawStyle* pStyle, sal_uInt8 nWidth, sal_uInt8 nLineStyle, + const SdwColor& rColor); + void SetPosition(XFFrame* pObj); + void SetArrowHead(XFDrawStyle* pOpenedObjStyle, sal_uInt8 nArrowFlag, sal_uInt8 nLineWidth); + rtl::OUString GetArrowName(sal_uInt8 nArrowStyle); + +protected: + /** + * @descr read out the record of a draw object. + */ + virtual void Read() = 0; + + /** + * @descr register styles of a draw object according to the saved records data. + * @return the style name which has been registered. + */ + virtual rtl::OUString RegisterStyle() = 0; + + /** + * @descr create XF-draw object and assign the style name to it. + * @param style name. + * @return pointer of the created XF-draw object. + */ + virtual XFFrame* CreateDrawObj(const rtl::OUString& rStyleName) = 0; + + /** + * @descr create XF-draw object and assign the style name to it. + * @param style name. + * @return pointer of the created XF-draw object. + */ + virtual XFFrame* CreateStandardDrawObj(const rtl::OUString& rStyleName) = 0; + +public: + /** + * @descr create a completed XF-draw object(read data, register styles and create XF-draw object) + * @return pointer of the created competed XF-draw object. + */ + XFFrame* CreateXFDrawObject(); + + /** + * @param type of the object. + * @descr set the type to the draw object. + */ + inline void SetObjectType(DrawObjectType eType) { m_eType = eType; } + + /** + * @descr get the type of the draw object. + * @return the type of the object. + */ + inline DrawObjectType GetObjectType() const { return m_eType; } +}; + + +/** + * @brief + * Lwp-draw-group object. + */ +class LwpDrawGroup : public LwpDrawObj +{ +public: + LwpDrawGroup(SvStream* pStream) : LwpDrawObj(pStream) {} + virtual ~LwpDrawGroup() {} + +protected: + virtual void Read() {} + virtual rtl::OUString RegisterStyle() { return rtl::OUString::createFromAscii(""); } + virtual XFFrame* CreateDrawObj(const rtl::OUString& rStyleName) { return NULL; } + virtual XFFrame* CreateStandardDrawObj(const rtl::OUString& rStyleName) { return NULL; } +}; + + +/** + * @brief + * Lwp-draw-line object. + */ +class LwpDrawLine : public LwpDrawObj +{ +private: + SdwLineRecord m_aLineRec; + +public: + LwpDrawLine(SvStream * pStream, DrawingOffsetAndScale* pTransData); + virtual ~LwpDrawLine() {}; + +protected: + virtual void Read(); + virtual rtl::OUString RegisterStyle(); + virtual XFFrame* CreateDrawObj(const rtl::OUString& rStyleName); + virtual XFFrame* CreateStandardDrawObj(const rtl::OUString& rStyleName); +}; + +/** + * @brief + * Lwp-draw-polyline object. + */ +class LwpDrawPolyLine : public LwpDrawObj +{ +private: + SdwPolyLineRecord m_aPolyLineRec; + SdwPoint* m_pVector; + +public: + LwpDrawPolyLine(SvStream * pStream, DrawingOffsetAndScale* pTransData); + virtual ~LwpDrawPolyLine(); + +protected: + virtual void Read(); + virtual rtl::OUString RegisterStyle(); + virtual XFFrame* CreateDrawObj(const rtl::OUString& rStyleName); + virtual XFFrame* CreateStandardDrawObj(const rtl::OUString& rStyleName); +}; + + + /** + * @brief + * Lwp-draw-polygon object. + */ +class LwpDrawPolygon : public LwpDrawObj +{ +private: + sal_uInt16 m_nNumPoints; + SdwPoint* m_pVector; + +public: + LwpDrawPolygon(SvStream * pStream, DrawingOffsetAndScale* pTransData); + virtual ~LwpDrawPolygon(); + +protected: + virtual void Read(); + virtual rtl::OUString RegisterStyle(); + virtual XFFrame* CreateDrawObj(const rtl::OUString& rStyleName); + virtual XFFrame* CreateStandardDrawObj(const rtl::OUString& rStyleName); +}; + +/** + * @brief + * Lwp-draw-rectangle(rounded-corner rectangle) object. + */ +class LwpDrawRectangle : public LwpDrawObj +{ +private: + SdwPoint m_aVector[16]; + +public: + LwpDrawRectangle(SvStream* pStream, DrawingOffsetAndScale* pTransData); + virtual ~LwpDrawRectangle(){} + +protected: + virtual void Read(); + virtual rtl::OUString RegisterStyle(); + virtual XFFrame* CreateDrawObj(const rtl::OUString& rStyleName); + virtual XFFrame* CreateStandardDrawObj(const rtl::OUString& rStyleName); + +private: + XFFrame* CreateRoundedRect(const rtl::OUString& rStyleName); +}; + +/** + * @brief + * Lwp-draw-ellipse object. + */ +class LwpDrawEllipse : public LwpDrawObj +{ +private: + SdwPoint m_aVector[13]; + +public: + LwpDrawEllipse(SvStream * pStream, DrawingOffsetAndScale* pTransData); + virtual ~LwpDrawEllipse(){}; + +protected: + virtual void Read(); + virtual rtl::OUString RegisterStyle(); + virtual XFFrame* CreateDrawObj(const rtl::OUString& rStyleName); + virtual XFFrame* CreateStandardDrawObj(const rtl::OUString& rStyleName); +}; + + +/** + * @brief + * Lwp-draw-arc object. + */ +class LwpDrawArc : public LwpDrawObj +{ +private: + SdwArcRecord m_aArcRec; + SdwPoint m_aVector[4]; + +public: + LwpDrawArc(SvStream * pStream, DrawingOffsetAndScale* pTransData); + virtual ~LwpDrawArc() {}; + +protected: + virtual void Read(); + virtual rtl::OUString RegisterStyle(); + virtual XFFrame* CreateDrawObj(const rtl::OUString& rStyleName); + virtual XFFrame* CreateStandardDrawObj(const rtl::OUString& rStyleName); +}; + +/** + * @brief + * Lwp-draw-textbox object. + */ +class XFFont; +class LwpDrawTextBox : public LwpDrawObj +{ +private: + SdwTextBoxRecord m_aTextRec; + SdwPoint m_aVector; + +public: + LwpDrawTextBox(SvStream* pStream); + virtual ~LwpDrawTextBox(); + static void SetFontStyle(XFFont* pFont, SdwTextBoxRecord* pRec); + +protected: + virtual void Read(); + virtual rtl::OUString RegisterStyle(); + virtual XFFrame* CreateDrawObj(const rtl::OUString& rStyleName); + virtual XFFrame* CreateStandardDrawObj(const rtl::OUString& rStyleName); +}; + +/** + * @brief + * Lwp-draw-curved-text object. + */ +class XFDrawPath; +class LwpDrawTextArt : public LwpDrawObj +{ +private: + SdwTextArt m_aTextArtRec; + SdwPoint m_aVector[4]; + +private: + void CreateFWPath(XFDrawPath* pPath); + +public: + LwpDrawTextArt(SvStream* pStream, DrawingOffsetAndScale* pTransData); + virtual ~LwpDrawTextArt(); + +protected: + virtual void Read(); + virtual rtl::OUString RegisterStyle(); + virtual XFFrame* CreateDrawObj(const rtl::OUString& rStyleName); + virtual XFFrame* CreateStandardDrawObj(const rtl::OUString& rStyleName); +}; + +/** + * @brief + * Lwp-draw-metafile object. + */ +class LwpDrawMetafile : public LwpDrawObj +{ +public: + LwpDrawMetafile(SvStream* pStream); + virtual ~LwpDrawMetafile() {} + +protected: + virtual void Read(); + virtual rtl::OUString RegisterStyle() {return rtl::OUString::createFromAscii("");} + virtual XFFrame* CreateDrawObj(const rtl::OUString& rStyleName){return NULL;} + virtual XFFrame* CreateStandardDrawObj(const rtl::OUString& rStyleName){return NULL;} +}; + +/** + * @brief + * Lwp-draw-bitmap object. + */ +class LwpDrawBitmap : public LwpDrawObj +{ +private: + SdwBmpRecord m_aBmpRec; + sal_uInt8* m_pImageData; +public: + LwpDrawBitmap(SvStream* pStream); + virtual ~LwpDrawBitmap(); + +protected: + virtual void Read(); + virtual rtl::OUString RegisterStyle(); + virtual XFFrame* CreateDrawObj(const rtl::OUString& rStyleName); + virtual XFFrame* CreateStandardDrawObj(const rtl::OUString& rStyleName); +}; +#endif diff --git a/lotuswordpro/source/filter/lwpdropcapmgr.cxx b/lotuswordpro/source/filter/lwpdropcapmgr.cxx new file mode 100644 index 000000000000..6c82d251d354 --- /dev/null +++ b/lotuswordpro/source/filter/lwpdropcapmgr.cxx @@ -0,0 +1,82 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Mar 2005 reated + ************************************************************************/ +#include "lwpdropcapmgr.hxx" + +LwpDropcapMgr::LwpDropcapMgr() +{ + m_pXFPara = NULL; +} + +LwpDropcapMgr::~LwpDropcapMgr() +{ +} + +void LwpDropcapMgr::SetXFPara(XFParagraph* pXFPara) +{ + m_pXFPara = pXFPara; +} + +XFParagraph* LwpDropcapMgr::GetXFPara() +{ + return m_pXFPara; +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwpdropcapmgr.hxx b/lotuswordpro/source/filter/lwpdropcapmgr.hxx new file mode 100644 index 000000000000..174fbc7cd808 --- /dev/null +++ b/lotuswordpro/source/filter/lwpdropcapmgr.hxx @@ -0,0 +1,79 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Mar 2005 created + ************************************************************************/ + +#ifndef _LWPDROPCAPMGR_HXX +#define _LWPDROPCAPMGR_HXX + +#include "xfilter/xfparagraph.hxx" + +class LwpDropcapMgr +{ +public: + LwpDropcapMgr(); + ~LwpDropcapMgr(); + void SetXFPara(XFParagraph* pXFPara); + XFParagraph* GetXFPara(); +private: + XFParagraph* m_pXFPara; +}; +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwpfilehdr.cxx b/lotuswordpro/source/filter/lwpfilehdr.cxx new file mode 100644 index 000000000000..d66903312827 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfilehdr.cxx @@ -0,0 +1,83 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "lwpfilehdr.hxx" +#include "lwpdefs.hxx" + +//Word Pro 96: 0x0a, +sal_uInt16 LwpFileHeader::m_nFileRevision = 0; + +LwpFileHeader::LwpFileHeader() + :m_nAppRevision(0), + m_nAppReleaseNo(0), m_nRequiredAppRevision(0), m_nRequiredFileRevision(0), + m_cDocumentID(), m_nRootIndexOffset(0) +{} +/** + * @descr read file header object from svstream + */ +sal_uInt32 LwpFileHeader::Read(LwpSvStream *pStrm) +{ + sal_uInt32 len = 0; + len += pStrm->Read(&m_nAppRevision, sizeof(m_nAppRevision)); + len += pStrm->Read(&m_nFileRevision, sizeof(m_nFileRevision)); + len += pStrm->Read(&m_nAppReleaseNo, sizeof(m_nAppReleaseNo)); + len += pStrm->Read(&m_nRequiredAppRevision, sizeof(m_nRequiredAppRevision)); + len += pStrm->Read(&m_nRequiredFileRevision, sizeof(m_nRequiredFileRevision)); + len += m_cDocumentID.Read(pStrm); + if (m_nFileRevision < 0x000B) + m_nRootIndexOffset = BAD_OFFSET; + else + len += pStrm->Read(&m_nRootIndexOffset, sizeof(m_nRootIndexOffset)); + return(len); +} diff --git a/lotuswordpro/source/filter/lwpfilehdr.hxx b/lotuswordpro/source/filter/lwpfilehdr.hxx new file mode 100644 index 000000000000..891f98846a03 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfilehdr.hxx @@ -0,0 +1,89 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _LWPFILEHEADER_HXX +#define _LWPFILEHEADER_HXX + +#include "lwpobjid.hxx" +/** + * @brief LWP7 object +*/ +class LwpFileHeader +{ +public: + LwpFileHeader(); + ~LwpFileHeader(){}; +private: //data member + sal_uInt16 m_nAppRevision; + sal_uInt16 m_nAppReleaseNo; + sal_uInt16 m_nRequiredAppRevision; + sal_uInt16 m_nRequiredFileRevision; + LwpObjectID m_cDocumentID; + sal_uInt32 m_nRootIndexOffset; +public: + static sal_uInt16 m_nFileRevision; + sal_uInt32 Read(LwpSvStream *pStrm); + sal_uInt32 GetRootIndexOffset(); + LwpObjectID* GetDocID(); +}; +inline sal_uInt32 LwpFileHeader::GetRootIndexOffset() +{ + return m_nRootIndexOffset; +} +inline LwpObjectID* LwpFileHeader::GetDocID() +{ + return &m_cDocumentID; +} + +#endif diff --git a/lotuswordpro/source/filter/lwpfilter.cxx b/lotuswordpro/source/filter/lwpfilter.cxx new file mode 100644 index 000000000000..b02cee90ba09 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfilter.cxx @@ -0,0 +1,593 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Circle object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-1-17 create this file. + ************************************************************************/ +#include "lwpfilter.hxx" +#include "lwpresource.hxx" +//for sax stream +#include "xfilter/xfsaxstream.hxx" +#include "xfilter/xffilestream.hxx" +//for file parser +#include "lwp9reader.hxx" +#include "lwpsvstream.hxx" +//for container reset +#include "xfilter/xffontfactory.hxx" +#include "xfilter/xfstylemanager.hxx" + +#include <osl/file.h> +#include <osl/file.hxx> +#include <vcl/svapp.hxx> +//#include <vcl/vclasynload.hxx> +#include <xmloff/attrlist.hxx> +#include <com/sun/star/io/IOException.hpp> +#include <com/sun/star/frame/XDesktop.hpp> +#include <com/sun/star/frame/XController.hpp> +#include <com/sun/star/text/XTextDocument.hpp> +#include <com/sun/star/text/XText.hpp> + +#include <tools/stream.hxx> +#include <sfx2/docfile.hxx> + +using namespace ::cppu; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::frame; +using namespace ::com::sun::star::text; +using namespace ::com::sun::star::io; +using namespace ::com::sun::star::registry; +using namespace ::com::sun::star::document; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::xml::sax; +using namespace ::com::sun::star; +using ::rtl::OUString; +using ::com::sun::star::uno::Sequence; + +sal_Bool IsWordproFile( uno::Reference<XInputStream>& rInputStream); +sal_Bool IsWordproFile(rtl::OUString file); + +LWPFilterReader::LWPFilterReader() +{ +} + +LWPFilterReader::~LWPFilterReader() +{ +} + +sal_Bool LWPFilterReader::filter( const Sequence< PropertyValue >& aDescriptor ) + throw( RuntimeException ) +{ + uno::Reference< XInputStream> xInputStream; + ::rtl::OUString sURL; + for( sal_Int32 i = 0; i < aDescriptor.getLength(); i++ ) + { + if( aDescriptor[i].Name == OUString::createFromAscii( "InputStream" ) ) + aDescriptor[i].Value >>= xInputStream; + if( aDescriptor[i].Name == OUString::createFromAscii( "URL" ) ) + aDescriptor[i].Value >>= sURL; + } + + if ( !xInputStream.is() ) + { + OSL_ASSERT( 0 ); + return sal_False; + } + + OString sFileName; + sFileName = ::rtl::OUStringToOString(sURL, RTL_TEXTENCODING_INFO_ASCII); + + SvFileStream inputStream( sURL, STREAM_READ ); + if ( inputStream.IsEof() || ( inputStream.GetError() != SVSTREAM_OK ) ) + return sal_False; + + + return (ReadWordproFile( &inputStream ,m_DocumentHandler) == 0); +} + +void LWPFilterReader::cancel() throw (com::sun::star::uno::RuntimeException) +{ +} + +uno::Reference< XInterface > LWPFilterImportFilter_CreateInstance( + const uno::Reference< XMultiServiceFactory >& rSMgr ) throw( Exception ) +{ + LWPFilterImportFilter *p = new LWPFilterImportFilter( rSMgr ); + + return uno::Reference< XInterface > ( (OWeakObject* )p ); +} + +Sequence< OUString > LWPFilterImportFilter::getSupportedServiceNames_Static( void ) throw () +{ + Sequence< OUString > aRet(1); + aRet.getArray()[0] = LWPFilterImportFilter::getImplementationName_Static(); + return aRet; +} + +LWPFilterImportFilter::LWPFilterImportFilter( const uno::Reference< XMultiServiceFactory >& xFact ) +{ + //OUString sService = OUString( SwXMLImport_getImplementationName ); //STR_WRITER_IMPORTER_NAME + + try + { + uno::Reference< XDocumentHandler > xDoc( xFact->createInstance( OUString::createFromAscii( STR_WRITER_IMPORTER_NAME ) ), UNO_QUERY ); + + LWPFilterReader *p = new LWPFilterReader; + p->setDocumentHandler( xDoc ); + + uno::Reference< XImporter > xImporter = uno::Reference< XImporter >( xDoc, UNO_QUERY ); + rImporter = xImporter; + uno::Reference< XFilter > xFilter = uno::Reference< XFilter >( p ); + rFilter = xFilter; + } + catch( Exception & ) + { + exit( 1 ); + } +} + +LWPFilterImportFilter::~LWPFilterImportFilter() +{ +} + +sal_Bool LWPFilterImportFilter::filter( const Sequence< PropertyValue >& aDescriptor ) + throw( RuntimeException ) +{ + sal_Bool ret = rFilter->filter( aDescriptor ); + + return ret; +} + +void LWPFilterImportFilter::cancel() throw (::com::sun::star::uno::RuntimeException) +{ + rFilter->cancel(); +} + +void LWPFilterImportFilter::setTargetDocument( const uno::Reference< XComponent >& xDoc ) + throw( IllegalArgumentException, RuntimeException ) +{ + rImporter->setTargetDocument( xDoc ); +} + +OUString LWPFilterImportFilter::getImplementationName_Static() throw() +{ + return OUString::createFromAscii( STR_IMPLEMENTATION_NAME ); +} + +OUString LWPFilterImportFilter::getImplementationName() throw() +{ + return OUString::createFromAscii( STR_IMPLEMENTATION_NAME ); +} + +sal_Bool LWPFilterImportFilter::supportsService( const OUString& ServiceName ) throw() +{ + Sequence< OUString > aSNL = getSupportedServiceNames(); + const OUString *pArray = aSNL.getConstArray(); + + for ( sal_Int32 i = 0; i < aSNL.getLength(); i++ ) + { + if ( pArray[i] == ServiceName ) return sal_True; + } + + return sal_False; +} + +Sequence< OUString> LWPFilterImportFilter::getSupportedServiceNames( void ) throw() +{ + Sequence< OUString > seq(1); + seq.getArray()[0] = OUString::createFromAscii( STR_SERVICE_NAME ); + return seq; +} + + +::rtl::OUString SAL_CALL LWPFilterImportFilter::detect( ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aDescriptor ) + throw (::com::sun::star::uno::RuntimeException) +{ + rtl::OUString ret; + rtl::OUString aTypeName; // a name describing the type (from MediaDescriptor, usually from flat detection) + // opening as template is done when a parameter tells to do so and a template filter can be detected + // (otherwise no valid filter would be found) or if the detected filter is a template filter and + // there is no parameter that forbids to open as template + sal_Bool bOpenAsTemplate = sal_False; + sal_Int32 nPropertyCount = aDescriptor.getLength(); + for( sal_Int32 nProperty=0; nProperty<nPropertyCount; ++nProperty ) + { + if( aDescriptor[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("TypeName")) ) + { + aDescriptor[nProperty].Value >>= aTypeName; + } + else if( aDescriptor[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("AsTemplate")) ) + { + bOpenAsTemplate = sal_True; + } + } + + for( sal_Int32 i = 0; i < aDescriptor.getLength(); i++ ) + { + OUString strTemp; + aDescriptor[i].Value >>= strTemp; + if( aDescriptor[i].Name == OUString::createFromAscii( "InputStream" ) ) + { + uno::Reference< XInputStream> rInputStream; + aDescriptor[i].Value >>= rInputStream; + // + // TRANSFORM IMPLEMENTATION HERE!!!!!! + // and call m_DocumentHandler's SAX mDochods + // + if( IsWordproFile(rInputStream) ) + { + if( aTypeName == OUString(RTL_CONSTASCII_USTRINGPARAM("wordpro_template")) ) + { + if(!bOpenAsTemplate) + { + aDescriptor.realloc( nPropertyCount + 1 ); + aDescriptor[nPropertyCount].Name = ::rtl::OUString::createFromAscii("AsTemplate"); + aDescriptor[nPropertyCount].Value <<= sal_True; + } + return OUString::createFromAscii("wordpro_template"); + } + else + { + return OUString::createFromAscii("wordpro"); + } + } + return ret; + } + else if( aDescriptor[i].Name == OUString::createFromAscii( "URL" ) ) + { + OUString sURL; + OUString sFileName; + + aDescriptor[i].Value >>= sURL; + /* + osl::FileBase::RC rc = osl::FileBase::getSystemPathFromFileURL( sURL, sFileName ); + if(rc != osl::FileBase::E_None) + { + SAXException except; + except.Message = OUString( RTL_CONSTASCII_USTRINGPARAM( "GDocting system path from URL failed!")); + throw except; + } + */ + //end with .lwp: + if( IsWordproFile(sURL) ) + { + if( aTypeName == OUString(RTL_CONSTASCII_USTRINGPARAM("wordpro_template")) ) + { + if(!bOpenAsTemplate) + { + aDescriptor.realloc( nPropertyCount + 1 ); + aDescriptor[nPropertyCount].Name = ::rtl::OUString::createFromAscii("AsTemplate"); + aDescriptor[nPropertyCount].Value <<= sal_True; + } + return OUString::createFromAscii("wordpro_template"); + } + else + { + return OUString::createFromAscii("wordpro"); + } + } + return ret; + } + } + return ret; +} +#if 0 +EXTERN_C void SAL_CALL +component_getImplementationEnvironment(const sal_Char** ppEnvTypeName, uno_Environment** ppEnv) +{ + *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; +} + +EXTERN_C sal_Bool SAL_CALL +component_writeInfo(void* pServiceManager, void* pRegistryKey) +{ + if (pRegistryKey) + { + try + { + uno::Reference< XRegistryKey > xKey( reinterpret_cast<XRegistryKey*>(pRegistryKey) ); + + uno::Reference< XRegistryKey > xNewKey = xKey->createKey( OUString::createFromAscii( IMPLEMENTATION_NAME ) ); + xNewKey = xNewKey->createKey( OUString::createFromAscii( "/UNO/SERVICES" ) ); + + xNewKey->createKey( OUString::createFromAscii( STR_SERVICE_NAME ) ); + + return sal_True; + } + catch (InvalidRegistryException &) + { + OSL_ENSURE( sal_False, "### InvalidRegistryException!" ); + } + } + return sal_False; +} + +EXTERN_C void* SAL_CALL +component_getFactory(const sal_Char* pImplName, void* pServiceManager, void* pRegistryKey) +{ + void * pRet = 0; + + if(pServiceManager ) + { + uno::Reference< XSingleServiceFactory > xRet; + uno::Reference< XMultiServiceFactory > xSMgr = reinterpret_cast< XMultiServiceFactory * > ( pServiceManager ); + + OUString aImplementationName = OUString::createFromAscii( pImplName ); + + if(aImplementationName == OUString::createFromAscii( STR_IMPLEMENTATION_NAME ) ) + { + xRet = createSingleFactory( xSMgr, aImplementationName, + LWPFilterImportFilter_CreateInstance, + LWPFilterImportFilter::getSupportedServiceNames_Static() ); + } + if (xRet.is()) + { + xRet->acquire(); + pRet = xRet.get(); + } + } + + return pRet; +} +#endif + + /** + * @descr decompressed small file + * @param pCompressed - real file stream + * @param pDecompressed - file decompressed, create inside, caller should delete it + * @return success - sal_True, fail - sal_False + */ +#include "bento.hxx" +using namespace OpenStormBento; +#include "explode.hxx" + sal_Bool Decompress(SvStream *pCompressed, SvStream * & pDecompressed) +{ + pCompressed->Seek(0); + pDecompressed = new SvMemoryStream(4096, 4096); + unsigned char buffer[512]; + pCompressed->Read(buffer, 16); + pDecompressed->Write(buffer, 16); + + LwpSvStream * pLwpStream = new LwpSvStream(pCompressed); + LtcBenContainer* pBentoContainer; + ULONG ulRet = BenOpenContainer(pLwpStream, &pBentoContainer); + LtcUtBenValueStream * pWordProData = (LtcUtBenValueStream *)pBentoContainer->FindValueStreamWithPropertyName("WordProData"); + + // decompressing + Decompression decompress(pWordProData, pDecompressed); + if (0!= decompress.explode()) + { + delete pDecompressed; + pDecompressed = NULL; + delete pWordProData; + delete pLwpStream; + return sal_False; + } + + sal_uInt32 nPos = pWordProData->GetSize(); + nPos += 0x10; + + pCompressed->Seek(nPos); + while (sal_uInt32 iRead = pCompressed->Read(buffer, 512)) + { + pDecompressed->Write(buffer, iRead); + } + + delete pWordProData; + delete pLwpStream; + return sal_True; +} + + /** + * @descr Get LwpSvStream, if small file, both compressed/decompressed stream + * Otherwise, only normal stream + * @param pStream - real file stream + * @param LwpSvStream * , created inside, deleted outside + * @param sal_Bool, sal_True - + */ + sal_Bool GetLwpSvStream(SvStream *pStream, LwpSvStream * & pLwpSvStream) +{ + SvStream * pDecompressed = NULL; + + sal_uInt32 nTag; + pStream->Seek(0x10); + pStream->Read(&nTag, sizeof(nTag)); + if (nTag != 0x3750574c) // "LWP7" + { + // small file, needs decompression + if (!Decompress(pStream, pDecompressed)) + { + pLwpSvStream = NULL; + return sal_True; + } + pStream->Seek(0); + pDecompressed->Seek(0); + } + + pLwpSvStream = NULL; + sal_Bool bCompressed = sal_False; + if (pDecompressed) + { + LwpSvStream *pOriginalLwpSvStream = new LwpSvStream(pStream); + pLwpSvStream = new LwpSvStream(pDecompressed, pOriginalLwpSvStream); + bCompressed = sal_True; + } + else + { + pLwpSvStream = new LwpSvStream(pStream); + } + return bCompressed; +} +int ReadWordproFile(SvStream* pStream, uno::Reference<XDocumentHandler>& xHandler) +{ + try + { + LwpSvStream *pLwpSvStream = NULL; + SvStream * pDecompressed = NULL; + if ( GetLwpSvStream(pStream, pLwpSvStream) && pLwpSvStream) + { + pDecompressed = pLwpSvStream->GetStream(); + } + if (!pLwpSvStream) + { + // nothing returned, fail when uncompressing + return 1; + } + + IXFStream *pStrm = new XFSaxStream(xHandler); + Lwp9Reader reader(pLwpSvStream, pStrm); + //Reset all static objects,because this function may be called many times. + XFGlobalReset(); + reader.Read(); + + // added by + + if (pDecompressed) + { + delete pDecompressed; + LwpSvStream * pTemp = pLwpSvStream->GetCompressedStream(); + delete pTemp; + } + delete pLwpSvStream; + // end added by + + delete pStrm; + return 0; + } + catch (...) + { + return 1; + } + return 1; +} + +void ErrorMsg(int iErrCode) +{ + +} + +/** + * @descr Compare if pBuf equals with the first 16 bytes + * @param pBuf that contains the file data + * @return if equals with the Word Pro characteristic strings + */ +sal_Bool IsWordProStr(const sal_Int8 *pBuf) +{ + sal_Bool bRet = sal_True; + const sal_Int8 pLotusLwp[] = + { + 0x57, 0x6F, 0x72, 0x64, + 0x50, 0x72, 0x6F +#if 0 + , 0, + 0, 0, 0, 0, + 0, 0, 0, 0 +#endif + }; + for(int i=0; i<sizeof(pLotusLwp); i++) + { + if( pBuf[i] != pLotusLwp[i] ) + { + bRet = sal_False; + } + } + return bRet; +} + +sal_Bool IsWordproFile(rtl::OUString file) +{ + sal_Bool bRet = sal_False; + SfxMedium aMedium( file, STREAM_STD_READ, FALSE); + SvStream* pStm = aMedium.GetInStream(); + + if(pStm) + { + sal_Int8 buf[16]; + bRet = sal_True; + sal_Int32 nRead = -1; + + pStm->SetNumberFormatInt( NUMBERFORMAT_INT_LITTLEENDIAN ); + pStm->Seek(STREAM_SEEK_TO_BEGIN); + nRead = pStm->Read(buf, sizeof(buf)); + if( nRead< sizeof(buf) ) + bRet = sal_False; + else + bRet = IsWordProStr(buf); + } + return bRet; +} + + +sal_Bool IsWordproFile( uno::Reference<XInputStream>& rInputStream) +{ + Sequence<sal_Int8> aData; + sal_Int32 nRead = -1; + sal_Bool bRet = sal_False; + + nRead = rInputStream->readBytes(aData,16); + if( nRead != 16 ) + { + bRet = sal_False; + } + else + { + const sal_Int8 *data = aData.getConstArray(); + bRet = IsWordProStr(data); + } + return bRet; +} diff --git a/lotuswordpro/source/filter/lwpfilter.hxx b/lotuswordpro/source/filter/lwpfilter.hxx new file mode 100644 index 000000000000..bf92ab0ccac8 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfilter.hxx @@ -0,0 +1,184 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Circle object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-17 create this file. + ************************************************************************/ +#ifndef _LWPFILTER_HXX +#define _LWPFILTER_HXX + +#include <cppuhelper/implbase1.hxx> +#include <cppuhelper/implbase4.hxx> +#include <cppuhelper/factory.hxx> + +#include <com/sun/star/document/XFilter.hpp> +#include <com/sun/star/document/XImporter.hpp> +#include <com/sun/star/xml/sax/XDocumentHandler.hpp> +#include <com/sun/star/xml/sax/SAXException.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/io/XInputStream.hpp> +#include <com/sun/star/document/XExtendedFilterDetection.hpp> +#include <com/sun/star/text/XTextDocument.hpp> +#include <tools/stream.hxx> + +using namespace ::rtl; +using namespace ::cppu; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::io; +using namespace ::com::sun::star::registry; +using namespace ::com::sun::star::document; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::xml::sax; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::text; +using namespace ::com::sun::star; + +#define EXTERN_C extern "C" + +/** + * @brief + * Implements the XFilter interface. + * This is not the entry for the filter, but a proto of LwpFilterImportFilter. + */ +class LWPFilterReader : public WeakImplHelper1< XFilter > +{ +public: + LWPFilterReader(); + ~LWPFilterReader(); + +public: + /** + * @descr loading the file. It's call be SfxObejctShell::ImportFrom. + * @param aDescriptor the parameters include file URL or XInputStream obejct, from which the filter can + * get which file to import. + */ + virtual sal_Bool SAL_CALL filter( const Sequence< PropertyValue >& aDescriptor ) + throw( RuntimeException ); + + /** + * @descr stop loading the file. + */ + virtual void SAL_CALL cancel() throw (com::sun::star::uno::RuntimeException); + + /** + * @descr get the XDocumentHandler interface. + */ + void setDocumentHandler( uno::Reference< XDocumentHandler >& xHandler ) + { + m_DocumentHandler = xHandler; + } + +private: + uno::Reference< XDocumentHandler > m_DocumentHandler; +}; + +/** + * @brief + * Main entry for the xml filter framework. + * It's called by SfxObjectShell::ImportFrom. + */ +class LWPFilterImportFilter : public WeakImplHelper4< XFilter, XImporter, XServiceInfo, XExtendedFilterDetection > +{ +public: + LWPFilterImportFilter( const uno::Reference< XMultiServiceFactory >& xFact ); + ~LWPFilterImportFilter(); + +public: + static Sequence< OUString > getSupportedServiceNames_Static( void ) throw(); + + static OUString getImplementationName_Static() throw(); +public: + /** + * @descr see LWPFilterReader::filter. + */ + virtual sal_Bool SAL_CALL filter( const Sequence< PropertyValue >& aDescriptor ) + throw( RuntimeException ); + + /** + * @descr see LWPFilterReader::cancel. + */ + virtual void SAL_CALL cancel() throw (com::sun::star::uno::RuntimeException); + + // XImporter + virtual void SAL_CALL setTargetDocument( const uno::Reference< XComponent >& xDoc) + throw( IllegalArgumentException, RuntimeException ); + + // XServiceInfo + OUString SAL_CALL getImplementationName() throw (); + + Sequence< OUString > SAL_CALL getSupportedServiceNames(void) throw (); + + sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw (); + + /** + * @descr function of interface XExtendedFilterDetection. If this interface is registed, it will be called whenever + * a file is to be loaded. + */ + virtual ::rtl::OUString SAL_CALL detect( ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& Descriptor ) throw (::com::sun::star::uno::RuntimeException); + +public: + uno::Reference< XFilter > rFilter; + uno::Reference< XImporter > rImporter; +}; + +int ReadWordproFile(String& strName,uno::Reference<XDocumentHandler>& XDoc); +//test code +int ReadWordproFile(SvStream* pStream, uno::Reference<XDocumentHandler>& XDoc); + +#endif diff --git a/lotuswordpro/source/filter/lwpfnlayout.cxx b/lotuswordpro/source/filter/lwpfnlayout.cxx new file mode 100644 index 000000000000..2649ff03ff38 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfnlayout.cxx @@ -0,0 +1,395 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - footnote layouts + */ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ + +#include "lwpfnlayout.hxx" + +LwpFootnoteLayout::LwpFootnoteLayout(LwpObjectHeader &objHdr, LwpSvStream *pStrm) + :LwpTableLayout(objHdr, pStrm) +{ +} + +LwpFootnoteLayout::~LwpFootnoteLayout() +{} + +/** + * @descr Read object info + */ +void LwpFootnoteLayout::Read() +{ + LwpTableLayout::Read(); + m_pObjStrm->SkipExtra(); +} + +/** + * @descr Do nothing + */ +void LwpFootnoteLayout::RegisterStyle() +{ +} + +/** + * @descr Do nothing + */ +void LwpFootnoteLayout::XFConvert(XFContentContainer * pCont) +{ +} + +LwpFnRowLayout::LwpFnRowLayout(LwpObjectHeader &objHdr, LwpSvStream *pStrm) + :LwpRowLayout(objHdr, pStrm) +{ +} + +LwpFnRowLayout::~LwpFnRowLayout() +{} + +/** + * @descr Read object info + */ +void LwpFnRowLayout::Read() +{ + LwpRowLayout::Read(); + m_pObjStrm->SkipExtra(); +} + +/** + * @descr Register footnote/endnote contents style + */ +void LwpFnRowLayout::RegisterStyle() +{ + // register cells' style + LwpObjectID *pCellID= GetChildHead(); + LwpCellLayout * pCellLayout = static_cast<LwpCellLayout *>(pCellID->obj()); + + while(pCellLayout) + { + pCellLayout->SetFoundry(m_pFoundry); + pCellLayout->RegisterStyle(); + pCellID = pCellLayout->GetNext(); + pCellLayout = static_cast<LwpCellLayout *>(pCellID->obj()); + } +} + +/** + * @descr Do nothing + */ +void LwpFnRowLayout::XFConvert(XFContentContainer * pCont) +{ +} + +LwpFnCellLayout::LwpFnCellLayout(LwpObjectHeader &objHdr, LwpSvStream *pStrm) + :LwpCellLayout(objHdr, pStrm) +{ +} + +LwpFnCellLayout::~LwpFnCellLayout() +{} + +/** + * @descr Read object info + */ +void LwpFnCellLayout::Read() +{ + LwpCellLayout::Read(); + m_pObjStrm->SkipExtra(); +} + +/** + * @descr Register footnote/endnote contents style + */ +void LwpFnCellLayout::RegisterStyle() +{ + // content object register styles + LwpObject * pObj = m_Content.obj(); + if (pObj) + { + pObj->SetFoundry(m_pFoundry); + pObj->RegisterStyle(); + } +} + +/** + * @descr Do nothing + */ +void LwpFnCellLayout::XFConvert(XFContentContainer * pCont) +{ +} + +LwpEndnoteLayout::LwpEndnoteLayout(LwpObjectHeader &objHdr, LwpSvStream *pStrm) + :LwpTableLayout(objHdr, pStrm) +{ +} + +LwpEndnoteLayout::~LwpEndnoteLayout() +{} + +/** + * @descr Read object info + */ +void LwpEndnoteLayout::Read() +{ + LwpTableLayout::Read(); + m_pObjStrm->SkipExtra(); +} + +/** + * @descr Register footnote/endnote contents style + */ +void LwpEndnoteLayout::RegisterStyle() +{ + // register style of rows + LwpObjectID *pRowID = GetChildHead(); + LwpRowLayout * pRowLayout = static_cast<LwpRowLayout *>(pRowID->obj()); + while (pRowLayout) + { + pRowLayout->SetFoundry(m_pFoundry); + pRowLayout->RegisterStyle(); + + pRowID = pRowLayout->GetNext(); + pRowLayout = static_cast<LwpRowLayout *>(pRowID->obj()); + } +} + +/** + * @descr Do nothing + */ +void LwpEndnoteLayout::XFConvert(XFContentContainer * pCont) +{ +} + +LwpEnSuperTableLayout::LwpEnSuperTableLayout(LwpObjectHeader &objHdr, LwpSvStream *pStrm) + :LwpSuperTableLayout(objHdr, pStrm) +{ +} + +LwpEnSuperTableLayout::~LwpEnSuperTableLayout() +{} + +/** + * @descr Read object info + */ +void LwpEnSuperTableLayout::Read() +{ + LwpSuperTableLayout::Read(); + m_pObjStrm->SkipExtra(); +} + +void LwpEnSuperTableLayout::RegisterStyle() +{ + // if this layout is style of real table entry + LwpVirtualLayout* pTableLayout = GetMainTableLayout(); + if (pTableLayout != NULL) + { + pTableLayout->SetFoundry(m_pFoundry); + pTableLayout->RegisterStyle();; + } +} + +/** + * @descr Do nothing + */ +void LwpEnSuperTableLayout::XFConvert(XFContentContainer * pCont) +{ +} + +/** + * @short Get child endnote layout + * @return pointer to endnote layout + */ + LwpVirtualLayout* LwpEnSuperTableLayout::GetMainTableLayout() +{ + LwpObjectID *pID = GetChildTail(); + + while(pID && !pID->IsNull()) + { + LwpVirtualLayout * pLayout = static_cast<LwpVirtualLayout *>(pID->obj()); + if(!pLayout) + { + break; + } + if (pLayout && pLayout->GetLayoutType() == LWP_ENDNOTE_LAYOUT) + { + return pLayout; + } + pID = pLayout->GetPrevious(); + } + + return NULL; +} + +LwpFnSuperTableLayout::LwpFnSuperTableLayout(LwpObjectHeader &objHdr, LwpSvStream *pStrm) + :LwpEnSuperTableLayout(objHdr, pStrm) +{ +} + +LwpFnSuperTableLayout::~LwpFnSuperTableLayout() +{} + +/** + * @descr Read object info + */ +void LwpFnSuperTableLayout::Read() +{ + LwpEnSuperTableLayout::Read(); + m_pObjStrm->SkipExtra(); +} + +/** + * @descr Do nothing + */ +void LwpFnSuperTableLayout::RegisterStyle() +{ +} + +/** + * @descr Do nothing + */ +void LwpFnSuperTableLayout::XFConvert(XFContentContainer * pCont) +{ +} + +/** + * @short Get child footnote layout + * @return pointer to footnote layout + */ +LwpVirtualLayout* LwpFnSuperTableLayout::GetMainTableLayout() +{ + LwpObjectID *pID = GetChildTail(); + + while(pID && !pID->IsNull()) + { + LwpVirtualLayout * pLayout = static_cast<LwpVirtualLayout *>(pID->obj()); + if(!pLayout) + { + break; + } + if (pLayout && pLayout->GetLayoutType() == LWP_FOOTNOTE_LAYOUT) + { + return pLayout; + } + pID = pLayout->GetPrevious(); + } + + return NULL; +} + +LwpContFromLayout::LwpContFromLayout(LwpObjectHeader &objHdr, LwpSvStream *pStrm) + :LwpPlacableLayout(objHdr, pStrm) +{ +} + +LwpContFromLayout::~LwpContFromLayout() +{} + +/** + * @descr Read object info + */ +void LwpContFromLayout::Read() +{ + LwpPlacableLayout::Read(); + m_pObjStrm->SkipExtra(); +} + +/** + * @descr Do nothing + */ +void LwpContFromLayout::RegisterStyle() +{ +} + +/** + * @descr Do nothing + */ +void LwpContFromLayout::XFConvert(XFContentContainer * pCont) +{ +} + +LwpContOnLayout::LwpContOnLayout(LwpObjectHeader &objHdr, LwpSvStream *pStrm) + :LwpPlacableLayout(objHdr, pStrm) +{ +} + +LwpContOnLayout::~LwpContOnLayout() +{} + +/** + * @descr Read object info + */ +void LwpContOnLayout::Read() +{ + LwpPlacableLayout::Read(); + m_pObjStrm->SkipExtra(); +} + +/** + * @descr Do nothing + */ +void LwpContOnLayout::RegisterStyle() +{ +} + +/** + * @descr Do nothing + */ +void LwpContOnLayout::XFConvert(XFContentContainer * pCont) +{ +} diff --git a/lotuswordpro/source/filter/lwpfnlayout.hxx b/lotuswordpro/source/filter/lwpfnlayout.hxx new file mode 100644 index 000000000000..0c3efd91c75d --- /dev/null +++ b/lotuswordpro/source/filter/lwpfnlayout.hxx @@ -0,0 +1,195 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - footnote layouts + */ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ +#ifndef _LWP_FNLAYOUT_HXX +#define _LWP_FNLAYOUT_HXX + +#include "lwptablelayout.hxx" + +/** + * @brief VO_FOOTNOTELAYOUT object + * +*/ +class LwpFootnoteLayout : public LwpTableLayout +{ +public: + LwpFootnoteLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpFootnoteLayout(); + void RegisterStyle(); + virtual void XFConvert(XFContentContainer * pCont); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_FOOTNOTE_LAYOUT;} +protected: + void Read(); +}; + +/** + * @brief VO_FNROWLAYOUT object + * +*/ +class LwpFnRowLayout : public LwpRowLayout +{ +public: + LwpFnRowLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpFnRowLayout(); + void RegisterStyle(); + virtual void XFConvert(XFContentContainer * pCont); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_FOOTNOTE_ROW_LAYOUT;} +protected: + void Read(); +}; + +/** + * @brief VO_FNCELLLAYOUT object + * +*/ +class LwpFnCellLayout : public LwpCellLayout +{ +public: + LwpFnCellLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpFnCellLayout(); + void RegisterStyle(); + virtual void XFConvert(XFContentContainer * pCont); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_FOOTNOTE_CELL_LAYOUT;} +protected: + void Read(); +}; + +/** + * @brief VO_ENDNOTELAYOUT object + * +*/ +class LwpEndnoteLayout : public LwpTableLayout +{ +public: + LwpEndnoteLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpEndnoteLayout(); + void RegisterStyle(); + virtual void XFConvert(XFContentContainer * pCont); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_ENDNOTE_LAYOUT;} +protected: + void Read(); +}; + +/** + * @brief VO_ENSUPERTABLELAYOUT object + * +*/ +class LwpEnSuperTableLayout : public LwpSuperTableLayout +{ +public: + LwpEnSuperTableLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpEnSuperTableLayout(); + void RegisterStyle(); + void XFConvert(XFContentContainer* pCont); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_ENDNOTE_SUPERTABLE_LAYOUT;} + virtual LwpVirtualLayout* GetMainTableLayout(); +protected: + void Read(); +}; + +/** + * @brief VO_FNSUPERTABLELAYOUT object + * +*/ +class LwpFnSuperTableLayout : public LwpEnSuperTableLayout +{ +public: + LwpFnSuperTableLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpFnSuperTableLayout(); + void RegisterStyle(); + void XFConvert(XFContentContainer* pCont); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_FOOTNOTE_SUPERTABLE_LAYOUT;} + virtual LwpVirtualLayout* GetMainTableLayout(); +protected: + void Read(); +}; + +/** + * @brief VO_CONTFROMLAYOUT object + * +*/ +class LwpContFromLayout : public LwpPlacableLayout +{ +public: + LwpContFromLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpContFromLayout(); + void RegisterStyle(); + void XFConvert(XFContentContainer* pCont); +protected: + void Read(); +}; + +/** + * @brief VO_CONTONLAYOUT object + * +*/ +class LwpContOnLayout : public LwpPlacableLayout +{ +public: + LwpContOnLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpContOnLayout(); + void RegisterStyle(); + void XFConvert(XFContentContainer* pCont); +protected: + void Read(); +}; +#endif diff --git a/lotuswordpro/source/filter/lwpfont.cxx b/lotuswordpro/source/filter/lwpfont.cxx new file mode 100644 index 000000000000..86d42f18b9e1 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfont.cxx @@ -0,0 +1,556 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "lwpglobalmgr.hxx" +#include "lwpfont.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xffontfactory.hxx" + +void LwpFontAttrEntry::Read(LwpObjectStream *pStrm) +{ + pStrm->QuickRead(&m_nAttrBits, sizeof(m_nAttrBits)); + pStrm->QuickRead(&m_nAttrOverrideBits, sizeof(m_nAttrOverrideBits)); + pStrm->QuickRead(&m_nAttrApplyBits, sizeof(m_nAttrApplyBits)); + pStrm->QuickRead(&m_nAttrOverrideBits2, sizeof(m_nAttrOverrideBits2)); + pStrm->QuickRead(&m_nAttrApplyBits2, sizeof(m_nAttrApplyBits2)); + pStrm->QuickRead(&m_nCase, sizeof(m_nCase)); + pStrm->QuickRead(&m_nUnder, sizeof(m_nUnder)); + pStrm->SkipExtra(); +} + +#include "xfilter/xfdefs.hxx" +void LwpFontAttrEntry::Override( XFFont*pFont ) +{ + if (IsBoldOverridden()) + pFont->SetBold(Is(BOLD)); + + if (IsItalicOverridden()) + pFont->SetItalic(Is(ITALIC)); + + if (IsStrikeThruOverridden()) + { + if(Is(STRIKETHRU)) + { + pFont->SetCrossout(enumXFCrossoutSignel); + } + else + { + pFont->SetCrossout(enumXFCrossoutNone); + } + } + + if (IsSuperOverridden()) + { + if(Is(SUPERSCRIPT)) + pFont->SetPosition(TRUE); + } + + if (IsSubOverridden()) + { + if(Is(SUBSCRIPT)) + pFont->SetPosition(FALSE); + } + + if (IsUnderlineOverridden()) + { + switch(m_nUnder) + { + case UNDER_SINGLE: + pFont->SetUnderline(enumXFUnderlineSingle); + break; + case UNDER_DOUBLE: + pFont->SetUnderline(enumXFUnderlineDouble); + break; + case UNDER_WORD_SINGLE: + pFont->SetUnderline(enumXFUnderlineSingle, true); + break; + case UNDER_WORD_DOUBLE: + pFont->SetUnderline(enumXFUnderlineSingle, true); + break; + case UNDER_DONTCARE: //fall through + case UNDER_OFF: //fall through + case UNDER_STYLE: //fall through + default: + break; + //do nothing; + } + } + + if (IsCaseOverridden()) + { + switch(m_nCase) + { + case CASE_UPPER: + pFont->SetTransform(enumXFTransformUpper); + break; + case CASE_LOWER: + pFont->SetTransform(enumXFTransformLower); + break; + case CASE_NORMAL: + pFont->SetTransform(enumXFTransformNone); + break; + case CASE_INITCAPS: + pFont->SetTransform(enumXFTransformCapitalize); + break; + case CASE_STYLE: //fall through + case CASE_DONTCARE: //fall through + default: + //do nothing + ; + } + } + + //Please note that, put the SmallCaps setting after the case setting, + //for SmallCaps has higher priority than LowerCase but low + if (IsSmallCapsOverridden()) + { + if( pFont->GetTransform()!=enumXFTransformUpper ) //SmallCaps should not override upper case + { + if(Is(SMALLCAPS)) + pFont->SetTransform(enumXFTransformSmallCaps); + } + } + + // TODO: tightness + //if (IsTightnessOverridden()) + // pFont->SetTightness(cTightness);*/ +} + +BOOL LwpFontAttrEntry::Is(sal_uInt16 Attr) +{ + return (0 != (m_nAttrBits & Attr)); +} + +BOOL LwpFontAttrEntry::IsBoldOverridden() +{ + return (0 != (m_nAttrOverrideBits & BOLD)); +} + +BOOL LwpFontAttrEntry::IsItalicOverridden() +{ + return (0 != (m_nAttrOverrideBits & ITALIC)); +} +BOOL LwpFontAttrEntry::IsStrikeThruOverridden() +{ + return (0 != (m_nAttrOverrideBits & STRIKETHRU)); +} +BOOL LwpFontAttrEntry::IsSmallCapsOverridden() +{ + return (0 != (m_nAttrOverrideBits & SMALLCAPS)); +} +BOOL LwpFontAttrEntry::IsSuperOverridden() +{ + return (0 != (m_nAttrOverrideBits & SUPERSCRIPT)); + +} +BOOL LwpFontAttrEntry::IsSubOverridden() +{ + return (0 != (m_nAttrOverrideBits & SUBSCRIPT)); + +} + +BOOL LwpFontAttrEntry::IsSuperSubOverridden() +{ + return (0 != (m_nAttrOverrideBits + & (SUPERSCRIPT | SUBSCRIPT))); +} + +BOOL LwpFontAttrEntry::IsUnderlineOverridden() +{ + return (0 != (m_nAttrOverrideBits2 & UNDER)); +} +BOOL LwpFontAttrEntry::IsCaseOverridden() +{ + return (0 != (m_nAttrOverrideBits2 & CASE)); +} + +void LwpFontTableEntry::Read(LwpObjectStream *pStrm) +{ + m_WindowsFaceName.Read(pStrm); + + // use the m_WindowsFaceName to set the m_FaceName temporarily + m_FaceName = m_WindowsFaceName; + + //Skip the panoseNumber + //m_PanoseNumber.Read(pStrm); + LwpPanoseNumber thePanoseToSkip; + thePanoseToSkip.Read(pStrm); + + pStrm->SkipExtra(); + + RegisterFontDecl(); +} + +OUString LwpFontTableEntry::GetFaceName() +{ + return (m_WindowsFaceName.str()); +} + +void LwpFontTableEntry::RegisterFontDecl() +{ + if(m_FaceName.str().getLength()==0) return; + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + XFFontDecl aFontDecl1( m_FaceName.str(), m_FaceName.str(), false ); + pXFStyleManager->AddFontDecl(aFontDecl1); +} + +LwpFontTable::LwpFontTable() + : m_pFontEntries(NULL) +{} + +void LwpFontTable::Read(LwpObjectStream *pStrm) +{ + m_pFontEntries = NULL; + pStrm->QuickRead(&m_nCount, sizeof(m_nCount)); + if(m_nCount>0) + { + m_pFontEntries = new LwpFontTableEntry[m_nCount]; + for(sal_uInt16 i=0; i<m_nCount; i++) + { + m_pFontEntries[i].Read(pStrm); + } + } + pStrm->SkipExtra(); +} + +OUString LwpFontTable::GetFaceName(sal_uInt16 index) //index: start from 1 +{ + assert(index>0); + if (index < 1)//add by , for fix crash,2005/12/20 + return OUString::createFromAscii("");//add end + return m_pFontEntries[index-1].GetFaceName(); +} + +LwpFontTable::~LwpFontTable() +{ + if(m_pFontEntries) + { + delete [] m_pFontEntries; + m_pFontEntries = NULL; + } +} + +void LwpFontNameEntry::Read(LwpObjectStream *pStrm) +{ + //Read CFontDescriptionOverrideBase + pStrm->QuickRead(&m_nOverrideBits, sizeof(m_nOverrideBits)); + pStrm->QuickRead(&m_nApplyBits, sizeof(m_nApplyBits)); + pStrm->QuickRead(&m_nPointSize, sizeof(m_nPointSize)); + pStrm->QuickRead(&m_nOverstrike, sizeof(m_nOverstrike)); + pStrm->QuickRead(&m_nTightness, sizeof(m_nTightness)); + m_Color.Read(pStrm); + m_BackColor.Read(pStrm); + pStrm->SkipExtra(); + + //Read data of LwpFontNameEntry + pStrm->QuickRead(&m_nFaceName, sizeof(m_nFaceName)); + pStrm->QuickRead(&m_nAltFaceName, sizeof(m_nAltFaceName)); + pStrm->SkipExtra(); +} +#include "xfilter/xfcolor.hxx" +void LwpFontNameEntry::Override(XFFont* pFont) +{ + if (IsPointSizeOverridden()) + pFont->SetFontSize(static_cast<sal_uInt8>(m_nPointSize/65536L)); + + if (IsColorOverridden() && m_Color.IsValidColor()) + { + XFColor aColor(m_Color.To24Color()); + pFont->SetColor(aColor); + } + + + if (IsBackgroundColorOverridden() ) + { + if (m_BackColor.IsValidColor()) + { + XFColor aColor(m_BackColor.To24Color()); + pFont->SetBackColor( aColor ); + } + else if (m_BackColor.IsTransparent()) + { + pFont->SetBackColorTransparent(); + } + } + + // TODO: tightness + //if (IsTightnessOverridden()) + // pFont->SetTightness(cTightness); +} + +BOOL LwpFontNameEntry::IsFaceNameOverridden() +{ + return (0 != (m_nOverrideBits & FACENAME)); +} + +BOOL LwpFontNameEntry::IsAltFaceNameOverridden() +{ + return (0 != (m_nOverrideBits & ALTFACENAME)); +} + +BOOL LwpFontNameEntry::IsPointSizeOverridden() +{ + return (0 != (m_nOverrideBits & POINTSIZE)); +} + +BOOL LwpFontNameEntry::IsColorOverridden() +{ + return (0 != (m_nOverrideBits & COLOR)); +} + +BOOL LwpFontNameEntry::IsBackgroundColorOverridden() +{ + return (0 != (m_nOverrideBits & BKCOLOR)); +} + +BOOL LwpFontNameEntry::IsTightnessOverridden() +{ + return (0 != (m_nOverrideBits & TIGHTNESS)); +} + +BOOL LwpFontNameEntry::IsAnythingOverridden() +{ + return (0 != (m_nOverrideBits & ALL_BITS)); +} + + +LwpFontNameManager::LwpFontNameManager() + :m_pFontNames(NULL) +{} + +LwpFontNameManager::~LwpFontNameManager() +{ + if(m_pFontNames) + { + delete [] m_pFontNames; + m_pFontNames = NULL; + } +} + +void LwpFontNameManager::Read(LwpObjectStream *pStrm) +{ + pStrm->QuickRead(&m_nCount, sizeof(m_nCount)); + if(m_nCount>0) + { + m_pFontNames = new LwpFontNameEntry[m_nCount]; + for(sal_uInt16 i=0; i<m_nCount; i++) + { + m_pFontNames[i].Read(pStrm); + } + } + m_FontTbl.Read(pStrm); + pStrm->SkipExtra(); +} + +void LwpFontNameManager::Override(sal_uInt16 index, XFFont* pFont) + //index: start from 1 +{ + if(index<1) return; + m_pFontNames[index-1].Override(pFont); + if(m_pFontNames[index-1].IsFaceNameOverridden()) + pFont->SetFontName(m_FontTbl.GetFaceName(m_pFontNames[index-1].GetFaceID())); + if(m_pFontNames[index-1].IsAltFaceNameOverridden()) + pFont->SetFontNameAsia(m_FontTbl.GetFaceName(m_pFontNames[index-1].GetAltFaceID())); +} +OUString LwpFontNameManager::GetNameByIndex(sal_uInt16 index) +{ + sal_uInt16 nameindex = m_pFontNames[index-1].GetFaceID(); + return (m_FontTbl.GetFaceName(nameindex)); +} + +/*void LwpFontNameManager::Override(sal_uInt16 baseID, sal_uInt16 overID, XFFont* pFont) +{ + //Override + m_pFontNames[overID-1]. Override(&m_pFontNames[baseID-1], pFont); +} + +void LwpFontAttrManager::Override(sal_uInt16 baseID, sal_uInt16 overID, XFFont*pFont) +{ + m_pFontAttrs[overID-1]. Override(&m_pFontAttrs[baseID-1], pFont); +}*/ + +void LwpFontAttrManager::Read(LwpObjectStream *pStrm) { + pStrm->QuickRead(&m_nCount, sizeof(m_nCount)); + m_pFontAttrs = new LwpFontAttrEntry[m_nCount]; + + for(sal_uInt16 i=0; i<m_nCount; i++) + { + m_pFontAttrs[i].Read(pStrm); + } + pStrm->SkipExtra(); +} + +void LwpFontAttrManager::Override(sal_uInt16 index, XFFont* pFont) + //index: start from 1 +{ + if(index<1) return; + m_pFontAttrs[index-1].Override(pFont); +} + +LwpFontAttrManager::~LwpFontAttrManager() +{ + if(m_pFontAttrs) + delete []m_pFontAttrs; +} + +void LwpFontManager::Read(LwpObjectStream *pStrm) +{ + m_FNMgr.Read(pStrm); + m_AttrMgr.Read(pStrm); + pStrm->SkipExtra(); + +} + +#include "xfilter/xftextstyle.hxx" + +/* +VO_PARASTYLE call this method to add its style to XFStyleManager based on the fontID +1. Construct the text style based on the fontID +2. Add the style to XFStyleManager, and return the <office:styles> style name +3. Add it to LwpParaStyleMap. +Note: A temporary method for only font support phase. The next AddStyle should be used later. +// To be replaced by LwpStyleManager::AddStyle() and the following CreateFont() +*/ +/*void LwpFontManager::AddStyle(LwpObjectID styleObjID, sal_uInt32 fontID, OUString styleName) +{ + XFTextStyle* pStyle = new XFTextStyle(); //to be deleted by XFStyleManager + AddStyle(styleObjID, fontID, styleName, pStyle); +}*/ + +/* +VO_PARASTYLE/VO_CHARACTERSTYLE call this method to add its style to XFStyleManager based on the fontID +1. Construct the text style based on the fontID +2. Add the style to XFStyleManager, and return the <office:styles> style name +3. Add it to LwpParaStyleMap. +Prerequisite: pStyle has been created and the paragraph properties has been set to it. +//To be replaced by LwpStyleManager::AddStyle() and the following CreateFont() +*/ +/*void LwpFontManager::AddStyle(LwpObjectID styleObjID, sal_uInt32 fontID, OUString styleName, XFTextStyle* pStyle) +{ + assert(pStyle); + XFFont* pFont = CreateFont(fontID); + pStyle->SetFont(pFont); + pStyle->SetStyleName(styleName); + XFStyleManager::AddStyle(pStyle); + m_StyleList.insert(LwpParaStyleMap::value_type(styleObjID, styleName)); +}*/ + +/* +Create XFFont based on the fotID +*/ +XFFont* LwpFontManager::CreateFont(sal_uInt32 fontID) +{ + XFFont* pFont = new XFFont(); + SetDfltFont(pFont); + m_FNMgr.Override(GetFontNameIndex(fontID), pFont); + m_AttrMgr.Override(GetFontAttrIndex(fontID), pFont); + return pFont; +} + +/* +Called XFFont based on the override result of two font ids. +Refer to CFontManager::OverrideID +*/ +//OUString LwpFontManager::GetOverrideStyle(sal_uInt32 fontID, sal_uInt32 overID) +XFFont* LwpFontManager::CreateOverrideFont(sal_uInt32 fontID, sal_uInt32 overID) +{ + XFFont* pFont = new XFFont(); //To be deleted by XFFontFactory + SetDfltFont(pFont); + if(fontID) + { + Override(fontID, pFont); + } + if(overID) + { + Override(overID, pFont); + } + return pFont; +} + +void LwpFontManager::Override(sal_uInt32 fontID, XFFont* pFont) +{ + m_FNMgr.Override(GetFontNameIndex(fontID), pFont); + m_AttrMgr.Override(GetFontAttrIndex(fontID), pFont); +} + + +/* +Called by VO_PARA to get style name based on the Para Style ID +1) Get style from LwpParaStyleMap based on the LwpObjectID of VO_PARASTYLE. +2) Prerequisite: VO_PARASTYLE should call AddStyle first. +3) Return empty string if no style found. +//To be replaced by OUString LwpStyleManager::GetStyle(const LwpObjectID &styleID) +*/ +/*OUString LwpFontManager::GetParaStyle(const LwpObjectID &styleID) +{ + LwpParaStyleMap::const_iterator it = m_StyleList.find(styleID); + if (it != m_StyleList.end()) { + return((*it).second); + } + return OUString(); +}*/ + +void LwpFontManager::SetDfltFont(XFFont* pFont) +{ + // TODO: Set default XFFont values in lwp filter + //color:black, background color: transparent, Orientation: left to right, top to bottom, others: 0 + //Refer to CFontDescription::CFontDescription(void) + //Did not find anything special + //pFont->SetColor(XFColor(0,0,0)); +} + +OUString LwpFontManager::GetNameByID(sal_uInt32 fontID) +{ + return ( m_FNMgr.GetNameByIndex(GetFontNameIndex(fontID)) );//use font id for bullet? note by ,2005/7/5 +} diff --git a/lotuswordpro/source/filter/lwpfont.hxx b/lotuswordpro/source/filter/lwpfont.hxx new file mode 100644 index 000000000000..c4100cdf9a8a --- /dev/null +++ b/lotuswordpro/source/filter/lwpfont.hxx @@ -0,0 +1,283 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Font manager related classes header file + * LwpFontTableEntry, LwpFontTable, LwpFontNameEntry, + * LwpFontAttrEntry, LwpFontNameManager,LwpFontAttrManager, + * LwpFontManager + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPFONT_HXX +#define _LWPFONT_HXX + +#include "lwpheader.hxx" +#include "lwpobjstrm.hxx" +#include "lwpatomholder.hxx" +#include "lwpcolor.hxx" +#include "lwpbasetype.hxx" +#include "lwpobj.hxx" +#include "xfilter/xffont.hxx" +#include "xfilter/xftextstyle.hxx" + +class LwpFontTableEntry +{ +public: + LwpFontTableEntry(){}; + ~LwpFontTableEntry(){}; +public: + void Read(LwpObjectStream *pStrm); + OUString GetFaceName(); +private: + LwpAtomHolder m_WindowsFaceName; //font face name under windows + LwpAtomHolder m_FaceName; //font face name + void RegisterFontDecl(); + //Not useful now, so skip + //LwpPanoseNumber m_PanoseNumber; +}; + +class LwpFontTable +{ +public: + LwpFontTable(); + ~LwpFontTable(); +public: + void Read(LwpObjectStream *pStrm); + OUString GetFaceName(sal_uInt16 index); //index: start from 1 +// void RegisterFontDecls(); +private: + sal_uInt16 m_nCount; + LwpFontTableEntry* m_pFontEntries; +}; + + +class LwpFontNameEntry +{ +public: + LwpFontNameEntry(){}; + ~LwpFontNameEntry(){}; +public: + void Read(LwpObjectStream *pStrm); + inline sal_uInt16 GetFaceID(){return m_nFaceName;}; + inline sal_uInt16 GetAltFaceID(){return m_nAltFaceName;}; + void Override(XFFont* pFont); + inline BOOL IsFaceNameOverridden(); + inline BOOL IsAltFaceNameOverridden(); +private: + //Data of CFontDescriptionOverrideBase + sal_uInt8 m_nOverrideBits; + sal_uInt8 m_nApplyBits; + sal_uInt32 m_nPointSize; + sal_uInt16 m_nOverstrike; + sal_uInt16 m_nTightness; + LwpColor m_Color; + LwpColor m_BackColor; + //Data of LwpFontNameEntry + sal_uInt16 m_nFaceName; //CFontTableID + sal_uInt16 m_nAltFaceName; //CFontTableID + enum + { + POINTSIZE = 0x01, + COLOR = 0x02, + OVERSTRIKE = 0x04, + TIGHTNESS = 0x08, + FACENAME = 0x10, + BKCOLOR = 0x20, + ALTFACENAME = 0x40, + ALL_BITS = (POINTSIZE | COLOR | OVERSTRIKE + | ALTFACENAME + | TIGHTNESS | FACENAME | BKCOLOR) + }; + + inline BOOL IsPointSizeOverridden(); + inline BOOL IsColorOverridden(); + inline BOOL IsBackgroundColorOverridden(); + inline BOOL IsTightnessOverridden(); + inline BOOL IsAnythingOverridden(); +}; + +class LwpFontNameManager +{ +public: + LwpFontNameManager(); + ~LwpFontNameManager(); + OUString GetNameByIndex(sal_uInt16 index); +private: + sal_uInt16 m_nCount; + LwpFontNameEntry* m_pFontNames; + LwpFontTable m_FontTbl; + +public: + void Read(LwpObjectStream *pStrm); + void Override(sal_uInt16 index, XFFont* pFont); +}; + +class LwpFontAttrEntry +{ +public: + LwpFontAttrEntry(){}; + ~LwpFontAttrEntry(){}; +public: + void Read(LwpObjectStream *pStrm); + void Override(XFFont*pFont); +private: + sal_uInt16 m_nAttrBits; + sal_uInt16 m_nAttrOverrideBits; + sal_uInt16 m_nAttrApplyBits; + sal_uInt8 m_nAttrOverrideBits2; + sal_uInt8 m_nAttrApplyBits2; + sal_uInt8 m_nCase; + sal_uInt8 m_nUnder; + enum + { + BOLD = 0x0001, + ITALIC = 0x0002, + STRIKETHRU = 0x0004, + + SUPERSCRIPT = 0x0100, + SUBSCRIPT = 0x0200, + + SMALLCAPS = 0x0400, + + ALL_ATTRS = BOLD | ITALIC | STRIKETHRU + | SUPERSCRIPT | SUBSCRIPT + | SMALLCAPS, + + CASE_DONTCARE = 0, + CASE_NORMAL = 1, + CASE_UPPER = 2, + CASE_LOWER = 3, + CASE_INITCAPS = 4, + CASE_STYLE = 7, + + UNDER_DONTCARE = 0, + UNDER_OFF = 1, + UNDER_SINGLE = 2, + UNDER_DOUBLE = 3, + UNDER_WORD_SINGLE = 4, + UNDER_WORD_DOUBLE = 5, + UNDER_STYLE = 7, + + CASE = 0x01, + UNDER = 0x02, + ALL_ATTRS2 = CASE | UNDER + }; + BOOL Is(sal_uInt16 Attr); + BOOL IsBoldOverridden(); + BOOL IsItalicOverridden(); + BOOL IsStrikeThruOverridden(); + BOOL IsSmallCapsOverridden(); + BOOL IsSuperOverridden(); + BOOL IsSubOverridden(); + BOOL IsSuperSubOverridden(); + BOOL IsUnderlineOverridden(); + BOOL IsCaseOverridden(); + +}; + +class LwpFontAttrManager +{ +public: + LwpFontAttrManager():m_pFontAttrs(NULL){}; + ~LwpFontAttrManager(); +public: + void Read(LwpObjectStream *pStrm); + void Override(sal_uInt16 index, XFFont*pFont); +private: + sal_uInt16 m_nCount; + LwpFontAttrEntry* m_pFontAttrs; +}; + +class LwpFontManager +{ +public: + LwpFontManager(){}; + ~LwpFontManager(){}; +private: + LwpFontNameManager m_FNMgr; + LwpFontAttrManager m_AttrMgr; + sal_uInt32 m_nDlfTxtStyleFontID; + +public: + void Read(LwpObjectStream *pStrm); + XFFont* CreateOverrideFont(sal_uInt32 fontID, sal_uInt32 overID); + XFFont* CreateFont(sal_uInt32 fontID); + OUString GetNameByID(sal_uInt32 fontID); + //void AddStyle(LwpObjectID styleObjID, sal_uInt32 fontID, OUString styleName); + //void AddStyle(LwpObjectID styleObjID, sal_uInt32 fontID, OUString styleName, XFTextStyle* pStyle); + //OUString GetOverrideStyle(sal_uInt32 fontID, sal_uInt32 overID); + +private: + void Override(sal_uInt32 fontID, XFFont* pFont); + inline sal_uInt16 GetFontNameIndex(sal_uInt32 fontID); + inline sal_uInt16 GetFontAttrIndex(sal_uInt32 fontID); + void SetDfltFont(XFFont* pFont); +}; + +sal_uInt16 LwpFontManager::GetFontNameIndex(sal_uInt32 fontID) +{ + return static_cast<sal_uInt16>((fontID>>16)&0xFFFF); +} + +sal_uInt16 LwpFontManager::GetFontAttrIndex(sal_uInt32 fontID) +{ + return static_cast<sal_uInt16>(fontID); +} + +#endif diff --git a/lotuswordpro/source/filter/lwpfootnote.cxx b/lotuswordpro/source/filter/lwpfootnote.cxx new file mode 100644 index 000000000000..193adb1c9a78 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfootnote.cxx @@ -0,0 +1,595 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * footnote + */ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ +#include "lwpfootnote.hxx" +#include "lwpstory.hxx" +#include "xfilter/xffootnote.hxx" +#include "xfilter/xfendnote.hxx" +#include "xfilter/xffootnoteconfig.hxx" +#include "xfilter/xfendnoteconfig.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xftextspan.hxx" +#include "lwppara.hxx" +#include "lwpdoc.hxx" +#include "lwpfnlayout.hxx" +#include "lwpglobalmgr.hxx" + +LwpFribFootnote::LwpFribFootnote(LwpPara* pPara ):LwpFrib(pPara) +{ +} + +/** + * @descr read footnote frib information + */ +void LwpFribFootnote::Read(LwpObjectStream *pObjStrm, sal_uInt16 len) +{ + m_Footnote.ReadIndexed(pObjStrm); +} + +/** + * @descr Register footnote style by calling LwpFootnote::RegisterStyle() + */ +void LwpFribFootnote::RegisterStyle() +{ + LwpFootnote* pFootnote = GetFootnote(); + if(pFootnote) + { + //register footnote number font style + LwpFrib::RegisterStyle(m_pPara->GetFoundry()); + //register footnote content style + pFootnote->SetFoundry(m_pPara->GetFoundry()); + pFootnote->RegisterStyle(); + } +} + +/** + * @descr Parse footnote by calling LwpFootnote::XFConvert() + */ +void LwpFribFootnote::XFConvert(XFContentContainer* pCont) +{ + LwpFootnote* pFootnote = GetFootnote(); + if(pFootnote) + { + XFContentContainer* pContent = NULL; + if(pFootnote->GetType() == FN_FOOTNOTE) + { + pContent = new XFFootNote(); + } + else + { + pContent = new XFEndNote(); + } + pFootnote->XFConvert(pContent); + if(m_ModFlag) + { + //set footnote number font style + XFTextSpan *pSpan = new XFTextSpan(); + pSpan->SetStyleName(GetStyleName()); + //add the xffootnote into the content container + pSpan->Add(pContent); + pCont->Add(pSpan); + } + else + { + pCont->Add(pContent); + } + } +} + +/** + * @descr Get foonote object + */ +LwpFootnote* LwpFribFootnote::GetFootnote() +{ + return static_cast<LwpFootnote*>(m_Footnote.obj()); +} + + +LwpFootnote::LwpFootnote(LwpObjectHeader &objHdr, LwpSvStream *pStrm) + : LwpOrderedObject(objHdr, pStrm) +{ +} + +LwpFootnote::~LwpFootnote() +{ + +} + +/** + * @descr Read foonote object + */ +void LwpFootnote::Read() +{ + LwpOrderedObject::Read(); + m_pObjStrm->QuickRead(&m_nType, sizeof(m_nType)); + m_pObjStrm->QuickRead(&m_nRow, sizeof(m_nRow)); + m_Content.ReadIndexed(m_pObjStrm); + m_pObjStrm->SkipExtra(); +} + +/** + * @descr Register footnote style + */ +void LwpFootnote::RegisterStyle() +{ + //Only register footnote contents style, + //Endnote contents style registers in LwpEnSuperTableLayout::RegisterStyle + if(m_nType == FN_FOOTNOTE) + { + LwpContent* pContent = FindFootnoteContent(); + if(pContent) + { + pContent->SetFoundry(m_pFoundry); + pContent->RegisterStyle(); + } + } +} + +/** + * @descr Parse footnote + */ +void LwpFootnote::XFConvert(XFContentContainer * pCont) +{ + LwpContent* pContent = FindFootnoteContent(); + if(pContent) + { + pContent->XFConvert(pCont); + } +} + +/** + * @descr Get endnote cell layout which contains current endnote content + */ +LwpCellLayout* LwpFootnote::GetCellLayout() +{ + LwpEnSuperTableLayout* pEnSuperLayout = FindFootnoteTableLayout(); + if(pEnSuperLayout) + { + LwpTableLayout* pTableLayout = static_cast<LwpTableLayout*>(pEnSuperLayout->GetMainTableLayout()); + if(pTableLayout) + { + LwpRowLayout* pRowLayout = pTableLayout->GetRowLayout(m_nRow); + if(pRowLayout) + { + return static_cast<LwpCellLayout*>(pRowLayout->GetChildHead()->obj()); + } + } + } + return NULL; +} +/** + * @descr Get endnote supertable layout which contains current endnote content, not used now + */ +LwpEnSuperTableLayout* LwpFootnote::GetEnSuperTableLayout() +{ + LwpDocument* pDivision = GetFootnoteTableDivision(); + if(pDivision) + return static_cast<LwpEnSuperTableLayout*>(pDivision->GetEnSuperTableLayout()); + return NULL; +} + +/** + * @descr Get division which footnote table contains current footnote content, copy from lwp source code + */ +LwpDocument* LwpFootnote::GetFootnoteTableDivision() +{ + if(!m_pFoundry) + return NULL; + + LwpDocument* pPrev =NULL; + LwpDocument* pDivision = NULL; + LwpDocument* pFootnoteDivision =NULL; + + // Make sure the footnote does belong to some division + // The division might not have a DivisionInfo if it's being Destruct()ed + pPrev = m_pFoundry->GetDocument(); + pFootnoteDivision = pPrev; + if (!pPrev || pPrev->GetDivInfoID()->IsNull()) + return NULL; + + switch (m_nType) + { + case FN_FOOTNOTE: + { + // Footnotes always use the source division + return pFootnoteDivision; + } + case FN_DIVISION: + { + // Start with the footnote's division + pDivision = pPrev; + break; + } + case FN_DIVISION_SEPARATE: + { + // It had better be the next division + pDivision = pPrev->GetNextDivision(); + break; + } + case FN_DIVISIONGROUP: + case FN_DIVISIONGROUP_SEPARATE: + { + pDivision = pPrev->GetLastInGroupWithContents(); + pPrev = pDivision; + break; + } + case FN_DOCUMENT: + case FN_DOCUMENT_SEPARATE: + { + pDivision = pFootnoteDivision->GetRootDocument(); + if (pDivision) + pDivision = pDivision->GetLastDivisionWithContents(); + pPrev = pDivision; + break; + } + + } + + // Make sure we're using the proper endnote division, if it's separate + if (m_nType & FN_MASK_SEPARATE) + pDivision = GetEndnoteDivision(pDivision); + // Don't use a division that's specifically for endnotes + else + { + while (pDivision) + { + if (pDivision->GetEndnoteType() == FN_DONTCARE) + break; + if (m_nType == FN_DIVISIONGROUP) + pDivision = pDivision->GetPreviousInGroup(); + else + pDivision = pDivision->GetPreviousDivisionWithContents(); + } + } + if (pDivision) + return pDivision; + return NULL; +} + +/** + * @descr Get division which endnote table contains current endnote content, copy from lwp source code + */ +LwpDocument* LwpFootnote::GetEndnoteDivision(LwpDocument* pPossible) +{ + LwpDocument* pDivision = pPossible; + sal_uInt16 nDivType; + + // In case we have multiple endnote divisions, walk backwards until + // we find one. + while (pDivision) + { + // Do we already have the right division? + nDivType = pDivision->GetEndnoteType(); + if (nDivType == m_nType) + return pDivision; + // When we hit the first non-endnote division, stop looking. + // -- SDC 10/8/96 + if (nDivType == FN_DONTCARE) + break; + pDivision = pDivision->GetPreviousDivision(); + } + return NULL; +} + +/** + * @descr Get footnote table class name + */ +OUString LwpFootnote::GetTableClass() +{ + OUString strClassName; + switch (GetType() & FN_MASK_BASE) + { + case FN_BASE_FOOTNOTE: + { + strClassName = A2OUSTR(STR_DivisionFootnote); + break; + } + case FN_BASE_DOCUMENT: + { + strClassName = A2OUSTR(STR_DocumentEndnote); + break; + } + case FN_BASE_DIVISION: + { + strClassName = A2OUSTR(STR_DivisionEndnote); + break; + } + case FN_BASE_DIVISIONGROUP: + { + strClassName = A2OUSTR(STR_DivisionGroupEndnote); + break; + } + } + return strClassName; +} + +/** + * @descr Find footnote tablelayout, copy from lwp source code + */ +LwpEnSuperTableLayout* LwpFootnote::FindFootnoteTableLayout() +{ + LwpDocument* pDivision = GetFootnoteTableDivision(); + if(!pDivision) + return NULL; + + LwpFoundry* pFoundry = pDivision->GetFoundry(); + OUString strClassName = GetTableClass(); + if(strClassName.getLength() ==0 ) + return NULL; + + LwpContent* pContent = NULL; + + while ((pContent = pFoundry->EnumContents(pContent)) != NULL) + if (pContent->IsTable() && (strClassName.equals(pContent->GetClassName())) && + pContent->IsActive() && pContent->GetLayout(NULL)) + { + // Found it! + return (LwpEnSuperTableLayout *) + ((LwpTable*)pContent)->GetSuperTableLayout(); + } + + return NULL; +} + +/** + * @descr Find footnote table, not used now + */ +LwpTable* LwpFootnote::FindFootnoteTable() +{ + LwpEnSuperTableLayout* pLayout = FindFootnoteTableLayout(); + //if (!ShouldBeInTable(Footnote)) return NULL; + return GetFootnoteTable(pLayout); +} + +/** + * @descr Find footnote table, not used now + */ +LwpTable* LwpFootnote::GetFootnoteTable(LwpEnSuperTableLayout * pLayout) +{ + if(pLayout) + { + LwpEndnoteLayout* pEndnoteLayout = static_cast<LwpEndnoteLayout*>(pLayout->GetMainTableLayout()); + if(pEndnoteLayout) + return static_cast<LwpTable*>(pEndnoteLayout->GetContent()->obj()); + } + return NULL; +} + +/** + * @descr Find footnote contents + */ +LwpContent* LwpFootnote::FindFootnoteContent() +{ + LwpContent* pContent = static_cast<LwpContent*>(m_Content.obj()); + //if the content has layout, the content has footnote contents; + //or looking for the celllayout and return the footnote contents. + if(pContent && pContent->GetLayout(NULL)) + return pContent; + + LwpCellLayout* pCellLayout = GetCellLayout(); + if(pCellLayout) + { + pContent =static_cast<LwpContent*>(pCellLayout->GetContent()->obj()); + } + + return pContent; +} + +LwpFootnoteTable::LwpFootnoteTable(LwpObjectHeader &objHdr, LwpSvStream *pStrm) + : LwpTable(objHdr, pStrm) +{ +} + +void LwpFootnoteTable::Read() +{ + LwpTable::Read(); + m_pObjStrm->SkipExtra(); +} + +/** + * @descr Read footnote number options information + */ +void LwpFootnoteNumberOptions::Read(LwpObjectStream *pObjStrm) +{ + pObjStrm->QuickRead(&m_nFlag, sizeof(m_nFlag)); + pObjStrm->QuickRead(&m_nStartingNumber, sizeof(m_nStartingNumber)); + m_LeadingText.Read(pObjStrm); + m_TrailingText.Read(pObjStrm); + pObjStrm->SkipExtra(); +} + +/** + * @descr Read footnote seperator options information + */ +void LwpFootnoteSeparatorOptions::Read(LwpObjectStream *pObjStrm) +{ + pObjStrm->QuickRead(&m_nFlag, sizeof(m_nFlag)); + pObjStrm->QuickRead(&m_nLength, sizeof(m_nLength)); + pObjStrm->QuickRead(&m_nIndent, sizeof(m_nIndent)); + pObjStrm->QuickRead(&m_nAbove, sizeof(m_nAbove)); + pObjStrm->QuickRead(&m_nBelow, sizeof(m_nBelow)); + m_BorderStuff.Read(pObjStrm); + pObjStrm->SkipExtra(); + +} + + +LwpFootnoteOptions::LwpFootnoteOptions(LwpObjectHeader &objHdr, LwpSvStream *pStrm) + : LwpObject(objHdr, pStrm) +{ +} + +LwpFootnoteOptions::~LwpFootnoteOptions() +{ + +} + +/** + * @descr Register footnote options object + */ +void LwpFootnoteOptions::Read() +{ + m_pObjStrm->QuickRead(&m_nFlag, sizeof(m_nFlag)); + m_FootnoteNumbering.Read(m_pObjStrm); + m_EndnoteDivisionNumbering.Read(m_pObjStrm); + m_EndnoteDivisionGroupNumbering.Read(m_pObjStrm); + m_EndnoteDocNumbering.Read(m_pObjStrm); + m_FootnoteSeparator.Read(m_pObjStrm); + m_FootnoteContinuedSeparator.Read(m_pObjStrm); + m_ContinuedOnMessage.Read(m_pObjStrm); + m_ContinuedFromMessage.Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); +} + +/** + * @descr Register footnote options style + */ +void LwpFootnoteOptions::RegisterStyle() +{ + RegisterFootnoteStyle(); + RegisterEndnoteStyle(); +} + +/** + * @descr Register footnote configuration information + */ +void LwpFootnoteOptions::RegisterFootnoteStyle() +{ + XFFootnoteConfig* pFootnoteConfig = new XFFootnoteConfig(); + pFootnoteConfig->SetStartValue(m_FootnoteNumbering.GetStartingNumber() -1); + pFootnoteConfig->SetNumPrefix(m_FootnoteNumbering.GetLeadingText()); + pFootnoteConfig->SetNumSuffix(m_FootnoteNumbering.GetTrailingText()); + if(m_FootnoteNumbering.GetReset() == LwpFootnoteNumberOptions::RESET_PAGE) + { + pFootnoteConfig->SetRestartOnPage(); + } + if(GetContinuedFrom()) + { + pFootnoteConfig->SetMessageFrom(GetContinuedFromMessage()); + } + if(GetContinuedOn()) + { + pFootnoteConfig->SetMessageOn(GetContinuedOnMessage()); + } + + pFootnoteConfig->SetMasterPage( m_strMasterPage); + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + pXFStyleManager->SetFootnoteConfig(pFootnoteConfig); + +} + +/** + * @descr Register endnote configuration information + */ +void LwpFootnoteOptions::RegisterEndnoteStyle() +{ + XFEndnoteConfig* pEndnoteConfig = new XFEndnoteConfig(); + pEndnoteConfig->SetStartValue(m_EndnoteDocNumbering.GetStartingNumber() -1); + OUString message = m_EndnoteDocNumbering.GetLeadingText(); + if(message.getLength() == 0) + { + message = A2OUSTR("[");//default prefix + } + pEndnoteConfig->SetNumPrefix(message); + message = m_EndnoteDocNumbering.GetTrailingText(); + if(message.getLength() == 0) + { + message = A2OUSTR("]");//default suffix + } + pEndnoteConfig->SetNumSuffix(message); + if(m_EndnoteDocNumbering.GetReset() == LwpFootnoteNumberOptions::RESET_PAGE) + { + pEndnoteConfig->SetRestartOnPage(); + } + + pEndnoteConfig->SetMasterPage( m_strMasterPage); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + pXFStyleManager->SetEndnoteConfig(pEndnoteConfig); +} + + +/** + * @descr Get continue on message + */ +OUString LwpFootnoteOptions::GetContinuedOnMessage() +{ + if(m_ContinuedOnMessage.HasValue()) + { + return m_ContinuedOnMessage.str(); + } + // else reture defauls message + return A2OUSTR(STRID_FOOTCONTINUEDON); +} + +/** + * @descr Get continue from message + */ +OUString LwpFootnoteOptions::GetContinuedFromMessage() +{ + if(m_ContinuedFromMessage.HasValue()) + { + return m_ContinuedFromMessage.str(); + } + // else reture defauls message + return A2OUSTR(STRID_FOOTCONTINUEDFROM); +} diff --git a/lotuswordpro/source/filter/lwpfootnote.hxx b/lotuswordpro/source/filter/lwpfootnote.hxx new file mode 100644 index 000000000000..4fe807d4a590 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfootnote.hxx @@ -0,0 +1,285 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * footnote + */ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ +#ifndef _LWPFRIBFOOTNOTE_HXX_ +#define _LWPFRIBFOOTNOTE_HXX_ + +#include "lwpfrib.hxx" +#include "lwpobj.hxx" +#include "lwpsection.hxx" +#include "lwpborderstuff.hxx" + +// Footnote types are built up from these numbers +#define FN_MASK_ENDNOTE 0x80 +#define FN_MASK_SEPARATE 0x40 +#define FN_MASK_DEACTIVATED 0x20 +#define FN_MASK_BASE (0x0f | FN_MASK_ENDNOTE) +#define FN_BASE_DONTCARE 0 +#define FN_BASE_FOOTNOTE 1 +#define FN_BASE_DIVISION (2 | FN_MASK_ENDNOTE) +#define FN_BASE_DIVISIONGROUP (3 | FN_MASK_ENDNOTE) +#define FN_BASE_DOCUMENT (4 | FN_MASK_ENDNOTE) + +// Here are the real footnote types +#define FN_DONTCARE (FN_BASE_DONTCARE) +#define FN_FOOTNOTE (FN_BASE_FOOTNOTE) +#define FN_DIVISION (FN_BASE_DIVISION) +#define FN_DIVISION_SEPARATE (FN_BASE_DIVISION | FN_MASK_SEPARATE) +#define FN_DIVISIONGROUP (FN_BASE_DIVISIONGROUP) +#define FN_DIVISIONGROUP_SEPARATE (FN_BASE_DIVISIONGROUP | FN_MASK_SEPARATE) +#define FN_DOCUMENT (FN_BASE_DOCUMENT) +#define FN_DOCUMENT_SEPARATE (FN_BASE_DOCUMENT | FN_MASK_SEPARATE) +#define STRID_FOOTCONTINUEDFROM "Continued from previous page..." +#define STRID_FOOTCONTINUEDON "Continued on next page..." +//Footnote table types, the string may have to do with local language +#define STR_DivisionFootnote "DivisionFootnote" +#define STR_DivisionEndnote "DivisionEndnote" +#define STR_DivisionGroupEndnote "DivisionGroupEndnote" +#define STR_DocumentEndnote "DocumentEndnote" + +/** + * @brief Footnote frib object +*/ +class LwpFootnote; +class LwpFribFootnote: public LwpFrib +{ + +public: + LwpFribFootnote(LwpPara* pPara ); + ~LwpFribFootnote(){}; + void Read(LwpObjectStream* pObjStrm, sal_uInt16 len); + void RegisterStyle(); + void XFConvert(XFContentContainer* pCont); + LwpFootnote* GetFootnote(); + +private: + LwpObjectID m_Footnote; +}; + +/** + * @brief VO_FOOTNOTE object +*/ +class LwpSuperTableLayout; +class LwpEnSuperTableLayout; +class LwpFnSuperTableLayout; +class LwpCellLayout; +class LwpDocument; +class LwpTable; +class LwpFootnote : public LwpOrderedObject +{ +public: + LwpFootnote(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpFootnote(); + void RegisterStyle(); + void XFConvert(XFContentContainer * pCont); +protected: + void Read(); +private: + sal_uInt16 m_nType; + sal_uInt16 m_nRow; + LwpObjectID m_Content; +public: + sal_uInt16 GetType(){ return m_nType;} +private: + LwpCellLayout* GetCellLayout(); + LwpEnSuperTableLayout* GetEnSuperTableLayout(); + LwpDocument* GetFootnoteTableDivision(); + LwpDocument* GetEndnoteDivision(LwpDocument* pPossible); + LwpEnSuperTableLayout* FindFootnoteTableLayout(); + LwpTable* FindFootnoteTable(); + LwpTable* GetFootnoteTable(LwpEnSuperTableLayout* pLayout); + LwpContent* FindFootnoteContent(); + OUString GetTableClass(); +}; + +/** + * @brief VO_FOOTNOTETABLE object +*/ +#include "lwptable.hxx" +class LwpFootnoteTable : public LwpTable +{ +public: + LwpFootnoteTable(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpFootnoteTable(){}; +protected: + void Read(); +}; + +/** + * @brief footnote number options information +*/ +class LwpFootnoteNumberOptions +{ +public: + LwpFootnoteNumberOptions(){}; + ~LwpFootnoteNumberOptions(){}; + void Read(LwpObjectStream* pObjStrm); +private: + sal_uInt16 m_nFlag; + sal_uInt16 m_nStartingNumber; + LwpAtomHolder m_LeadingText; + LwpAtomHolder m_TrailingText; +public: + enum // for flag + { + RESET_DOCUMENT = 0x00, // i.e., never reset the numbering + RESET_PAGE = 0x01, + RESET_DIVISION = 0x02, + RESET_DIVISIONGROUP = 0x04, + RESET_MASK = (RESET_PAGE | RESET_DIVISION | RESET_DIVISIONGROUP | + RESET_DOCUMENT), + SUPERSCRIPT_REFERENCE = 0x10 + }; +public: + sal_uInt16 GetStartingNumber(){ return m_nStartingNumber;} + OUString GetLeadingText(){ return m_LeadingText.str();} + OUString GetTrailingText(){ return m_TrailingText.str();} + sal_uInt16 GetReset(){ return static_cast<sal_uInt16>(m_nFlag & RESET_MASK);} +}; + +/** + * @brief footnote separator options information +*/ +class LwpFootnoteSeparatorOptions +{ +public: + LwpFootnoteSeparatorOptions(){}; + ~LwpFootnoteSeparatorOptions(){}; + void Read(LwpObjectStream* pObjStrm); +private: + sal_uInt16 m_nFlag; + sal_uInt32 m_nLength; + sal_uInt32 m_nIndent; + sal_uInt32 m_nAbove; + sal_uInt32 m_nBelow; + LwpBorderStuff m_BorderStuff; +public: + enum // for flag + { + HAS_SEPARATOR = 0x01, + CUSTOM_LENGTH = 0x02 + }; +public: + sal_uInt32 GetFlag(){ return m_nFlag;} + sal_uInt32 GetLength(){ return m_nLength;} + sal_uInt32 GetIndent(){ return m_nIndent;} + sal_uInt32 GetAbove(){ return m_nAbove;} + sal_uInt32 GetBelow(){ return m_nBelow;} + LwpBorderStuff* GetBorderStuff(){ return &m_BorderStuff;} + sal_Bool HasCustomLength(){ return (m_nFlag & CUSTOM_LENGTH) != 0;} + sal_Bool HasSeparator(){ return (m_nFlag & HAS_SEPARATOR) != 0;} + float GetTopBorderWidth(){ return m_BorderStuff.GetSideWidth(LwpBorderStuff::TOP);} + LwpColor GetTopBorderColor(){ return m_BorderStuff.GetSideColor(LwpBorderStuff::TOP);} +}; + +/** + * @brief VO_FOOTNOTEOPTS object +*/ +class LwpFootnoteOptions : public LwpObject +{ +public: + LwpFootnoteOptions(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpFootnoteOptions(); + void RegisterStyle(); +protected: + void Read(); + void RegisterFootnoteStyle(); + void RegisterEndnoteStyle(); +private: + sal_uInt16 m_nFlag; + LwpFootnoteNumberOptions m_FootnoteNumbering; + LwpFootnoteNumberOptions m_EndnoteDivisionNumbering; + LwpFootnoteNumberOptions m_EndnoteDivisionGroupNumbering; + LwpFootnoteNumberOptions m_EndnoteDocNumbering; + LwpFootnoteSeparatorOptions m_FootnoteSeparator; + LwpFootnoteSeparatorOptions m_FootnoteContinuedSeparator; + LwpAtomHolder m_ContinuedOnMessage; + LwpAtomHolder m_ContinuedFromMessage; + OUString m_strMasterPage; + enum + { + FO_REPEAT = 0x0001, + FO_CONTINUEFROM = 0x0002, + FO_CONTINUEON = 0x0004, + FO_ON_CENTER = 0x0008, + FO_ON_RIGHT = 0x0010, + FO_ON_ALIGNMASK = FO_ON_CENTER | FO_ON_RIGHT, + FO_FROM_CENTER = 0x0020, + FO_FROM_RIGHT = 0x0040, + FO_FROM_ALIGNMASK = FO_FROM_CENTER | FO_FROM_RIGHT + }; + +public: + LwpFootnoteNumberOptions* GetFootnoteNumbering(){ return &m_FootnoteNumbering;} + LwpFootnoteNumberOptions* GetEndnoteDivisionNumbering(){ return &m_EndnoteDivisionNumbering;} + LwpFootnoteNumberOptions* GetEndnoteDivisionGroupNumbering(){ return &m_EndnoteDivisionGroupNumbering;} + LwpFootnoteNumberOptions* GetEndnoteDocNumbering(){ return &m_EndnoteDocNumbering;} + LwpFootnoteSeparatorOptions* GetFootnoteSeparator(){ return &m_FootnoteSeparator;} + LwpFootnoteSeparatorOptions* GetFootnoteContinuedSeparator(){ return &m_FootnoteContinuedSeparator;} + sal_Bool GetContinuedFrom(){ return ((m_nFlag & FO_CONTINUEFROM) != 0);} + sal_Bool GetContinuedOn(){ return ((m_nFlag & FO_CONTINUEON) != 0);} + OUString GetContinuedOnMessage(); + OUString GetContinuedFromMessage(); + void SetMasterPage(OUString strMasterPage){ m_strMasterPage = strMasterPage;} +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpfoundry.cxx b/lotuswordpro/source/filter/lwpfoundry.cxx new file mode 100644 index 000000000000..b2dda8978c60 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfoundry.cxx @@ -0,0 +1,579 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpfoundry.hxx" +#include "lwpfilehdr.hxx" +#include "lwpdoc.hxx" +#include "lwpmarker.hxx" +#include "lwpholder.hxx" +#include "lwpbulletstylemgr.hxx" +#include "lwpcontent.hxx" +#include "lwpvpointer.hxx" +#include "lwpsection.hxx" +#include "lwpcharacterstyle.hxx" +#include "lwpglobalmgr.hxx" + +LwpFoundry::LwpFoundry(LwpObjectStream *pStrm, LwpDocument* pDoc) + : m_pDoc(pDoc), m_pPieceMgr(NULL), m_pStyleMgr(NULL) +{ + Read(pStrm); + m_pDropcapMgr = new LwpDropcapMgr; + m_pBulletStyleMgr = new LwpBulletStyleMgr(); + m_pBulletStyleMgr->SetFoundry(this); +} + +LwpFoundry::~LwpFoundry() +{ + if(m_pPieceMgr) + { + delete m_pPieceMgr; + } + if(m_pStyleMgr) + { + delete m_pStyleMgr; + } + if (m_pDropcapMgr) + delete m_pDropcapMgr; + if (m_pBulletStyleMgr) + { + delete m_pBulletStyleMgr; + } +} + +void LwpFoundry::Read(LwpObjectStream *pStrm) +{ + if (!m_pDoc->IsChildDoc()) + { + m_VerMgr.Read(pStrm); + } + m_ObjMgr.Read(pStrm); + + m_MarkerHead.ReadIndexed(pStrm); + m_FootnoteMgr.ReadIndexed(pStrm); + + m_NumMgr.Read(pStrm); + m_BulMgr.Read(pStrm); + + m_SectionList.Read(pStrm); + m_Layout.ReadIndexed(pStrm); + + ReadStyles(pStrm); + + m_BookMarkHead.ReadIndexed(pStrm); + m_DdeLinkHead.ReadIndexed(pStrm); + m_DirtBagHead.ReadIndexed(pStrm); + m_NamedOutlineSeqHead.ReadIndexed(pStrm); + + m_EnumLayoutHead.ReadIndexed(pStrm); + m_EnumLayoutTail.ReadIndexed(pStrm); + m_NamedObjects.ReadIndexed(pStrm); + + pStrm->QuickRead(&m_nLastClickHere, sizeof(m_nLastClickHere)); + m_SmartTextMgr.ReadIndexed(pStrm); + + m_ContentMgr.Read(pStrm); + m_FontMgr.Read(pStrm); + + if (!m_pDoc->IsChildDoc() && LwpFileHeader::m_nFileRevision >= 0x000B) + { + m_pPieceMgr = new LwpPieceManager(); + + m_pPieceMgr->Read(pStrm); + } + + if( LwpFileHeader::m_nFileRevision >= 0x000B) + { + m_DftDropCapStyle.ReadIndexed(pStrm); + } + if( LwpFileHeader::m_nFileRevision >= 0x000F) + { + m_DftHeaderStyle.ReadIndexed(pStrm); + m_DftFooterStyle.ReadIndexed(pStrm); + } + pStrm->SkipExtra(); + + m_pStyleMgr = new LwpStyleManager(); + m_pStyleMgr->SetFoundry(this); +} + + +void LwpFoundry::ReadStyles(LwpObjectStream *pStrm) +{ + m_TextStyle.ReadIndexed(pStrm); + m_DefaultTextStyle.ReadIndexed(pStrm); + m_DefaultClickStyle.ReadIndexed(pStrm); + m_PageStyle.ReadIndexed(pStrm); + m_FrameStyle.ReadIndexed(pStrm); + + m_TableStyle.ReadIndexed(pStrm); + m_CellStyle.ReadIndexed(pStrm); + m_DftFrameStyle.ReadIndexed(pStrm); + m_DftPageStyle.ReadIndexed(pStrm); + m_DftTableStyle.ReadIndexed(pStrm); + + m_DftCellStyle.ReadIndexed(pStrm); + m_DftColumnStyle.ReadIndexed(pStrm); + m_DftLeftColumnStyle.ReadIndexed(pStrm); + m_DftRighColumnStyle.ReadIndexed(pStrm); + +} + +#include "xfilter/xfstylemanager.hxx" +#include "lwplayout.hxx" + +void LwpFoundry::RegisterAllLayouts() +{ + //Register CellStyle + LwpObject* pStyle = m_CellStyle.obj(); + if( pStyle ) + { + pStyle->SetFoundry(this); + pStyle->RegisterStyle(); + } + + //register content page layout list: Layout + pStyle = m_Layout.obj(); + if( pStyle ) + { + pStyle->SetFoundry(this); + pStyle->RegisterStyle(); + } + + //Register page style layout list: PageStyle, such as "Default Page" + pStyle = m_PageStyle.obj(); + if( pStyle ) + { + pStyle->SetFoundry(this); + pStyle->RegisterStyle(); + } + + //Register FrameStyle + pStyle = m_FrameStyle.obj(); + if( pStyle ) + { + pStyle->SetFoundry(this); + pStyle->RegisterStyle(); + } + +} + +LwpBookMark* LwpFoundry::GetBookMark(LwpObjectID objMarker) +{ + LwpDLVListHeadHolder* pHeadHolder= static_cast + <LwpDLVListHeadHolder*>(m_BookMarkHead.obj()); + LwpObjectID* pObjID = pHeadHolder->GetHeadID(); + LwpBookMark* pBookMark; + if (pObjID) + pBookMark = static_cast<LwpBookMark*>(pObjID->obj()); + else + return NULL; + + while (pBookMark) + { + if (pBookMark->IsRightMarker(objMarker)) + return pBookMark; + pObjID = pBookMark->GetNext(); + if (pObjID) + pBookMark = static_cast<LwpBookMark*>(pObjID->obj()); + else + return NULL; + } + return NULL; +} + +sal_Bool LwpFoundry::FindBookMarkByName(OUString sName) +{ + LwpDLVListHeadHolder* pHeadHolder= static_cast + <LwpDLVListHeadHolder*>(m_BookMarkHead.obj()); + LwpObjectID* pObjID = pHeadHolder->GetHeadID(); + LwpBookMark* pBookMark; + if (pObjID) + pBookMark = static_cast<LwpBookMark*>(pObjID->obj()); + else + return NULL; + + while (pBookMark) + { + if (pBookMark->IsRightName(sName)) + return sal_True; + pObjID = pBookMark->GetNext(); + if (pObjID) + pBookMark = static_cast<LwpBookMark*>(pObjID->obj()); + else + return sal_False; + } + return sal_False; +} + +/** +* @descr: Get next content +* +*/ +LwpContent* LwpFoundry::EnumContents(LwpContent * pContent) +{ + return GetContentManager()->EnumContents(pContent); +} + +/** +* @descr: Get next section +* +*/ +LwpSection* LwpFoundry::EnumSections(LwpSection * pSection) +{ + return static_cast<LwpSection*>(m_SectionList.Enumerate(pSection)); +} + +/** +* @descr: Get default text style id +* +*/ +LwpObjectID * LwpFoundry::GetDefaultTextStyle() +{ + LwpVersionedPointer * pPointer = static_cast<LwpVersionedPointer *>(m_DefaultTextStyle.obj()); + if (!pPointer) + return NULL; + + return pPointer->GetPointer(); +} + +/** +* @descr: Get paragraph style object id according to its style name +* +*/ +LwpObjectID * LwpFoundry::FindParaStyleByName(OUString name) +{ + //Register all text styles: para styles, character styles + LwpDLVListHeadHolder* pParaStyleHolder = static_cast<LwpDLVListHeadHolder*>(GetTextStyleHead()->obj()); + if(pParaStyleHolder) + { + LwpTextStyle* pParaStyle = static_cast<LwpTextStyle*> (pParaStyleHolder->GetHeadID()->obj()); + while(pParaStyle) + { + OUString strName = pParaStyle->GetName()->str(); + if(strName == name) + return pParaStyle->GetObjectID(); + pParaStyle = static_cast<LwpTextStyle*>(pParaStyle->GetNext()->obj()); + } + } + + return NULL; +} + +/** +* @descr: Get style name registed according the original style name +* +*/ +OUString LwpFoundry::FindActuralStyleName(OUString name) +{ + LwpObjectID* pID = FindParaStyleByName(name); + if(pID) + { + IXFStyle* pStyle = GetStyleManager()->GetStyle(*pID); + if(pStyle) + { + return pStyle->GetStyleName(); + } + } + + return name; +} + +void LwpVersionManager::Read(LwpObjectStream *pStrm) +{ + // TODO: skip the data for prototype + Skip(pStrm); +} + +void LwpVersionManager::Skip(LwpObjectStream *pStrm) +{ + + sal_uInt32 cNextUserVersionID; + pStrm->QuickRead(&cNextUserVersionID, sizeof(cNextUserVersionID)); + + sal_uInt16 Count; + pStrm->QuickRead(&Count, sizeof(Count)); + + sal_uInt32 tag; + while(Count--) + { + pStrm->QuickRead(&tag, sizeof(tag)); + USHORT len; + switch(tag) + { + case TAG_USER_VERSION: + // TODO: skip the CUserVersionControl + pStrm->QuickRead(&len, sizeof(len)); + pStrm->SeekRel(len); + //pStrm->SkipExtra(); //The length has included the extra + break; + + default: + pStrm->QuickRead(&len, sizeof(USHORT)); + pStrm->SeekRel(len); + pStrm->SkipExtra(); + break; + } + } + pStrm->SkipExtra(); +} + +void LwpObjectManager::Read(LwpObjectStream *pStrm) +{ + + LwpObjectID dummy; + dummy.Read(pStrm); + // TODO: judge if we need to set the cDelta by the dummy id + + m_Division.ReadIndexed(pStrm); + pStrm->SkipExtra(); +} + +void LwpNumberManager::Read(LwpObjectStream *pStrm) +{ + m_TableRange.ReadIndexed(pStrm); + pStrm->SkipExtra(); +} + +void LwpBulletManager::Read(LwpObjectStream *pStrm) +{ + m_Head.ReadIndexed(pStrm); + pStrm->SkipExtra(); +} + +void LwpContentManager::Read(LwpObjectStream *pStrm) +{ + m_ContentList.ReadIndexed(pStrm); + + // TODO: to judge the file revision + + m_EnumHead.ReadIndexed(pStrm); + m_EnumTail.ReadIndexed(pStrm); + + m_OleObjCount.ReadIndexed(pStrm); + + if( LwpFileHeader::m_nFileRevision >= 0x000B) + { + m_GrapHead.ReadIndexed(pStrm); + m_GrapTail.ReadIndexed(pStrm); + m_OleHead.ReadIndexed(pStrm); + m_OleTail.ReadIndexed(pStrm); + } + + pStrm->SkipExtra(); +} + +/** +* @descr: Get next content +* +*/ +LwpContent* LwpContentManager::EnumContents(LwpContent* pContent) +{ + if(pContent) + return pContent->GetNextEnumerated(); + LwpVersionedPointer* pPointer = static_cast<LwpVersionedPointer*>(m_EnumHead.obj()); + return pPointer ? static_cast<LwpContent*>(pPointer->GetPointer()->obj()) : NULL; +} + +void LwpPieceManager::Read(LwpObjectStream *pStrm) +{ + m_GeometryPieceList.ReadIndexed(pStrm); + m_ScalePieceList.ReadIndexed(pStrm); + m_MarginsPieceList.ReadIndexed(pStrm); + m_ColumnsPieceList.ReadIndexed(pStrm); + m_BorderStuffPieceList.ReadIndexed(pStrm); + + m_GutterStuffPieceList.ReadIndexed(pStrm); + m_BackgroundStuffPieceList.ReadIndexed(pStrm); + m_JoinStuffPieceList.ReadIndexed(pStrm); + m_ShadowPieceList.ReadIndexed(pStrm); + m_NumericsPieceList.ReadIndexed(pStrm); + + m_RelativityPieceList.ReadIndexed(pStrm); + m_AlignmentPieceList.ReadIndexed(pStrm); + m_IndentPieceList.ReadIndexed(pStrm); + m_ParaBorderPieceList.ReadIndexed(pStrm); + m_SpacingPieceList.ReadIndexed(pStrm); + + m_BreaksPieceList.ReadIndexed(pStrm); + m_NumberingPieceList.ReadIndexed(pStrm); + m_TabPieceList.ReadIndexed(pStrm); + m_CharacterBorderPieceList.ReadIndexed(pStrm); + m_AmikakePieceList.ReadIndexed(pStrm); + + if(pStrm->CheckExtra()) + { + m_ParaBackgroundPieceList.ReadIndexed(pStrm); + m_ExternalBorderStuffPieceList.ReadIndexed(pStrm); + m_ExternalJoinStuffPieceList.ReadIndexed(pStrm); + pStrm->SkipExtra(); + } +} + +void LwpOrderedObjectManager::Read(LwpObjectStream *pStrm) +{ + m_Head.ReadIndexed(pStrm); +} + +/** +* @descr: Get next orderedobject, copy from lwp source code +* +*/ +LwpOrderedObject* LwpOrderedObjectManager::Enumerate(LwpOrderedObject * pLast) +{ + // If Last has a next, return it. + if(pLast && !pLast->GetNext()->IsNull()) + return static_cast<LwpOrderedObject*>(pLast->GetNext()->obj()); + + LwpListList* pList = NULL; + if(pLast) + { + // We're at the end of Last's list (not Liszt's list). + // Start with the next active list + pList = static_cast<LwpListList*>(pLast->GetListList()->obj()); + pList= GetNextActiveListList(pList); + } + else + { + // Start with the first active ListList + pList = GetNextActiveListList(NULL); + } + + if(pList) + { + return static_cast<LwpOrderedObject*>(pList->GetHead()->obj()); + } + + return NULL; +} + +/** +* @descr: Get next listlist object, copy from lwp source code +* +*/ +LwpListList* LwpOrderedObjectManager::GetNextActiveListList(LwpListList * pLast) +{ + LwpListList* pList = NULL; + LwpContent* pContent = NULL; + if(pLast) + pList = static_cast<LwpListList*>(pLast->GetNext()->obj()); + else + { + LwpDLVListHeadHolder* pHeadHolder= static_cast<LwpDLVListHeadHolder*>(m_Head.obj()); + if(pHeadHolder) + { + pList = static_cast<LwpListList*>(pHeadHolder->GetHeadID()->obj()); + } + } + + while(pList) + { + pContent = static_cast<LwpContent*>(pList->GetObject()->obj()); + if(pContent && pContent->HasNonEmbeddedLayouts() && + !pContent->IsStyleContent()) + return pList; + pList = static_cast<LwpListList*>(pList->GetNext()->obj()); + } + return NULL; +} + +LwpStyleManager::LwpStyleManager() +{} + +LwpStyleManager::~LwpStyleManager() +{ + m_StyleList.clear(); +} + + +#include "xfilter/xfstylemanager.hxx" +/* +VO_PARASTYLE/VO_CHARACTERSTYLE call this method to add its created style to XFStyleManager +1. Add the style to XFStyleManager, and return the <office:styles> style name +2. Add it to LwpParaStyleMap. +Prerequisite: pStyle has been created and all properties has been set to it. +Return the XFStyle* added by XFStyleManager +*/ +IXFStyle* LwpStyleManager::AddStyle(LwpObjectID styleObjID, IXFStyle* pStyle) +{ + assert(pStyle); + //pStyle may change if same style is found in XFStyleManager + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + pStyle = pXFStyleManager->AddStyle(pStyle); + m_StyleList.insert(LwpStyleMap::value_type(styleObjID, pStyle)); + return pStyle; +} + +/* +Called by VO_PARA or other objects to get style name based on the Style object ID +1) Get style from LwpParaStyleMap based on the LwpObjectID of VO_PARASTYLE. +Prerequisite: VO_PARASTYLE/VO_CHARACTERSTYLE should call AddStyle first. +Return empty string if no style found. +*/ +IXFStyle* LwpStyleManager::GetStyle(const LwpObjectID &styleObjID) +{ + LwpStyleMap::const_iterator it = m_StyleList.find(styleObjID); + if (it != m_StyleList.end()) { + return((*it).second); + } + return NULL; +} diff --git a/lotuswordpro/source/filter/lwpfoundry.hxx b/lotuswordpro/source/filter/lwpfoundry.hxx new file mode 100644 index 000000000000..ce07407c4ba5 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfoundry.hxx @@ -0,0 +1,326 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPFOUNDRY_HXX +#define _LWPFOUNDRY_HXX + +#include "lwpheader.hxx" + +#ifndef _LWPOBJECTID_HXX +#include "lwpobjid.hxx" +#endif + +#ifndef _LWPOBJECTSTREAM_HXX +#include "lwpobjstrm.hxx" +#endif + +#include "lwpcolor.hxx" +#include "lwpbasetype.hxx" +#include "lwpfont.hxx" +#include "lwpdropcapmgr.hxx" +class LwpDocument; +class LwpBookMark; + +#include <vector> +#define TAG_USER_VERSION 0x72655655UL // "UVer" + + +class LwpVersionManager +{ +public: + LwpVersionManager(){}; + ~LwpVersionManager(){}; +public: + void Read(LwpObjectStream *pStrm); + void Skip(LwpObjectStream *pStrm); +}; + +class LwpObjectManager +{ +public: + LwpObjectManager(){}; + ~LwpObjectManager(){}; +private: + LwpObjectID m_Division; +public: + void Read(LwpObjectStream *pStrm); +}; + +class LwpNumberManager +{ +public: + LwpNumberManager(){}; + ~LwpNumberManager(){}; +private: + LwpObjectID m_TableRange; +public: + void Read(LwpObjectStream *pStrm); + LwpObjectID GetTableRangeID(){ return m_TableRange;} +}; + +class LwpBulletManager +{ +public: + LwpBulletManager(){}; + ~LwpBulletManager(){}; +private: + LwpObjectID m_Head; +public: + void Read(LwpObjectStream *pStrm); + LwpObjectID* GetHeadID() { return &m_Head;} +}; + +class LwpContent; +class LwpContentManager +{ +public: + LwpContentManager(){}; + ~LwpContentManager(){}; +private: + LwpObjectID m_ContentList; + LwpObjectID m_EnumHead; + LwpObjectID m_EnumTail; + LwpObjectID m_OleObjCount; + sal_uInt32 m_oldOleObjCount; + + LwpObjectID m_GrapHead; + LwpObjectID m_GrapTail; + LwpObjectID m_OleHead; + LwpObjectID m_OleTail; +public: + inline LwpObjectID* GetContentList() { return &m_ContentList; } + inline LwpObjectID* GetGraphicListHead() { return &m_GrapHead; } + LwpContent* EnumContents(LwpContent* pContent); + +public: + void Read(LwpObjectStream *pStrm); +}; + +class LwpPieceManager +{ +public: + LwpPieceManager(){}; + ~LwpPieceManager(){}; +private: + LwpObjectID m_GeometryPieceList; + LwpObjectID m_ScalePieceList; + LwpObjectID m_MarginsPieceList; + LwpObjectID m_ColumnsPieceList; + LwpObjectID m_BorderStuffPieceList; + LwpObjectID m_GutterStuffPieceList; + LwpObjectID m_BackgroundStuffPieceList; + LwpObjectID m_JoinStuffPieceList; + LwpObjectID m_ShadowPieceList; + LwpObjectID m_NumericsPieceList; + LwpObjectID m_RelativityPieceList; + LwpObjectID m_AlignmentPieceList; + LwpObjectID m_IndentPieceList; + LwpObjectID m_ParaBorderPieceList; + LwpObjectID m_SpacingPieceList; + LwpObjectID m_BreaksPieceList; + LwpObjectID m_NumberingPieceList; + LwpObjectID m_TabPieceList; + LwpObjectID m_CharacterBorderPieceList; + LwpObjectID m_AmikakePieceList; + + LwpObjectID m_ParaBackgroundPieceList; + LwpObjectID m_ExternalBorderStuffPieceList; + LwpObjectID m_ExternalJoinStuffPieceList; + +public: + void Read(LwpObjectStream *pStrm); +}; + +class LwpOrderedObject; +class LwpListList; +class LwpOrderedObjectManager +{ +public: + LwpOrderedObjectManager(){}; + ~LwpOrderedObjectManager(){}; +protected: + LwpObjectID m_Head; +public: + void Read(LwpObjectStream *pStrm); + LwpObjectID* GetHeadID() { return &m_Head;}; + LwpOrderedObject* Enumerate(LwpOrderedObject* pLast); +protected: + LwpListList* GetNextActiveListList(LwpListList* pLast); +}; + +class LwpStyleManager; +class LwpSection; +class LwpBulletStyleMgr; +class LwpFoundry +{ +public: + LwpFoundry( LwpObjectStream *pStrm, LwpDocument* pDoc ); + ~LwpFoundry(); + void Read(LwpObjectStream *pStrm); + void RegisterAllLayouts(); +private: + LwpDocument* m_pDoc; +private: //file members + LwpVersionManager m_VerMgr; + LwpObjectManager m_ObjMgr; + LwpObjectID m_MarkerHead; + LwpObjectID m_FootnoteMgr; + LwpNumberManager m_NumMgr; + LwpBulletManager m_BulMgr; + LwpOrderedObjectManager m_SectionList; + + LwpObjectID m_Layout; //The head layout + LwpObjectID m_TextStyle; + LwpObjectID m_DefaultTextStyle; + LwpObjectID m_DefaultClickStyle; + LwpObjectID m_PageStyle; + LwpObjectID m_FrameStyle; + LwpObjectID m_TableStyle; + LwpObjectID m_CellStyle; + LwpObjectID m_DftFrameStyle; + LwpObjectID m_DftPageStyle; + LwpObjectID m_DftTableStyle; + LwpObjectID m_DftCellStyle; + LwpObjectID m_DftColumnStyle; + LwpObjectID m_DftLeftColumnStyle; + LwpObjectID m_DftRighColumnStyle; + + LwpObjectID m_BookMarkHead; + LwpObjectID m_DdeLinkHead; + LwpObjectID m_DirtBagHead; + LwpObjectID m_NamedOutlineSeqHead; + LwpObjectID m_EnumLayoutHead; + LwpObjectID m_EnumLayoutTail; + + LwpObjectID m_NamedObjects; + sal_uInt32 m_nLastClickHere; + + LwpObjectID m_SmartTextMgr; + + LwpContentManager m_ContentMgr; + LwpFontManager m_FontMgr; + LwpPieceManager* m_pPieceMgr; + + LwpObjectID m_DftDropCapStyle; + LwpObjectID m_DftHeaderStyle; + + LwpObjectID m_DftFooterStyle; +private: + void ReadStyles(LwpObjectStream *pStrm); +public: + inline LwpContentManager* GetContentManager() { return &m_ContentMgr; } + inline LwpObjectID* GetGraphicListHead() { return m_ContentMgr.GetGraphicListHead(); } + inline LwpFontManager* GetFontManger() { return &m_FontMgr;} + inline LwpObjectID* GetTextStyleHead() { return &m_TextStyle;} + inline LwpObjectID* GetLayout() {return &m_Layout;} + inline LwpObjectID* GetBulletManagerID() { return m_BulMgr.GetHeadID();} + inline LwpDocument* GetDocument(){ return m_pDoc;} + inline LwpNumberManager* GetNumberManager() { return &m_NumMgr;} + LwpObjectID * GetDefaultTextStyle() ; +private: + LwpStyleManager* m_pStyleMgr; + LwpDropcapMgr* m_pDropcapMgr; + LwpBulletStyleMgr* m_pBulletStyleMgr; +public: + inline LwpStyleManager* GetStyleManager() { return m_pStyleMgr;} + LwpBookMark* GetBookMark(LwpObjectID objMarker); + sal_Bool FindBookMarkByName(OUString sName); + LwpDropcapMgr* GetDropcapMgr(){return m_pDropcapMgr;} + LwpContent* EnumContents(LwpContent* pContent); + LwpSection* EnumSections(LwpSection* pSection); + LwpBulletStyleMgr* GetBulletStyleMgr(){return m_pBulletStyleMgr;} + + LwpObjectID* FindParaStyleByName(OUString name); + OUString FindActuralStyleName(OUString name); +}; + +class LwpStyleManager +{ +public: + LwpStyleManager(); + ~LwpStyleManager(); +private: + LwpFoundry* m_pFoundry; + struct hashFunc + { + size_t operator()( const LwpObjectID& rName ) const + { + return rName.HashCode(); + } + }; + struct eqFunc + { + bool operator()( const LwpObjectID& rKey1, const LwpObjectID& rKey2 ) const + { + return(rKey1==rKey2); + } + }; + + typedef std::hash_map<LwpObjectID, IXFStyle*, hashFunc, eqFunc> LwpStyleMap; + LwpStyleMap m_StyleList; +public: + void SetFoundry(LwpFoundry* pFoundry){m_pFoundry = pFoundry;} + IXFStyle* AddStyle(LwpObjectID styleObjID, IXFStyle* pStyle); + IXFStyle* GetStyle(const LwpObjectID &styleObjID); +}; +#endif diff --git a/lotuswordpro/source/filter/lwpframelayout.cxx b/lotuswordpro/source/filter/lwpframelayout.cxx new file mode 100644 index 000000000000..8a3e72836f6b --- /dev/null +++ b/lotuswordpro/source/filter/lwpframelayout.cxx @@ -0,0 +1,1281 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * the class for VO_FrameLayout + ************************************************************************/ +/************************************************************************* + * Change History +Mar 2005 Created + ************************************************************************/ +#include "lwpframelayout.hxx" +#include "lwppara.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xfparagraph.hxx" +#include "xfilter/xffloatframe.hxx" +#include "xfilter/xfrubystyle.hxx" +#include "lwppagelayout.hxx" +#include "lwpoleobject.hxx" +#include "lwptablelayout.hxx" +#include "lwpgrfobj.hxx" +#include "lwpglobalmgr.hxx" + +LwpFrame::LwpFrame(LwpPlacableLayout* pLayout):m_pLayout(pLayout) +{ +} + +LwpFrame::~LwpFrame() +{ +} +/** +* @descr: parse frame +* @param: register frame style +* @param: pFrameStyle - Frame Style object +* +*/ +void LwpFrame::RegisterStyle(XFFrameStyle* pFrameStyle) +{ + ApplyWrapType(pFrameStyle); + ApplyMargins(pFrameStyle); + ApplyPadding(pFrameStyle); + ApplyBorders(pFrameStyle); + ApplyColumns(pFrameStyle); + ApplyShadow(pFrameStyle); + ApplyBackGround(pFrameStyle); + ApplyWatermark(pFrameStyle); +// ApplyBackColor(pFrameStyle); + ApplyProtect(pFrameStyle); + ApplyTextDir(pFrameStyle); + ApplyPosType(pFrameStyle); + + pFrameStyle->SetStyleName(m_pLayout->GetName()->str()); + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_StyleName = pXFStyleManager->AddStyle(pFrameStyle)->GetStyleName(); + m_pLayout->SetStyleName(m_StyleName); +} +/** +* @descr: parse frame and set frame properties +* @param: pXFFrame - XFFrame object +* @param: nPageNo - the page number that the frame anchors +* +*/ + void LwpFrame::Parse(XFFrame* pXFFrame, sal_Int32 nPageNo) + { + //set the frame style name + pXFFrame->SetStyleName(m_StyleName); + + //SetAnchorType and position,if it's page anchor,set the page number. + ParseAnchorType(pXFFrame); + if(nPageNo>0) + { + pXFFrame->SetAnchorPage(nPageNo); + } + + //Set frame Name + OUString aFrameName = m_pLayout->GetName()->str(); + if(aFrameName.getLength()) + { + //cause the bug of SODC, the linkframe name can not be "Frame1", so I change the frame name + /*if(aFrameName.equals(A2OUSTR("Frame1"))) + { + aFrameName = A2OUSTR("Frame1_COPY"); + } + pXFFrame->SetName(aFrameName);*/ + pXFFrame->SetName(m_StyleName); + } + + LwpLayoutGeometry* pLayoutGeo = m_pLayout->GetGeometry(); + //Set frame Width and height + if(pLayoutGeo) + { + double fWidth = m_pLayout->GetWidth(); + double fHeight = m_pLayout->GetHeight(); + + pXFFrame->SetWidth( fWidth ); + pXFFrame->SetHeight( fHeight ); + + //Get content obj; + LwpObject* pObj = m_pLayout->GetContent()->obj(); + if(m_pLayout->IsGroupHead()&&(m_pLayout->IsMinimumHeight())) + { + //process grouplayout height. there is problems now + pXFFrame->SetHeight( fHeight ); + } + /* + else if(m_pLayout->IsFitGraphic() && pObj && pObj->GetTag() == VO_GRAPHIC) + { + //If is graphic, get original size and set it; + LwpGraphicObject* pGrpObj = static_cast<LwpGraphicObject*>(pObj); + long nHeight =0, nWidth =0; + pGrpObj->GetGrafOrgSize(nWidth, nHeight); + //add margins to the width and height; + fWidth = (double)nWidth/TWIPS_PER_CM + m_pLayout->GetMarginsValue(MARGIN_LEFT) + m_pLayout->GetMarginsValue(MARGIN_RIGHT); + fHeight = (double)nHeight/TWIPS_PER_CM + m_pLayout->GetMarginsValue(MARGIN_TOP) + m_pLayout->GetMarginsValue(MARGIN_BOTTOM); + pXFFrame->SetWidth(fWidth); + pXFFrame->SetHeight(fHeight); + } + */ + else if(m_pLayout->IsAutoGrow()) + { + pXFFrame->SetMinHeight( fHeight ); + } + } + + if(m_pLayout->IsFrame()) + { + //Set frame link. Only frame layout has this feature + LwpFrameLayout* pLayout= static_cast<LwpFrameLayout*>(m_pLayout); + pXFFrame->SetNextLink(pLayout->GetNextLinkName()); + } + + } +/** +* @descr: parse frame relative to page, frame or cell +* @param: pCont - content container which contains the frame +* +*/ + void LwpFrame::XFConvert(XFContentContainer* pCont) + { + //parse the frame which anchor to page + LwpVirtualLayout* pParent = m_pLayout->GetParentLayout(); + if(pParent->IsPage()&& pParent->GetParentLayout()->IsPage()) + { + //for mirror page, problems exist if the parent layout is header or footer layout, + pParent = pParent->GetParentLayout(); + } + if(m_pLayout->IsAnchorPage()&& pParent->IsPage()) + { + //get parent layout + if(m_pLayout->IsUseOnPage()) + { + sal_Int32 nPageNo = pParent->GetPageNumber(m_pLayout->GetUsePage()); + if(nPageNo>0) + m_pLayout->XFConvertFrame(pCont, nPageNo); + } + else if(m_pLayout->IsUseOnAllPages()) + { + sal_Int32 nFirst = pParent->GetPageNumber(FIRST_LAYOUTPAGENO); + sal_Int32 nLast = pParent->GetPageNumber(LAST_LAYOUTPAGENO); + if(nLast > 0) + m_pLayout->XFConvertFrame(pCont, nFirst, nLast, sal_True); + + } + else if(m_pLayout->IsUseOnAllOddPages()||m_pLayout->IsUseOnAllEvenPages()) + { + sal_Int32 nFirst = pParent->GetPageNumber(FIRST_LAYOUTPAGENO); + sal_Int32 nLast = pParent->GetPageNumber(LAST_LAYOUTPAGENO); + if(nLast > 0) + { + sal_uInt16 first = static_cast<sal_uInt16>(nFirst); + if((m_pLayout->IsUseOnAllOddPages() && !LwpTools::IsOddNumber(first)) + || (m_pLayout->IsUseOnAllEvenPages() && !LwpTools::IsEvenNumber(first))) + nFirst++; + if(nFirst <= nLast) + { + m_pLayout->XFConvertFrame(pCont, nFirst, nLast, sal_False); + } + } + } + } + else + { + m_pLayout->XFConvertFrame(pCont); + } + + } +/** +* @descr: set frame wrap type style +* @param: pFrameStyle - Frame Style object +* +*/ +void LwpFrame::ApplyWrapType(XFFrameStyle *pFrameStyle) +{ + enumXFWrap eWrap = enumXFWrapNone; + switch(m_pLayout->GetWrapType()) + { + case LwpPlacableLayout::LAY_WRAP_AROUND: //fall throught + case LwpPlacableLayout::LAY_WRAP_IRREG_BIGGEST: + { + //In SODC, if Optimal wrap type is used and the distance between the frame object + //and page margins is less than 2cm, the text is not wraped. While there is no this feature in Word Pro + //So the optimal wrap type is translated to left side or right side wrap type according to the distance + //between the frame object and page margins + + eWrap = enumXFWrapBest; + LwpMiddleLayout* pParent = static_cast<LwpMiddleLayout*>(m_pLayout->GetContainerLayout()); + if(pParent) + { + if(IsLeftWider()) + eWrap = enumXFWrapLeft; + else + eWrap = enumXFWrapRight; + } + break; + } + case LwpPlacableLayout::LAY_NO_WRAP_BESIDE: + { + eWrap = enumXFWrapNone; + break; + } + case LwpPlacableLayout::LAY_NO_WRAP_AROUND: + { + eWrap = enumXFWrapRunThrough; + if(!m_pLayout->GetBackColor() && !m_pLayout->GetWaterMarkLayout()) + { + //pFrameStyle->SetBackGround(sal_True); + XFColor aXFColor(0xffffff); //white color + pFrameStyle->SetBackColor(aXFColor); + pFrameStyle->SetTransparency(100); //transparency + } + break; + } + case LwpPlacableLayout::LAY_WRAP_LEFT: //fall throught + case LwpPlacableLayout::LAY_WRAP_IRREG_LEFT: + { + eWrap = enumXFWrapLeft; + break; + } + case LwpPlacableLayout::LAY_WRAP_RIGHT: //fall throught + case LwpPlacableLayout::LAY_WRAP_IRREG_RIGHT: + { + eWrap = enumXFWrapRight; + break; + } + case LwpPlacableLayout::LAY_WRAP_BOTH: //fall throught + case LwpPlacableLayout::LAY_WRAP_IRREG_BOTH: + { + eWrap = enumXFWrapParallel; + break; + } + default: + break; + } + + //If it is the type of with para above, wrap type is enumXFWrapNone + if(m_pLayout->GetRelativeType()==LwpLayoutRelativityGuts::LAY_INLINE_NEWLINE) + { + eWrap = enumXFWrapNone; + } + + pFrameStyle->SetWrapType(eWrap); +} +/** +* @descr: set frame margins style +* @param: pFrameStyle - Frame Style object +* +*/ +void LwpFrame::ApplyMargins(XFFrameStyle *pFrameStyle) +{ + double fLeft = m_pLayout->GetExtMarginsValue(MARGIN_LEFT); + double fRight = m_pLayout->GetExtMarginsValue(MARGIN_RIGHT); + double fTop = m_pLayout->GetExtMarginsValue(MARGIN_TOP); + double fBottom = m_pLayout->GetExtMarginsValue(MARGIN_BOTTOM); + pFrameStyle->SetMargins(fLeft,fRight,fTop,fBottom); +} +/** +* @descr: set padding border style +* @param: pFrameStyle - Frame Style object +* +*/ +void LwpFrame::ApplyPadding(XFFrameStyle *pFrameStyle) +{ + double fLeft = m_pLayout->GetMarginsValue(MARGIN_LEFT); + double fRight = m_pLayout->GetMarginsValue(MARGIN_RIGHT); + double fTop = m_pLayout->GetMarginsValue(MARGIN_TOP); + double fBottom = m_pLayout->GetMarginsValue(MARGIN_BOTTOM); + pFrameStyle->SetPadding(fLeft,fRight,fTop,fBottom); +} +/** +* @descr: set frame border style +* @param: pFrameStyle - Frame Style object +* +*/ +void LwpFrame::ApplyBorders(XFFrameStyle *pFrameStyle) +{ + XFBorders* pBordres = m_pLayout->GetXFBorders(); + if(pBordres) + { + pFrameStyle->SetBorders(pBordres); + } +} +/** +* @descr: set frame colums style +* @param: pFrameStyle - Frame Style object +* +*/ +void LwpFrame::ApplyColumns(XFFrameStyle *pFrameStyle) +{ + XFColumns* pColumns = m_pLayout->GetXFColumns(); + if(pColumns) + { + pFrameStyle->SetColumns(pColumns); + } +} +/** +* @descr: set frame shadow style +* @param: pFrameStyle - Frame Style object +* +*/ +void LwpFrame::ApplyShadow(XFFrameStyle* pFrameStyle) +{ + XFShadow* pXFShadow = m_pLayout->GetXFShadow(); + if(pXFShadow) + { + pFrameStyle->SetShadow(pXFShadow); + } +} +/** +* @descr: set frame back color style +* @param: pFrameStyle - Frame Style object +* +*/ +void LwpFrame::ApplyBackColor(XFFrameStyle* pFrameStyle) +{ + LwpColor* pColor = m_pLayout->GetBackColor(); + if(pColor) + { + XFColor aXFColor(pColor->To24Color()); + pFrameStyle->SetBackColor(aXFColor); + } +} +/** +* @descr: set frame protect style +* @param: pFrameStyle - Frame Style object +* +*/ +void LwpFrame::ApplyProtect(XFFrameStyle* pFrameStyle) +{ + if(m_pLayout->IsProtected()) + { + pFrameStyle->SetProtect(sal_True,sal_True,sal_True); + } +} +/** +* @descr: set frame text direction style +* @param: pFrameStyle - Frame Style object +* +*/ +void LwpFrame::ApplyTextDir(XFFrameStyle* pFrameStyle) +{ + pFrameStyle->SetTextDir(m_pLayout->GetTextDirection()); +} +/** +* @descr: set frame position type style +* @param: pFrameStyle - Frame Style object +* +*/ +void LwpFrame::ApplyPosType(XFFrameStyle* pFrameStyle) +{ + enumXFFrameXPos eXPos = enumXFFrameXPosCenter; + enumXFFrameXRel eXRel = enumXFFrameXRelPara; + enumXFFrameYPos eYPos = enumXFFrameYPosMiddle; + enumXFFrameYRel eYRel = enumXFFrameYRelPara; + sal_uInt8 nType = m_pLayout->GetRelativeType(); + switch(nType) + { + case LwpLayoutRelativityGuts::LAY_PARENT_RELATIVE://fall throught + case LwpLayoutRelativityGuts::LAY_CONTENT_RELATIVE: + { + //anchor to page, frame and cell + eXPos = enumXFFrameXPosFromLeft; + eXRel = enumXFFrameXRelPage; + //set vertical position + if(m_pLayout->IsAnchorPage())//in page + { + LwpVirtualLayout* pContainer = m_pLayout->GetContainerLayout(); + if(pContainer && (pContainer->IsHeader() || pContainer->IsFooter())) + { + //Only anchor to para, the frame can display in header and footer of each page + eYPos = enumXFFrameYPosFromTop; //from top + eYRel = enumXFFrameYRelPara; //from margin + } + else + { + eYPos = enumXFFrameYPosFromTop; + eYRel = enumXFFrameYRelPage; + } + } + if(m_pLayout->IsAnchorFrame()) //in frame + { + eYPos = enumXFFrameYPosFromTop; + eYRel = enumXFFrameYRelPage; + } + if(m_pLayout->IsAnchorCell()) + { + //SODC has no this type, simulate this feature + eYPos = enumXFFrameYPosFromTop; //from top + eYRel = enumXFFrameYRelPara; //from margin + } + break; + } + case LwpLayoutRelativityGuts::LAY_PARA_RELATIVE: //same page as text + { + eXPos = enumXFFrameXPosFromLeft; + eXRel = enumXFFrameXRelPage; + eYPos = enumXFFrameYPosBelow; //below + eYRel = enumXFFrameYRelChar; //from char + //set vertical position + LwpVirtualLayout* pContainer = m_pLayout->GetContainerLayout(); + if(pContainer && pContainer->IsPage())//in page + { + //eYPos = enumXFFrameYPosFromTop; + //eYRel = enumXFFrameYRelPage; + eYPos = enumXFFrameYPosBelow; + eYRel = enumXFFrameYRelChar; + } + else if(pContainer && pContainer->IsFrame()) //in frame + { + eYPos = enumXFFrameYPosFromTop; + eYRel = enumXFFrameYRelPage; + } + else + { + eYPos = enumXFFrameYPosFromTop; //from top + eYRel = enumXFFrameYRelPara; //from margin + } + break; + } + case LwpLayoutRelativityGuts::LAY_INLINE: //in text + { + eXPos = enumXFFrameXPosFromLeft; //need not be set + eXRel = enumXFFrameXRelParaContent; //need not be set + eYPos = enumXFFrameYPosTop; //should be from top + eYRel = enumXFFrameYRelBaseLine; + sal_Int32 nOffset = m_pLayout->GetBaseLineOffset(); + if(nOffset>0) + { + eYPos = enumXFFrameYPosFromTop; + } + break; + } + case LwpLayoutRelativityGuts::LAY_INLINE_NEWLINE: //with para above + { + eXPos = enumXFFrameXPosFromLeft; + eXRel = enumXFFrameXRelParaContent; + //eYPos = enumXFFrameYPosTop; + eYPos = enumXFFrameYPosBottom; + eYRel = enumXFFrameYRelParaContent; + break; + } + case LwpLayoutRelativityGuts::LAY_INLINE_VERTICAL: //in text - vertical + { + eXPos = enumXFFrameXPosFromLeft; + eXRel = enumXFFrameXRelPage; + eYPos = enumXFFrameYPosFromTop; //should be below position + eYRel = enumXFFrameYRelChar; + break; + } + default: + break; + } + + pFrameStyle->SetXPosType(eXPos,eXRel); + pFrameStyle->SetYPosType(eYPos,eYRel); +} +/** +* @descr: set frame watermark style +* @param: pFrameStyle - Frame Style object +* +*/ +void LwpFrame::ApplyWatermark(XFFrameStyle *pFrameStyle) +{ + XFBGImage* pBGImage = m_pLayout->GetXFBGImage(); + if(pBGImage) + { + pFrameStyle->SetBackImage(pBGImage); + //set watermark transparent + LwpMiddleLayout* pLay = static_cast<LwpMiddleLayout*>(m_pLayout->GetWaterMarkLayout()); + LwpBackgroundStuff* pBackgroundStuff = pLay->GetBackgroundStuff(); + if(pBackgroundStuff && !pBackgroundStuff->IsTransparent()) + { + pFrameStyle->SetTransparency(100); + } + } +} + +/** + * @short Apply pattern fill to frame style + * @param pFrameStyle - pointer of XFFrameStyle + * @return + */ +void LwpFrame::ApplyPatternFill(XFFrameStyle* pFrameStyle) +{ + XFBGImage* pXFBGImage = m_pLayout->GetFillPattern(); + if (pXFBGImage) + { + pFrameStyle->SetBackImage(pXFBGImage); + } +} + +/** + * @short Apply background to frame style + * @param pFrameStyle - pointer of XFFrameStyle + * @return + */ +void LwpFrame::ApplyBackGround(XFFrameStyle* pFrameStyle) +{ + if (!m_pLayout) + { + return; + } + + if (m_pLayout->IsPatternFill()) + { + ApplyPatternFill(pFrameStyle); + } + else + { + ApplyBackColor(pFrameStyle); + } +} + +/** +* @descr: set frame size, anchor type, anchored page number +* @param: pXFFrame - XFFrame object +* +*/ +void LwpFrame::ParseAnchorType(XFFrame *pXFFrame) +{ + //set position + double fXOffset = 0; + double fYOffset = 0; + //page number + sal_uInt16 nPageNum = 0; + //set anchor type + enumXFAnchor eAnchor = enumXFAnchorNone; + + LwpLayoutGeometry* pLayoutGeo = m_pLayout->GetGeometry(); + if(pLayoutGeo) + { + LwpPoint aPoint = pLayoutGeo->GetOrigin(); + fXOffset = LwpTools::ConvertFromUnitsToMetric(aPoint.GetX()); + fYOffset = LwpTools::ConvertFromUnitsToMetric(aPoint.GetY()); + } + //set anchor type + eAnchor = enumXFAnchorNone; + sal_uInt8 nType = m_pLayout->GetRelativeType(); + switch(nType) + { + case LwpLayoutRelativityGuts::LAY_PARENT_RELATIVE://fall throught + case LwpLayoutRelativityGuts::LAY_CONTENT_RELATIVE: + { + //anchor to page, frame and cell + if(m_pLayout->IsAnchorPage())//in page + { + LwpVirtualLayout* pContainer = m_pLayout->GetContainerLayout(); + if(pContainer && (pContainer->IsHeader() || pContainer->IsFooter())) + { + eAnchor = enumXFAnchorPara; + fYOffset -= pContainer->GetMarginsValue(MARGIN_TOP); + } + else + eAnchor = enumXFAnchorPage; + } + if(m_pLayout->IsAnchorFrame()) //in frame + { + eAnchor = enumXFAnchorFrame; + } + if(m_pLayout->IsAnchorCell()) //in cell + { + //eAnchor = enumXFAnchorChar; + eAnchor = enumXFAnchorPara; + LwpMiddleLayout* pContainer = static_cast<LwpMiddleLayout*>(m_pLayout->GetContainerLayout()); + if(pContainer) + { + fYOffset -= pContainer->GetMarginsValue(MARGIN_TOP); + } + } + break; + } + case LwpLayoutRelativityGuts::LAY_PARA_RELATIVE: //same page as text + { + eAnchor = enumXFAnchorChar; + LwpVirtualLayout* pContainer = m_pLayout->GetContainerLayout(); + if(pContainer && pContainer->IsPage())//in page + { + //eAnchor = enumXFAnchorPage; + eAnchor = enumXFAnchorChar;// to character + } + else if(pContainer && pContainer->IsFrame()) //in frame + { + eAnchor = enumXFAnchorFrame; + } + else if(pContainer && pContainer->IsCell()) //in cell + { + //eAnchor = enumXFAnchorChar; + eAnchor = enumXFAnchorPara; + fYOffset -= pContainer->GetMarginsValue(MARGIN_TOP); + } + else if(pContainer && (pContainer->IsHeader() || pContainer->IsFooter()))//in header or footer + { + eAnchor = enumXFAnchorPara; + fYOffset -= pContainer->GetMarginsValue(MARGIN_TOP); + } + break; + } + case LwpLayoutRelativityGuts::LAY_INLINE: //in text + { + eAnchor = enumXFAnchorAsChar; + sal_Int32 nOffset = m_pLayout->GetBaseLineOffset(); + if(nOffset>0 && pLayoutGeo) + { + //experiential value + fYOffset =-(m_pLayout->GetGeometryHeight()+2*m_pLayout->GetExtMarginsValue(MARGIN_BOTTOM)-LwpTools::ConvertFromUnitsToMetric(nOffset)); + } + break; + } + case LwpLayoutRelativityGuts::LAY_INLINE_NEWLINE: //with para above + { + eAnchor = enumXFAnchorPara; + break; + } + case LwpLayoutRelativityGuts::LAY_INLINE_VERTICAL: //in text - vertical + { + eAnchor = enumXFAnchorChar; + //set vertical position + double offset = 0; + + //because of the different feature between Word Pro and SODC, I simulate the vertical base offset + //between anchor and frame orgin using the font height. + //LwpPara* pPara = static_cast<LwpPara*>(m_pLayout->GetPosition()->obj()); + XFFont* pFont = m_pLayout->GetFont(); + if(pFont) + { + offset = (double)(pFont->GetFontSize())*CM_PER_INCH/POINTS_PER_INCH; + } + fYOffset = offset-fYOffset; + break; + } + default: + break; + } + + pXFFrame->SetX(fXOffset); + pXFFrame->SetY(fYOffset); + pXFFrame->SetAnchorPage(nPageNum); + pXFFrame->SetAnchorType(eAnchor); +} + +/** + * @descr Calculate the distance between the frame object and the page margins. + * And determine which side(left or right) is wider + */ +sal_Bool LwpFrame::IsLeftWider() +{ + //LwpMiddleLayout* pParent = static_cast<LwpMiddleLayout*>(m_pLayout->GetContainerLayout()); + LwpVirtualLayout* pParent = static_cast<LwpVirtualLayout*>(m_pLayout->GetContainerLayout()); + if(pParent) + { + LwpPoint aPoint = m_pLayout->GetOrigin(); + double fXOffset = LwpTools::ConvertFromUnitsToMetric(aPoint.GetX()); + double fWidth = m_pLayout->GetWidth(); + double fWrapLeft = m_pLayout->GetExtMarginsValue(MARGIN_LEFT); + double fWrapRight = m_pLayout->GetExtMarginsValue(MARGIN_RIGHT); + + //LwpPoint aParentPoint = pParent->GetOrigin(); + //double fParentXOffset = LwpTools::ConvertFromUnitsToMetric(aParentPoint.GetX()); + double fParentWidth = pParent->GetWidth(); + if(pParent->IsCell()) + { + //Get actual width of this cell layout + fParentWidth = static_cast<LwpCellLayout*>(pParent)->GetActualWidth(); + } + double fParentMarginLeft = pParent->GetMarginsValue(MARGIN_LEFT); + double fParentMarginRight = pParent->GetMarginsValue(MARGIN_RIGHT); + + double fLeft = fXOffset - fWrapLeft -fParentMarginLeft; + double fRight = fParentWidth - fParentMarginRight -(fXOffset + fWidth + fWrapRight); + if(fLeft > fRight) + return sal_True; + } + return sal_False; +} + +LwpFrameLink::LwpFrameLink() +{} + +LwpFrameLink::~LwpFrameLink() +{} + +/** + * @descr frame link information + * + */ +void LwpFrameLink::Read(LwpObjectStream* pStrm) +{ + m_PreviousLayout.ReadIndexed(pStrm); + m_NextLayout.ReadIndexed(pStrm); + pStrm->SkipExtra(); +} + +LwpFrameLayout::LwpFrameLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpPlacableLayout(objHdr, pStrm), m_pFrame(NULL) +{ + +} + +LwpFrameLayout::~LwpFrameLayout() +{ + if(m_pFrame) + { + delete m_pFrame; + m_pFrame = NULL; + } +} + +/** + * @descr read frame layout object + * + */ +void LwpFrameLayout::Read() +{ + LwpPlacableLayout::Read(); + if(LwpFileHeader::m_nFileRevision >= 0x000B) + { + if(m_pObjStrm->QuickReaduInt16()) + { + m_Link.Read(m_pObjStrm); + } + } + m_pObjStrm->SkipExtra(); +} + +/** + * @descr create a xfframe and add into content container + * @param: pCont - content container that contains the frame. + * + */ + void LwpFrameLayout::XFConvert(XFContentContainer* pCont) + { + if(m_pFrame) + { + //parse the frame which anchor to paragraph + if(IsRelativeAnchored()) + { + XFConvertFrame(pCont); + } + else + { + m_pFrame->XFConvert(pCont); + } + + } + } +/** + * @descr create a xfframe and add into content container, called by XFConvert + * @param: pCont - content container that contains the frame. + * @param: nPageNo - the page number that the frame anchors + * + */ +void LwpFrameLayout::XFConvertFrame(XFContentContainer* pCont, sal_Int32 nStart , sal_Int32 nEnd, sal_Bool bAll ) +{ + if(m_pFrame) + { + XFFrame* pXFFrame = NULL; + if(nEnd < nStart) + { + pXFFrame = new XFFrame(); + } + else + { + pXFFrame = new XFFloatFrame(nStart, nEnd, bAll); + } + + m_pFrame->Parse(pXFFrame, nStart); + //if it is a link frame, parse contents only once + if(!HasPreviousLinkLayout()) + { + LwpObject* content = m_Content.obj(); + if (content) + { + content->XFConvert(pXFFrame); + //set frame size according to ole size + ApplyGraphicSize(pXFFrame); + } + } + pCont ->Add(pXFFrame); + } +} +/** + * @descr register frame style + * + */ +void LwpFrameLayout::RegisterStyle() +{ + //if it is for water mark, don't register style + if(IsForWaterMark()) + { + return; + } + //register frame style + XFFrameStyle* pFrameStyle = new XFFrameStyle(); + m_pFrame = new LwpFrame(this); + m_pFrame->RegisterStyle(pFrameStyle); + + //register content style + LwpObject* content = m_Content.obj(); + if (content) + { + content->SetFoundry(m_pFoundry); + content->RegisterStyle(); + } + + //register child frame style + RegisterChildStyle(); + + +} +/** + * @descr get the name of the frame that current frame links + * + */ +OUString LwpFrameLayout::GetNextLinkName() +{ + OUString aName; + LwpObjectID* pObjectID = m_Link.GetNextLayout(); + if(!pObjectID->IsNull()) + { + LwpLayout* pLayout = static_cast<LwpLayout*>(pObjectID->obj()); + aName = pLayout->GetName()->str(); + //for division name confict + if(pLayout->GetStyleName().getLength() > 0) + aName = pLayout->GetStyleName(); + } + return aName; +} +/** + * @descr whether current frame is linked by other frame + * + */ +sal_Bool LwpFrameLayout::HasPreviousLinkLayout() +{ + LwpObjectID* pObjectID = m_Link.GetPreviousLayout(); + if(pObjectID->IsNull()) + return sal_False; + return sal_True; +} +/** + * @descr whether current frame is for water mark. Problem maybe exsits by this method, must be tracking + * + */ + sal_Bool LwpFrameLayout::IsForWaterMark() +{ + if(m_nBuoyancy >=LAY_BUOYLAYER) + { + if(!m_Content.IsNull() && (m_Content.obj()->GetTag()==VO_GRAPHIC) ) + { + return sal_True; + } + } + return sal_False; +} + +/** + * @descr Get frame width + * + */ +double LwpFrameLayout::GetWidth() +{ + double fWidth = LwpMiddleLayout::GetWidth(); + if(IsInlineToMargin() && IsAutoGrowWidth()) + { + //for text field entry when choosing maximize field length + fWidth = GetMaxWidth(); + } + return fWidth; +} + +/** + * @descr Get frame width when the text field chooses maximize field length + * + */ +double LwpFrameLayout::GetMaxWidth() +{ + double fActualWidth = 0; + LwpMiddleLayout* pParent = static_cast<LwpMiddleLayout*>(GetContainerLayout()); + if(pParent) + { + LwpPoint aPoint = GetOrigin(); + double fXOffset = LwpTools::ConvertFromUnitsToMetric(aPoint.GetX()); + double fWrapRight = GetExtMarginsValue(MARGIN_RIGHT); + + //Get parent layout width + double fParentWidth = pParent->GetWidth(); + if(pParent->IsCell()) + { + //Get actual width of this cell layout + fParentWidth = static_cast<LwpCellLayout*>(pParent)->GetActualWidth(); + } + + double fParentMarginRight = 0; + sal_uInt8 nType = GetRelativeType(); + if(nType == LwpLayoutRelativityGuts::LAY_INLINE + || nType == LwpLayoutRelativityGuts::LAY_INLINE_NEWLINE ) + { + fParentMarginRight = pParent->GetMarginsValue(MARGIN_RIGHT); + } + + fActualWidth = fParentWidth - fXOffset - fParentMarginRight - fWrapRight; + } + + return fActualWidth; +} + +/** + * @descr Set frame size according to graphic size + * + */ +void LwpFrameLayout::ApplyGraphicSize(XFFrame * pXFFrame) +{ + LwpObject* content = m_Content.obj(); + if(content && (content->GetTag() == VO_GRAPHIC + || content->GetTag() == VO_OLEOBJECT )) + { + LwpGraphicOleObject* pGraOle = static_cast<LwpGraphicOleObject*>(content); + //Get frame geometry size + double fWidth = 0; + double fHeight = 0; + pGraOle->GetGrafScaledSize(fWidth, fHeight); + if( IsFitGraphic()) + { + //graphic scaled sze + fWidth += GetMarginsValue(MARGIN_LEFT) + GetMarginsValue(MARGIN_RIGHT); + fHeight += GetMarginsValue(MARGIN_TOP) + GetMarginsValue(MARGIN_BOTTOM); + } + else if(IsAutoGrowDown() || IsAutoGrowUp()) + { + fWidth = GetWidth(); + fHeight += GetMarginsValue(MARGIN_TOP) + GetMarginsValue(MARGIN_BOTTOM); + } + else if( IsAutoGrowLeft() || IsAutoGrowRight()) + { + fHeight = GetHeight(); + fWidth += GetMarginsValue(MARGIN_LEFT) + GetMarginsValue(MARGIN_RIGHT); + } + else + { + fWidth = GetWidth(); + fHeight = GetHeight(); + } + pXFFrame->SetWidth(fWidth); + pXFFrame->SetHeight(fHeight); + } +} + +LwpGroupLayout::LwpGroupLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpPlacableLayout(objHdr, pStrm),m_pFrame(NULL) +{ + +} + +LwpGroupLayout::~LwpGroupLayout() +{ + if(m_pFrame) + { + delete m_pFrame; + m_pFrame = NULL; + } +} +/** + * @descr read group layout object + * + */ +void LwpGroupLayout::Read() +{ + LwpPlacableLayout::Read(); + m_pObjStrm->SkipExtra(); +} +/** + * @descr register group frame style + * + */ +void LwpGroupLayout::RegisterStyle() +{ + //register frame style + XFFrameStyle* pFrameStyle = new XFFrameStyle(); + m_pFrame = new LwpFrame(this); + m_pFrame->RegisterStyle(pFrameStyle); + + //register child frame style + RegisterChildStyle(); + /* + LwpVirtualLayout* pLayout = static_cast<LwpVirtualLayout*>(GetChildHead()->obj()); + while(pLayout) + { + pLayout->SetFoundry(m_pFoundry); + pLayout->RegisterStyle(); + pLayout = static_cast<LwpVirtualLayout*>(pLayout->GetNext()->obj()); + } + */ +} +/** + * @descr create a xfframe and add into content container + * @param: pCont - content container that contains the frame. + * + */ +void LwpGroupLayout::XFConvert(XFContentContainer *pCont) +{ + if(m_pFrame) + { + //parse the frame which anchor to paragraph + if(IsRelativeAnchored()) + { + XFConvertFrame(pCont); + } + else + { + m_pFrame->XFConvert(pCont); + } + + } +} +/** + * @descr create a xfframe and add into content container, called by XFConvert + * @param: pCont - content container that contains the frame. + * @param: nPageNo - the page number that the frame anchors + * + */ +void LwpGroupLayout::XFConvertFrame(XFContentContainer* pCont, sal_Int32 nStart , sal_Int32 nEnd, sal_Bool bAll) +{ + if(m_pFrame) + { + XFFrame* pXFFrame = NULL; + if(nEnd < nStart) + { + pXFFrame = new XFFrame(); + } + else + { + pXFFrame = new XFFloatFrame(nStart, nEnd, bAll); + } + + m_pFrame->Parse(pXFFrame, nStart); + + //add child frame into group + LwpVirtualLayout* pLayout = static_cast<LwpVirtualLayout*>(GetChildHead()->obj()); + while(pLayout) + { + pLayout->XFConvert(pXFFrame); + pLayout = static_cast<LwpVirtualLayout*>(pLayout->GetNext()->obj()); + } + + pCont ->Add(pXFFrame); + } +} + +LwpGroupFrame::LwpGroupFrame(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + :LwpContent(objHdr, pStrm) +{} + +LwpGroupFrame::~LwpGroupFrame() +{} + +void LwpGroupFrame::Read() +{ + LwpContent::Read(); + m_pObjStrm->SkipExtra(); + +} + void LwpGroupFrame::RegisterStyle() +{ +} +void LwpGroupFrame::XFConvert(XFContentContainer* pCont) +{ +} + +LwpDropcapLayout::LwpDropcapLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpFrameLayout(objHdr, pStrm) +{ + m_nChars = 1; + m_nLines = 3; +} + +void LwpDropcapLayout::Read() +{ + LwpFrameLayout::Read(); + m_nLines = m_pObjStrm->QuickReaduInt16(); + m_pObjStrm->SeekRel(1); + m_pObjStrm->SkipExtra(); +} + +void LwpDropcapLayout::Parse(IXFStream* pOutputStream) +{ + LwpStory* pStory = static_cast<LwpStory*>(m_Content.obj(VO_STORY)); + if (!pStory) + return; + LwpObject* pPara = pStory->GetFirstPara()->obj(VO_PARA); + if(pPara) + { + pPara->SetFoundry(m_pFoundry); + pPara->Parse(pOutputStream); + } +} + +void LwpDropcapLayout::XFConvert(XFContentContainer* pCont) +{ + LwpStory* pStory = static_cast<LwpStory*>(m_Content.obj(VO_STORY)); + if (pStory) + { + pStory->SetFoundry(m_pFoundry); + pStory->XFConvert(pCont); + } +} + +LwpStory* LwpDropcapLayout::GetContentStory() +{ + return static_cast<LwpStory*>(m_Content.obj(VO_STORY)); +} + +void LwpDropcapLayout::RegisterStyle(LwpFoundry* pFoundry) +{ + LwpStory* pStory = GetContentStory(); + if (pStory) + { + pStory->SetDropcapFlag(sal_True); + pStory->SetFoundry(pFoundry); + LwpPara* pPara = static_cast<LwpPara*>(pStory->GetFirstPara()->obj()); + while(pPara) + { + pPara->SetFoundry(pFoundry); + pPara->RegisterStyle(); + pPara = static_cast<LwpPara*>(pPara->GetNext()->obj()); + } + } +} + +/** + * @descr do nothing + * + */ +void LwpDropcapLayout::RegisterStyle() +{ +} + +LwpRubyLayout::LwpRubyLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpFrameLayout(objHdr, pStrm) +{ +} + +void LwpRubyLayout::Read() +{ + LwpFrameLayout::Read(); + m_nPlacement = m_pObjStrm->QuickReaduInt8(); + m_nAlignment = m_pObjStrm->QuickReaduInt8();; + m_nStateFlag = m_pObjStrm->QuickReaduInt16();; + m_nXOffset = m_pObjStrm->QuickReadInt32(); + m_nYOffset = m_pObjStrm->QuickReadInt32(); + m_objRubyMarker.ReadIndexed(m_pObjStrm); + m_pObjStrm->SkipExtra(); +} + +LwpRubyMarker* LwpRubyLayout::GetMarker() +{ + return static_cast<LwpRubyMarker*>(m_objRubyMarker.obj(VO_RUBYMARKER)); +} + +LwpStory* LwpRubyLayout::GetContentStory() +{ + return static_cast<LwpStory*>(m_Content.obj(VO_STORY)); +} + +void LwpRubyLayout::ConvertContentText() +{ + LwpStory* pStory = GetContentStory(); + LwpRubyMarker* pMarker = GetMarker(); + if (pStory && pMarker) + pMarker->SetRubyText(pStory->GetContentText(sal_True)); +} + +void LwpRubyLayout::RegisterStyle() +{ + LwpRubyMarker* pMarker = GetMarker(); + + XFRubyStyle* pRubyStyle = new XFRubyStyle; + + enumXFRubyPosition eType = enumXFRubyLeft; + if (m_nAlignment == LEFT) + { + eType = enumXFRubyLeft; + } + else if(m_nAlignment == RIGHT) + { + eType = enumXFRubyRight; + } + else if(m_nAlignment == CENTER) + { + eType = enumXFRubyCenter; + } + pRubyStyle->SetAlignment(eType); + + eType = enumXFRubyTop; + if (m_nPlacement == TOP) + { + eType = enumXFRubyTop; + } + else if(m_nPlacement == BOTTOM) + { + eType = enumXFRubyBottom; + } + pRubyStyle->SetPosition(eType); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + OUString rubyStyle = pXFStyleManager->AddStyle(pRubyStyle)->GetStyleName(); + pMarker->SetRubyStyleName(rubyStyle); + + LwpStory* pStory = GetContentStory(); + pStory->SetFoundry(m_pFoundry); + OUString textStyle = pStory->RegisterFirstFribStyle(); + pMarker->SetTextStyleName(textStyle); +} diff --git a/lotuswordpro/source/filter/lwpframelayout.hxx b/lotuswordpro/source/filter/lwpframelayout.hxx new file mode 100644 index 000000000000..2283e5b53db1 --- /dev/null +++ b/lotuswordpro/source/filter/lwpframelayout.hxx @@ -0,0 +1,240 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * the class for VO_FrameLayout + ************************************************************************/ +/************************************************************************* + * Change History +Mar 2005 Created + ************************************************************************/ + +#ifndef _LWPFRAMELAYOUT_HXX +#define _LWPFRAMELAYOUT_HXX + +#include "lwplayout.hxx" +#include "lwpstory.hxx" +#include "lwpmarker.hxx" +/** + * @brief For register frame style and parse frame + * + */ + +class LwpFrame +{ +public: + LwpFrame(LwpPlacableLayout* pLayout); + ~LwpFrame(); + void RegisterStyle(XFFrameStyle* pFrameStyle); + void Parse(XFFrame* pXFFrame, sal_Int32 nPageNo = 0); + void XFConvert(XFContentContainer* pCont); +private: + void ApplyWrapType(XFFrameStyle* pFrameStyle); + void ApplyMargins(XFFrameStyle* pFrameStyle); + void ApplyPadding(XFFrameStyle* pFrameStyle); + void ApplyBorders(XFFrameStyle* pFrameStyle); + void ApplyColumns(XFFrameStyle* pFrameStyle); + void ApplyShadow(XFFrameStyle* pFrameStyle); + void ApplyBackColor(XFFrameStyle* pFrameStyle); + void ApplyProtect(XFFrameStyle* pFrameStyle); + void ApplyTextDir(XFFrameStyle* pFrameStyle); + void ApplyPosType(XFFrameStyle* pFrameStyle); + void ApplyWatermark(XFFrameStyle* pFrameStyle); + // add by , 06/01/2005 + void ApplyPatternFill(XFFrameStyle* pFrameStyle); + void ApplyBackGround(XFFrameStyle* pFrameStyle); + // end add + void ParseAnchorType(XFFrame* pXFFrame); + sal_Bool IsLeftWider(); +private: + LwpPlacableLayout* m_pLayout; + OUString m_StyleName; +}; + +/** + * @brief Frame link information + * + */ +class LwpFrameLink +{ +public: + LwpFrameLink(); + ~LwpFrameLink(); + void Read(LwpObjectStream* pStrm); + LwpObjectID* GetNextLayout(){ return &m_NextLayout;} + LwpObjectID* GetPreviousLayout(){ return &m_PreviousLayout;} +private: + LwpObjectID m_PreviousLayout; + LwpObjectID m_NextLayout; +}; + +/** + * @brief VO_FRAMELAYOUT object + * + */ +class LwpFrameLayout: public LwpPlacableLayout +{ +public: + LwpFrameLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpFrameLayout(); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_FRAME_LAYOUT;} + virtual void RegisterStyle(); + virtual void XFConvert(XFContentContainer* pCont); + void XFConvertFrame(XFContentContainer* pCont, sal_Int32 nStart = 0, sal_Int32 nEnd = 0, sal_Bool bAll = sal_False); + OUString GetNextLinkName(); + sal_Bool HasPreviousLinkLayout(); + sal_Bool IsForWaterMark(); + double GetWidth(); + void ApplyGraphicSize(XFFrame* pXFFrame); +protected: + void Read(); +private: + double GetMaxWidth(); + +private: + LwpFrameLink m_Link; + LwpFrame* m_pFrame; +}; + +/** + * @brief VO_GROUPLAYOUT object , information for frame group layout + * + */ +class LwpGroupLayout: public LwpPlacableLayout +{ +public: + LwpGroupLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpGroupLayout(); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_GROUP_LAYOUT;} + virtual void RegisterStyle(); + virtual void XFConvert(XFContentContainer* pCont); + void XFConvertFrame(XFContentContainer* pCont, sal_Int32 nStart = 0, sal_Int32 nEnd = 0, sal_Bool bAll = sal_False); +protected: + void Read(); +private: + LwpFrame* m_pFrame; + +}; + +/** + * @brief VO_GROUPFRAME object , information for frame group contents + * + */ +class LwpGroupFrame: public LwpContent +{ +public: + LwpGroupFrame(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpGroupFrame(); + virtual void RegisterStyle(); + virtual void XFConvert(XFContentContainer* pCont); +protected: + void Read(); +}; + +class LwpStory; +class LwpFoundry; +class LwpDropcapLayout : public LwpFrameLayout +{ +public: + LwpDropcapLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpDropcapLayout(){}; + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_DROPCAP_LAYOUT;} + virtual void Parse(IXFStream* pOutputStream); + virtual void XFConvert(XFContentContainer* pCont); + sal_uInt16 GetLines(){return m_nLines;} + void SetChars(sal_uInt32 nChars){ m_nChars += nChars;} + sal_uInt32 GetChars() const {return m_nChars;} + LwpStory* GetContentStory(); + void RegisterStyle(LwpFoundry* pFoundry); + void RegisterStyle(); +protected: + void Read(); +private: + sal_uInt16 m_nLines; + sal_uInt32 m_nChars; +}; + +class LwpRubyLayout : public LwpFrameLayout +{ +public: + LwpRubyLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpRubyLayout(){}; + LwpRubyMarker* GetMarker(); + void ConvertContentText(); + LwpStory* GetContentStory(); + sal_uInt8 GetPosition(){return m_nPlacement;} + sal_uInt8 GetAlignment(){return m_nAlignment;} + void RegisterStyle(); + enum{ + LEFT = 4, + RIGHT = 5, + CENTER = 2, + TOP = 1, + BOTTOM = 3 + }; +protected: + void Read(); +private: + sal_uInt8 m_nPlacement; + sal_uInt8 m_nAlignment; + sal_uInt16 m_nStateFlag; + sal_Int32 m_nXOffset; + sal_Int32 m_nYOffset; + LwpObjectID m_objRubyMarker; + sal_Int32 m_nBodyX; + sal_Int32 m_nBodyWidth; +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpfrib.cxx b/lotuswordpro/source/filter/lwpfrib.cxx new file mode 100644 index 000000000000..c3270fccc412 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfrib.cxx @@ -0,0 +1,463 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ +#include "lwpfrib.hxx" +#include "lwpcharsetmgr.hxx" +#include "lwpsection.hxx" +#include "lwphyperlinkmgr.hxx" +#include "xfilter/xfhyperlink.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xfsection.hxx" +#include "xfilter/xfsectionstyle.hxx" +#include "xfilter/xftextspan.hxx" +#include "xfilter/xftextcontent.hxx" +#include "lwpfribheader.hxx" +#include "lwpfribtext.hxx" +#include "lwpfribtable.hxx" +#include "lwpfribbreaks.hxx" +#include "lwpfribframe.hxx" +#include "lwpfribsection.hxx" +#include "lwpcharacterstyle.hxx" +#include "lwpfootnote.hxx" +#include "lwpnotes.hxx" +#include "lwpfribmark.hxx" +#include "lwpchangemgr.hxx" +#include "lwpdocdata.hxx" +#include "lwpglobalmgr.hxx" + +LwpFrib::LwpFrib(LwpPara* pPara) + : m_pPara(pPara), m_pNext(NULL) +{ + m_ModFlag = sal_False; + m_pModifiers = NULL; + m_bRevisionFlag = sal_False; +} + +LwpFrib::~LwpFrib() +{ + if(m_pModifiers) + delete m_pModifiers; +} + +LwpFrib* LwpFrib::CreateFrib(LwpPara* pPara, LwpObjectStream* pObjStrm, sal_uInt8 fribtag,sal_uInt8 editID) +{ + //Read Modifier + ModifierInfo* pModInfo = NULL; + if(fribtag & FRIB_TAG_MODIFIER) + { + pModInfo = new ModifierInfo(); + pModInfo->CodePage = 0; + pModInfo->FontID = 0; + pModInfo->RevisionFlag = sal_False; + pModInfo->HasCharStyle = sal_False; + pModInfo->HasLangOverride = sal_False; + pModInfo->HasHighLight = sal_False; + ReadModifiers( pObjStrm, pModInfo ); + } + + //Read frib data + LwpFrib* newFrib = NULL; + sal_uInt16 friblen = pObjStrm->QuickReaduInt16(); + sal_uInt8 fribtype = fribtag&~FRIB_TAG_TYPEMASK; + switch(fribtype) + { + case FRIB_TAG_INVALID: //fall through + case FRIB_TAG_EOP: //fall through + default: + newFrib = new LwpFrib(pPara); + break; + case FRIB_TAG_TEXT: + { + newFrib = new LwpFribText (pPara, fribtag & FRIB_TAG_NOUNICODE); + break; + } + case FRIB_TAG_TABLE: + newFrib = new LwpFribTable(pPara); + break; + case FRIB_TAG_TAB: + newFrib = new LwpFribTab(pPara); + break; + case FRIB_TAG_PAGEBREAK: + newFrib = new LwpFribPageBreak(pPara); + break; + case FRIB_TAG_FRAME: + newFrib = new LwpFribFrame(pPara); + break; + case FRIB_TAG_FOOTNOTE: + newFrib = new LwpFribFootnote(pPara); + break; + case FRIB_TAG_COLBREAK: + newFrib = new LwpFribColumnBreak(pPara); + break; + case FRIB_TAG_LINEBREAK: + newFrib = new LwpFribLineBreak(pPara); + break; + case FRIB_TAG_HARDSPACE: + newFrib = new LwpFribHardSpace(pPara); + break; + case FRIB_TAG_SOFTHYPHEN: + newFrib = new LwpFribSoftHyphen(pPara); + break; + case FRIB_TAG_PARANUMBER: + newFrib = new LwpFribParaNumber(pPara); + break; + case FRIB_TAG_UNICODE: //fall through + case FRIB_TAG_UNICODE2: //fall through + case FRIB_TAG_UNICODE3: //fall through + newFrib = new LwpFribUnicode(pPara); + break; + case FRIB_TAG_NOTE: + newFrib = new LwpFribNote(pPara); + break; +/* case FRIB_TAG_KANJI: + #ifdef KANJI + newFrib = new CFribHelperKanji; + #else + newFrib = new CFribHelperUnicode; + #endif + break; + case FRIB_TAG_HKATAKANA: + #ifdef KANJI + newFrib = new CFribHelperHKatakana; + #else + newFrib = new CFribHelperUnicode; + #endif + break; + case FRIB_TAG_SEPARATOR: + newFrib = new CFribHelperSeparator; + break;*/ + case FRIB_TAG_SECTION: + newFrib = new LwpFribSection(pPara); + break; +/* case FRIB_TAG_TOMBSTONE: + newFrib = new CFribHelperTombstone; + break; + case FRIB_TAG_SPECIALTAB: + newFrib = new CFribHelperSpecialTab; + break; + case FRIB_TAG_PAGENUMBER: + newFrib = new CFribHelperPageNumber; + break; +*/ case FRIB_TAG_PAGENUMBER: + newFrib = new LwpFribPageNumber(pPara); + break; + case FRIB_TAG_DOCVAR: + newFrib = new LwpFribDocVar(pPara); + break; + case FRIB_TAG_BOOKMARK: + newFrib = new LwpFribBookMark(pPara); + break; +/* case FRIB_TAG_DOCVAR: + newFrib = new CFribHelperBookmark; + break; + case FRIB_TAG_DDE: + newFrib = new CFribHelperDDE; + break; +*/ case FRIB_TAG_FIELD: + newFrib = new LwpFribField(pPara); + break; + case FRIB_TAG_CHBLOCK: + newFrib = new LwpFribCHBlock(pPara); + break; +/* case FRIB_TAG_FLOWBREAK: + newFrib = new CFribHelperFlowBreak; + break; +#ifdef RUBY*/ + case FRIB_TAG_RUBYMARKER: + newFrib = new LwpFribRubyMarker(pPara); + break; + case FRIB_TAG_RUBYFRAME: + newFrib = new LwpFribRubyFrame(pPara); + break; +/*#endif +*/ + } + + //Do not know why the fribTag judgement is necessary, to be checked with + if ( fribtag & FRIB_TAG_MODIFIER ) + { + newFrib->SetModifiers(pModInfo); + } + + newFrib->SetType(fribtype); + newFrib->SetEditor(editID); + newFrib->Read(pObjStrm, friblen); + return newFrib; +} + +void LwpFrib::Read(LwpObjectStream* pObjStrm, sal_uInt16 len) +{ + pObjStrm->SeekRel(len); +} + +void LwpFrib::SetModifiers(ModifierInfo* pModifiers) +{ + if (pModifiers) + { + m_pModifiers = pModifiers; + m_ModFlag = sal_True; + if (pModifiers->RevisionFlag) + { + m_bRevisionFlag = sal_True; + m_nRevisionType = pModifiers->RevisionType; + } + } +} + +void LwpFrib::RegisterStyle(LwpFoundry* pFoundry) +{ + if (!m_pModifiers) + return; + if (!m_pModifiers->FontID && !m_pModifiers->HasCharStyle && !m_pModifiers->HasHighLight) + { + m_ModFlag = sal_False; + return; + } + //we only read four modifiers, in these modifiers,CodePage and LangOverride are not styles, + //so we can only handle fontid and characstyle, if others ,we should not reg style + //note by ,1-27 + XFFont* pFont; + XFTextStyle* pStyle = NULL; + m_StyleName = A2OUSTR(""); + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + if (m_pModifiers->HasCharStyle) + { + XFTextStyle* pNamedStyle = static_cast<XFTextStyle*> + (pFoundry->GetStyleManager()->GetStyle(m_pModifiers->CharStyleID)); + if (m_pModifiers->FontID) + { + pStyle = new XFTextStyle(); + *pStyle = *pNamedStyle; + LwpCharacterStyle* pCharStyle = static_cast<LwpCharacterStyle*>(m_pModifiers->CharStyleID.obj()); + + pStyle->SetStyleName(A2OUSTR("")); + pFont = pFoundry->GetFontManger()->CreateOverrideFont(pCharStyle->GetFinalFontID(),m_pModifiers->FontID); + pStyle->SetFont(pFont); + m_StyleName = pXFStyleManager->AddStyle(pStyle)->GetStyleName(); + } + else + m_StyleName = pNamedStyle->GetStyleName(); + } + else + { + if (m_pModifiers->FontID) + { + pStyle = new XFTextStyle(); + pFont = pFoundry->GetFontManger()->CreateFont(m_pModifiers->FontID); + pStyle->SetFont(pFont); + m_StyleName = pXFStyleManager->AddStyle(pStyle)->GetStyleName(); + } + } + + if (m_pModifiers->HasHighLight) + { + XFColor aColor = GetHighLightColor();//right yellow + if (pStyle)//change the style directly + pStyle->GetFont()->SetBackColor(aColor); + else //register a new style + { + pStyle = new XFTextStyle(); + + if (m_StyleName.getLength()>0) + { + XFTextStyle* pOldStyle = pXFStyleManager->FindTextStyle(m_StyleName); + *pStyle = *pOldStyle; + pStyle->GetFont()->SetBackColor(aColor); + } + else + { + pFont = new XFFont; + pFont->SetBackColor(aColor); + pStyle->SetFont(pFont); + } + m_StyleName = pXFStyleManager->AddStyle(pStyle)->GetStyleName(); + } + } +} + +void LwpFrib::ReadModifiers(LwpObjectStream* pObjStrm,ModifierInfo* pModInfo) +{ + sal_uInt8 Modifier; + sal_uInt8 len; +// sal_Bool ModifyFlag = sal_False; + + for(;;) + { + // Get the modifier type + pObjStrm->QuickRead(&Modifier, sizeof(Modifier)); + + // Stop when we hit the last modifier + if (Modifier == FRIB_MTAG_NONE) + break; +// ModifyFlag = sal_True; + // Get the modifier length + pObjStrm->QuickRead(&len, sizeof(len)); + + switch (Modifier) + { + case FRIB_MTAG_FONT: + pObjStrm->QuickRead(&pModInfo->FontID,len); + break; + case FRIB_MTAG_CHARSTYLE: + pModInfo->HasCharStyle = sal_True; + pModInfo->CharStyleID.ReadIndexed(pObjStrm); + break; + case FRIB_MTAG_LANGUAGE: + pModInfo->HasLangOverride = sal_True; + pModInfo->Language.Read(pObjStrm); + break; + case FRIB_MTAG_CODEPAGE: + pObjStrm->QuickRead(&pModInfo->CodePage,len); + break; + //add by , 02/22/2005 + case FRIB_MTAG_ATTRIBUTE: + pModInfo->aTxtAttrOverride.Read(pObjStrm); + if (pModInfo->aTxtAttrOverride.IsHighLight()) + pModInfo->HasHighLight = sal_True; + break; + //end add + case FRIB_MTAG_REVISION: + pModInfo->RevisionType = pObjStrm->QuickReaduInt8(); + pModInfo->RevisionFlag = sal_True; + break; + default: + pObjStrm->SeekRel(len); + break; + } + // TODO: read the modifier data + // pObjStrm->SeekRel(len); + + } + +} + +//do nothing +//void LwpFrib::Parse(IXFStream* pOutputStream) +//{} + +/** +* @descr: Whether there are other fribs following current frib. +* @return: Ture if having following fribs, or false. +*/ +sal_Bool LwpFrib::HasNextFrib() +{ + if (!GetNext() || GetNext()->GetType()==FRIB_TAG_EOP) + return sal_False; + return sal_True; +} + +void LwpFrib::ConvertChars(XFContentContainer* pXFPara,OUString text) +{ + if (m_ModFlag) + { + OUString strStyleName = GetStyleName(); + XFTextSpan *pSpan = new XFTextSpan(text,strStyleName); + pXFPara->Add(pSpan); + } + else + { + XFTextContent *pSpan = new XFTextContent(); + pSpan->SetText(text); + pXFPara->Add(pSpan); + } +} + +void LwpFrib::ConvertHyperLink(XFContentContainer* pXFPara,LwpHyperlinkMgr* pHyperlink,OUString text) +{ + XFHyperlink* pHyper = new XFHyperlink; + pHyper->SetHRef(pHyperlink->GetHyperlink()); + pHyper->SetText(text); + pHyper->SetStyleName(GetStyleName()); + pXFPara->Add(pHyper); +} + +/** +* @descr: Get the current frib font style +* @return: XFFont pointer +*/ +XFFont* LwpFrib::GetFont() +{ + XFFont* pFont = NULL; + if(m_pModifiers&&m_pModifiers->FontID) + { + LwpFoundry* pFoundry = m_pPara->GetFoundry(); + pFont = pFoundry->GetFontManger()->CreateFont(m_pModifiers->FontID); + } + else + { + XFParaStyle* pXFParaStyle = m_pPara->GetXFParaStyle(); + pFont = pXFParaStyle->GetFont(); + } + return pFont; +} + +OUString LwpFrib::GetEditor() +{ + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + return pGlobal->GetEditorName(m_nEditor); +} + +XFColor LwpFrib::GetHighLightColor() +{ + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + return pGlobal->GetHighLightColor(m_nEditor); +} diff --git a/lotuswordpro/source/filter/lwpfrib.hxx b/lotuswordpro/source/filter/lwpfrib.hxx new file mode 100644 index 000000000000..7accf3e40d56 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfrib.hxx @@ -0,0 +1,139 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ +#ifndef _LWPFRIB_HXX_ +#define _LWPFRIB_HXX_ +#include "lwpobjid.hxx" +#include "lwpobjstrm.hxx" +#include "lwpbasetype.hxx" +#include "lwpoverride.hxx" +#include "lwpfoundry.hxx" +#include "xfilter/xfcolor.hxx" + +struct ModifierInfo +{ + sal_uInt32 FontID; + LwpObjectID CharStyleID; + LwpTextLanguageOverride Language; + //add by , 02/22/2005 + LwpTextAttributeOverride aTxtAttrOverride; + //end add + sal_uInt16 CodePage; + sal_Bool HasCharStyle; + sal_Bool HasLangOverride; + sal_Bool HasHighLight; + sal_uInt8 RevisionType; + sal_Bool RevisionFlag; +}; + +class LwpPara; +class LwpHyperlinkMgr; +class LwpFrib +{ +public: + LwpFrib(LwpPara* pPara); + ~LwpFrib(); + static LwpFrib* CreateFrib(LwpPara* pPara, LwpObjectStream* pObjStrm, sal_uInt8 fribtag, sal_uInt8 editID); + virtual void Read(LwpObjectStream* pObjStrm, sal_uInt16 len); +// virtual void Parse(IXFStream* pOutputStream); + LwpFrib* GetNext(){return m_pNext;} + void SetNext(LwpFrib* next){m_pNext = next;} + sal_uInt8 GetType() { return m_nFribType;} + void SetType(sal_uInt8 type) { m_nFribType = type;} + void SetEditor(sal_uInt8 editor) { m_nEditor = editor;} + OUString GetEditor(); + XFColor GetHighLightColor(); +protected: + LwpPara* m_pPara; + LwpFrib* m_pNext; + sal_uInt8 m_nFribType; + ModifierInfo* m_pModifiers; + rtl::OUString m_StyleName; +public: + sal_Bool m_ModFlag; + rtl::OUString GetStyleName(){return m_StyleName;}//add by 1-10 +// void SetStyle(LwpFoundry* pFoundry); + sal_Bool IsModified(){return m_ModFlag;}; + void SetModifiers(ModifierInfo* pModifiers); + ModifierInfo* GetModifiers(){return m_pModifiers;}; + virtual void RegisterStyle(LwpFoundry* pFoundry); + sal_Bool HasNextFrib(); + void ConvertChars(XFContentContainer* pXFPara,OUString text); + void ConvertHyperLink(XFContentContainer* pXFPara,LwpHyperlinkMgr* pHyperlink,OUString text); + XFFont* GetFont(); + + sal_uInt8 GetRevisionType(){return m_nRevisionType;} + sal_Bool GetRevisionFlag(){return m_bRevisionFlag;} + enum{ + REV_INSERT =0, + REV_DELETE = 1, + }; + LwpPara* GetMyPara(){return m_pPara;} +private: + static void ReadModifiers(LwpObjectStream* pObjStrm,ModifierInfo* pModInfo); +protected: + sal_uInt8 m_nRevisionType; + sal_Bool m_bRevisionFlag; + sal_uInt8 m_nEditor; +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpfribbreaks.cxx b/lotuswordpro/source/filter/lwpfribbreaks.cxx new file mode 100644 index 000000000000..16c6ce1ea363 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfribbreaks.cxx @@ -0,0 +1,165 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ +#include "lwpfribbreaks.hxx" +#include "lwpstory.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xfsectionstyle.hxx" +#include "lwpsection.hxx" +#include "xfilter/xfsection.hxx" +#include "lwpglobalmgr.hxx" + +void LwpFribColumnBreak::RegisterBreakStyle(LwpPara * pPara) +{ +// XFParaStyle* pBaseStyle = static_cast<XFParaStyle*>(pFoundry->GetStyleManager()->GetStyle(styleID)); + XFParaStyle* pBaseStyle = pPara->GetXFParaStyle(); + if (pBaseStyle == NULL) return; +// m_StyleName = pBaseStyle->GetStyleName(); + + XFParaStyle* pOverStyle = new XFParaStyle; + *pOverStyle = *pBaseStyle; + pOverStyle->SetStyleName(A2OUSTR("")); + + //Old code + //if (static_cast<LwpStory*>(pPara->GetStoryID()->obj()) + // ->GetCurrentLayout()->GetNumCols() == 1) + //New code + LwpStory* pStory = static_cast<LwpStory*>(pPara->GetStoryID()->obj()); + LwpPageLayout* pCurLayout = pStory ? pStory->GetCurrentLayout() : NULL; + if( pCurLayout && (pCurLayout->GetNumCols() == 1) ) + + { +// if (!GetNext() || GetNext()->GetType()==FRIB_TAG_EOP) + pOverStyle->SetBreaks(enumXFBreakBefPage); +// else +// pOverStyle->SetBreaks(enumXFBreakBefPage); + } + else + { + if (!GetNext() || GetNext()->GetType()==FRIB_TAG_EOP) + pOverStyle->SetBreaks(enumXFBreakAftColumn); + else + pOverStyle->SetBreaks(enumXFBreakBefColumn); + } + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_StyleName = pXFStyleManager->AddStyle(pOverStyle)->GetStyleName(); +} + +LwpFribPageBreak::LwpFribPageBreak( LwpPara* pPara ) + : LwpFrib(pPara), m_pMasterPage(NULL),m_bLastFrib(sal_False) +{ +} + +LwpFribPageBreak::~LwpFribPageBreak() +{ + if(m_pMasterPage) + { + delete m_pMasterPage; + m_pMasterPage = NULL; + } +} + +void LwpFribPageBreak::Read(LwpObjectStream * pObjStrm, sal_uInt16 len) +{ + m_Layout.ReadIndexed(pObjStrm); +} + + +void LwpFribPageBreak::RegisterBreakStyle(LwpPara* pPara) +{ + XFParaStyle* pBaseStyle = pPara->GetXFParaStyle(); + if (pBaseStyle == NULL) return; + + LwpPageLayout* pLayout = static_cast<LwpPageLayout*>(m_Layout.obj()); + if(pLayout) + { + m_pMasterPage = new LwpMasterPage(pPara, pLayout); + m_pMasterPage->RegisterMasterPage(this); + return; + } + + XFParaStyle* pOverStyle = new XFParaStyle; + *pOverStyle = *pBaseStyle; + pOverStyle->SetStyleName(A2OUSTR("")); + pOverStyle->SetMasterPage(pBaseStyle->GetMasterPage()); + + if (!GetNext() || GetNext()->GetType()==FRIB_TAG_EOP) + m_bLastFrib = sal_True; + else + m_bLastFrib = sal_False; + + if (m_bLastFrib == sal_True) + pOverStyle->SetBreaks(enumXFBreakAftPage); + else + pOverStyle->SetBreaks(enumXFBreakBefPage); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_StyleName = pXFStyleManager->AddStyle(pOverStyle)->GetStyleName(); +} + +void LwpFribPageBreak::ParseLayout() +{ + if(m_pMasterPage) + { + m_pMasterPage->ParseSection(this); + } +} diff --git a/lotuswordpro/source/filter/lwpfribbreaks.hxx b/lotuswordpro/source/filter/lwpfribbreaks.hxx new file mode 100644 index 000000000000..3fda6b7dd484 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfribbreaks.hxx @@ -0,0 +1,104 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ +#ifndef _LWPFRIBBREAKS_HXX_ +#define _LWPFRIBBREAKS_HXX_ + +#include "lwpfrib.hxx" +#include "xfilter/xfparastyle.hxx" +#include "lwppara.hxx" +#include "lwpfribsection.hxx" + +class LwpFribPageBreak: public LwpFrib +{ +public: + LwpFribPageBreak( LwpPara* pPara ); + ~LwpFribPageBreak(); + void Read(LwpObjectStream* pObjStrm, sal_uInt16 len); + void RegisterBreakStyle(LwpPara* pPara); + void ParseLayout(); + LwpObjectID* GetLayout(){return &m_Layout;} + sal_Bool IsLastFrib(){return m_bLastFrib;} + +private: + LwpObjectID m_Layout; + sal_Bool m_bLastFrib; + + LwpMasterPage* m_pMasterPage; +}; + +class LwpFribLineBreak: public LwpFrib +{ +public: + LwpFribLineBreak( LwpPara* pPara ) : LwpFrib(pPara){}; + ~LwpFribLineBreak(){}; +}; + +class LwpFribColumnBreak: public LwpFrib +{ +public: + LwpFribColumnBreak( LwpPara* pPara ) : LwpFrib(pPara){}; + ~LwpFribColumnBreak(){}; + void RegisterBreakStyle(LwpPara* pPara); +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpfribframe.cxx b/lotuswordpro/source/filter/lwpfribframe.cxx new file mode 100644 index 000000000000..adfdc633b15d --- /dev/null +++ b/lotuswordpro/source/filter/lwpfribframe.cxx @@ -0,0 +1,235 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - footnote + */ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ +#include "lwpfribframe.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "lwpglobalmgr.hxx" +#include "xfilter/xfchange.hxx" +/** + * @short: Read frame frib + * @param: + * @param: + */ + +void LwpFribFrame::Read(LwpObjectStream* pObjStrm, sal_uInt16 len) +{ + m_objLayout.ReadIndexed(pObjStrm); +} + +/** +* @descr: Get the layout object which the frib points to +* +*/ +LwpObject* LwpFribFrame::GetLayout() +{ + return m_objLayout.obj(); +} + +/** +* @descr: register frame style +* @param: pFoundry - current foundry pointer +* +*/ +void LwpFribFrame::RegisterStyle(LwpFoundry* pFoundry) +{ + if (m_objLayout.obj()->GetTag() == VO_DROPCAPLAYOUT) + { + static_cast<LwpDropcapLayout*>(m_objLayout.obj())->RegisterStyle(pFoundry); + } + else + { + //register frame style, , 04/07/2005 + LwpPlacableLayout* pLayout = static_cast<LwpPlacableLayout*>(m_objLayout.obj()); + pLayout->SetFoundry(pFoundry); + pLayout->RegisterStyle(); + + //register next frib text style + sal_uInt8 nType = pLayout->GetRelativeType(); + if(LwpLayoutRelativityGuts::LAY_INLINE_NEWLINE == nType + && HasNextFrib()) + { + XFParaStyle* pOldStyle = m_pPara->GetXFParaStyle(); + if (pOldStyle->GetMasterPage().getLength() == 0) + m_StyleName = pOldStyle->GetStyleName(); + else + { + XFParaStyle* pParaStyle = new XFParaStyle; + *pParaStyle = *(pOldStyle); + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_StyleName = pXFStyleManager->AddStyle(pParaStyle)->GetStyleName(); + } + } + //remember the current paragraph font size which will be used in parsing frame + pLayout->SetFont(GetFont()); + } +} +void LwpFribFrame::SetParaDropcap(LwpPara* pPara) +{ + if (m_objLayout.obj()->GetTag() == VO_DROPCAPLAYOUT) + { + pPara->SetParaDropcap(sal_True); + pPara->SetDropcapLayout(static_cast<LwpDropcapLayout*>(m_objLayout.obj())); + } + else + pPara->SetParaDropcap(sal_False); +} + +/** +* @descr: convert frame +* +*/ +void LwpFribFrame::XFConvert(XFContentContainer* pCont) +{ + XFContentContainer* pXFContentContainer = pCont; + LwpVirtualLayout* pLayout = static_cast<LwpVirtualLayout*>(GetLayout()); + sal_uInt8 nType = pLayout->GetRelativeType(); + if( LwpLayoutRelativityGuts::LAY_PARA_RELATIVE == nType) + { + LwpVirtualLayout* pContainerLayout = pLayout->GetContainerLayout(); + if(pContainerLayout && pContainerLayout->IsFrame()) + { + //same page as text and in frame + pXFContentContainer = m_pPara->GetXFContainer(); + } + else if(pContainerLayout && pContainerLayout->IsCell()) + { + //same page as text and in cell, get the first xfpara + XFContentContainer* pXFFirtPara = static_cast<XFContentContainer*>(pCont->FindFirstContent(enumXFContentPara)); + if(pXFFirtPara) + pXFContentContainer = pXFFirtPara; + } + } + OUString sChangeID; + if(m_bRevisionFlag) + { + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + LwpChangeMgr* pChangeMgr = pGlobal->GetLwpChangeMgr(); + sChangeID = pChangeMgr->GetChangeID(this); + if (sChangeID.getLength()) + { + XFChangeStart* pChangeStart = new XFChangeStart; + pChangeStart->SetChangeID(sChangeID); + pXFContentContainer->Add(pChangeStart); + } + } + + pLayout->XFConvert(pXFContentContainer); + + if(m_bRevisionFlag) + { + if (sChangeID.getLength()) + { + XFChangeEnd* pChangeEnd = new XFChangeEnd; + pChangeEnd->SetChangeID(sChangeID); + pXFContentContainer->Add(pChangeEnd); + } + } + + if(LwpLayoutRelativityGuts::LAY_INLINE_NEWLINE == nType + && HasNextFrib()) + { + XFParagraph* pXFPara = new XFParagraph(); + pXFPara->SetStyleName(m_StyleName); + m_pPara->AddXFContent(pXFPara); + m_pPara->GetFribs()->SetXFPara(pXFPara); + } + +} + +/** + * @descr: Read Ruby frame + * + */ +void LwpFribRubyFrame::Read(LwpObjectStream* pObjStrm, sal_uInt16 len) +{ + m_objLayout.ReadIndexed(pObjStrm); +} +/** + * @descr: Register Ruby frame style + * + */ +void LwpFribRubyFrame::RegisterStyle(LwpFoundry* pFoundry) +{ + LwpRubyLayout* pLayout = GetLayout(); + if (pLayout) + { + pLayout->SetFoundry(pFoundry); + pLayout->RegisterStyle(); + } +} +/** + * @descr: convert Ruby frame + * + */ +void LwpFribRubyFrame::XFConvert(XFContentContainer* pCont) +{ + LwpRubyLayout* pLayout = GetLayout(); + if (pLayout) + { + pLayout->ConvertContentText(); + } +} + +LwpRubyLayout* LwpFribRubyFrame::GetLayout() +{ + return static_cast<LwpRubyLayout*>(m_objLayout.obj()); +} diff --git a/lotuswordpro/source/filter/lwpfribframe.hxx b/lotuswordpro/source/filter/lwpfribframe.hxx new file mode 100644 index 000000000000..d08f231e568f --- /dev/null +++ b/lotuswordpro/source/filter/lwpfribframe.hxx @@ -0,0 +1,97 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - footnote + */ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ +#ifndef _LWPFRIBFRAME_HXX_ +#define _LWPFRIBFRAME_HXX_ +#include "lwpfrib.hxx" +#include "lwplayout.hxx" +#include "lwppara.hxx" +#include "lwpframelayout.hxx" + +class LwpFribFrame : public LwpFrib +{ +public: + LwpFribFrame( LwpPara* pPara) : LwpFrib(pPara){}; + ~LwpFribFrame(){}; + void Read(LwpObjectStream* pObjStrm, sal_uInt16 len); + LwpObject* GetLayout(); + void RegisterStyle(LwpFoundry* pFoundry); + void SetParaDropcap(LwpPara* pPara); + void XFConvert(XFContentContainer* pCont); +private: + LwpObjectID m_objLayout; +}; + +class LwpFribRubyFrame : public LwpFrib +{ +public: + LwpFribRubyFrame( LwpPara* pPara) : LwpFrib(pPara){}; + ~LwpFribRubyFrame(){}; + void Read(LwpObjectStream* pObjStrm, sal_uInt16 len); + LwpRubyLayout* GetLayout(); + void RegisterStyle(LwpFoundry* pFoundry); + void XFConvert(XFContentContainer* pCont); +private: + LwpObjectID m_objLayout; +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpfribheader.hxx b/lotuswordpro/source/filter/lwpfribheader.hxx new file mode 100644 index 000000000000..867e3fd2ba3b --- /dev/null +++ b/lotuswordpro/source/filter/lwpfribheader.hxx @@ -0,0 +1,135 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _LWPFRIBHEADER_HXX +#define _LWPFRIBHEADER_HXX + +#define FRIB_TAG_NOUNICODE 0x40 // Don't xlate text to/from Unicode +#define FRIB_TAG_MODIFIER 0x80 // This frib has a modifier on it +#define FRIB_TAG_TYPEMASK (FRIB_TAG_NOUNICODE | FRIB_TAG_MODIFIER) + +#define FRIB_TAG_ELVIS 0 // "EOP dammit" tag + +#define FRIB_MTAG_NONE 0 +#define FRIB_MTAG_FONT 1 +#define FRIB_MTAG_REVISION 2 +#define FRIB_MTAG_CHARSTYLE 3 +#define FRIB_MTAG_ATTRIBUTE 4 +#define FRIB_MTAG_LANGUAGE 5 +#define FRIB_MTAG_CHARBORDER 6 +#define FRIB_MTAG_AMIKAKE 7 +#define FRIB_MTAG_CODEPAGE 8 +#define FRIB_MTAG_STXLINK 9 // SmarText; do not #ifdef out + +#define FT_MAXIMUM 30 + +#define DOC_BADFILEPARAHINTS 0x00800000UL + +/* Registration definitions */ +enum +{ + FS_RIGHTSIDE = 0x00, + FS_LEFTSIDE = 0x10 +}; +/* Mode definitions */ +enum +{ + FS_REGISTERSELF = 0x20, + FS_READING = 0x40 +}; + +enum +{ + FRIB_TAG_INVALID, // FT_INVALID + FRIB_TAG_EOP, // FT_EOP + FRIB_TAG_TEXT, // FT_TEXT + FRIB_TAG_TABLE, // FT_TABLE + FRIB_TAG_TAB, // FT_TAB + FRIB_TAG_PAGEBREAK, // FT_PAGEBREAK + FRIB_TAG_FRAME, // FT_FRAME + FRIB_TAG_FOOTNOTE, // FT_FOOTNOTE + FRIB_TAG_COLBREAK, // FT_COLBREAK + FRIB_TAG_LINEBREAK, // FT_LINEBREAK + FRIB_TAG_HARDSPACE, // FT_HARDSPACE + FRIB_TAG_SOFTHYPHEN, // FT_SOFTHYPHEN + FRIB_TAG_PARANUMBER, // FT_PARANUMBER + FRIB_TAG_UNICODE, // FT_UNICODE +#ifdef KANJI + FRIB_TAG_KANJI, // FT_KANJI + FRIB_TAG_HKATAKANA, // FT_HKATAKANA +#else + FRIB_TAG_UNICODE2, // FT_UNICODE + FRIB_TAG_UNICODE3, // FT_UNICODE +#endif + FRIB_TAG_SEPARATOR, // FT_SEPARATOR + FRIB_TAG_SECTION, // FT_SECTION + FRIB_TAG_TOMBSTONE, // FT_TOMBSTONE + FRIB_TAG_SPECIALTAB, // FT_SPECIALTAB + FRIB_TAG_PAGENUMBER, // FT_PAGENUMBER + FRIB_TAG_NOTE, // FT_NOTE + FRIB_TAG_DOCVAR, // FT_DOCVAR + FRIB_TAG_BOOKMARK, // FT_BOOKMARK + FRIB_TAG_DDE, // FT_DDE + FRIB_TAG_FIELD, // FT_FIELD + FRIB_TAG_CHBLOCK, // FT_CHBLOCK +//#ifdef RUBY + FRIB_TAG_FLOWBREAK, // FT_FLOWBREAK + FRIB_TAG_RUBYMARKER, // FT_RUBYMARKER + FRIB_TAG_RUBYFRAME // FT_RUBYFRAME +//#else +// FRIB_TAG_FLOWBREAK // FT_FLOWBREAK +//#endif +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpfribmark.cxx b/lotuswordpro/source/filter/lwpfribmark.cxx new file mode 100644 index 000000000000..8e157d2fe2f3 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfribmark.cxx @@ -0,0 +1,1460 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + May 2005 Created + ************************************************************************/ + +#include "lwpfribmark.hxx" +#include "lwptools.hxx" +#include "lwpglobalmgr.hxx" +#include "lwpdoc.hxx" +#include "lwpdivinfo.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xftextspan.hxx" +#include "xfilter/xfbookmark.hxx" +#include "xfilter/xfentry.hxx" +#include "xfilter/xftextcontent.hxx" +#include "xfilter/xfcrossref.hxx" +#include "xfilter/xfdocfield.hxx" +#include "xfilter/xfdatestyle.hxx" +#include "xfilter/xftimestyle.hxx" +#include "xfilter/xfdate.hxx" +#include "xfilter/xfruby.hxx" +#include "lwpchangemgr.hxx" +#include "xfilter/xfchange.hxx" + +/** + * @short: Read hyperlink frib and Click here block + * @param: + * @param: + */ +void LwpFribCHBlock::Read(LwpObjectStream* pObjStrm, sal_uInt16 len) +{ + m_objMarker.ReadIndexed(pObjStrm); + m_nType = pObjStrm->QuickReaduInt8(); +} + +LwpCHBlkMarker* LwpFribCHBlock::GetMarker() +{ + return static_cast<LwpCHBlkMarker*>(m_objMarker.obj()); +} + +void LwpFribCHBlock::XFConvert(XFContentContainer* pXFPara,LwpStory* pStory) +{ + sal_uInt8 type = GetType(); + if (!pStory) + return; + LwpCHBlkMarker* pMarker = GetMarker(); + + if (!pMarker) + return; + sal_uInt16 nAction = pMarker->GetAction(); + if (nAction == LwpCHBlkMarker::CLICKHERE_CHBEHAVIORINTERNETLINK)//hyperlink + { + LwpHyperlinkMgr* pHyperlink = pStory->GetHyperlinkMgr(); + if (type == MARKER_START) + { + if (pHyperlink) + { + pHyperlink->SetHyperlinkFlag(sal_True); + pHyperlink->SetHyperlink(pMarker->GetNamedProperty(A2OUSTR("URL"))); + } + } + else if (type == MARKER_END)//or none + { + pHyperlink->SetHyperlinkFlag(sal_False); + } + } + else//click here block + { + pMarker->ConvertCHBlock(pXFPara,type); + } +} +/** + * @short: register bookmark frib + * @param: + * @param: + */ +void LwpFribBookMark::RegisterStyle(LwpFoundry* pFoundry) +{ + OUString name; + LwpBookMark* pBook = pFoundry->GetBookMark(GetMarkerID()); + if (pBook) + name = pBook->GetName(); + + OUString sDivision; + LwpDocument* pDoc = pFoundry->GetDocument(); + if (pDoc) + { + LwpObjectID* pID = pDoc->GetDivInfoID(); + if (!pID->IsNull()) + { + sDivision = static_cast<LwpDivInfo*>(pID->obj(VO_DIVISIONINFO))->GetDivName(); + } + } + + sal_uInt8 type = GetType(); + + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + LwpBookmarkMgr* pMarkMgr = pGlobal->GetLwpBookmarkMgr(); + if (type == MARKER_START) + { + XFBookmarkStart* pMarkStart = new XFBookmarkStart; + pMarkStart->SetDivision(sDivision); + pMarkStart->SetName(name); + pMarkMgr->AddXFBookmarkStart(name,pMarkStart);//add to map + m_pStart = pMarkStart; + } + else if(type == MARKER_END) + { + XFBookmarkEnd* pMarkEnd = new XFBookmarkEnd; + pMarkEnd->SetDivision(sDivision); + pMarkEnd->SetName(name); + pMarkMgr->AddXFBookmarkEnd(name,pMarkEnd); //add to map + m_pEnd = pMarkEnd; + } +} + +LwpFribBookMark::LwpFribBookMark(LwpPara* pPara ) : LwpFrib(pPara),m_pStart(NULL),m_pEnd(NULL) +{ +} + +/** + * @short: Read bookmark frib + * @param: + * @param: + */ +void LwpFribBookMark::Read(LwpObjectStream* pObjStrm, sal_uInt16 len) +{ + m_objMarker.ReadIndexed(pObjStrm); + m_nType = pObjStrm->QuickReaduInt8(); +} +/** + * @short: convert bookmark frib + * @param: + * @param: + */ +void LwpFribBookMark::XFConvert(XFContentContainer* pXFPara) +{ + sal_uInt8 type = GetType(); + + if (type == MARKER_START && m_pStart) + { + pXFPara->Add(m_pStart); + } + else if(type == MARKER_END && m_pEnd) + { + pXFPara->Add(m_pEnd); + } +} + +/** + * @short: Read index entry frib + * @param: + * @param: + */ +LwpFribField::LwpFribField( LwpPara* pPara ) : LwpFrib(pPara) +{ + m_TimeStyle = A2OUSTR(""); + + m_nSubType = 0;//datetime/crossref/other + m_sFormula = A2OUSTR(""); + + m_nCrossRefType = 0; + m_nDateTimeType = 0; +} + +void LwpFribField::Read(LwpObjectStream* pObjStrm, sal_uInt16 len) +{ + m_objMarker.ReadIndexed(pObjStrm); + m_nType = pObjStrm->QuickReaduInt8(); +} + +LwpFieldMark* LwpFribField::GetMarker() +{ + return static_cast<LwpFieldMark*>(m_objMarker.obj()); +} + +void LwpFribField::XFConvert(XFContentContainer* pXFPara) +{ + LwpFieldMark* pFieldMark = GetMarker(); + if (!pFieldMark) + return; + + sal_uInt8 type = GetType(); + sal_uInt16 fieldType = pFieldMark->GetFieldType(); + + OUString sChangeID; + if(pFieldMark->GetRevisionFlag()) + { + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + LwpChangeMgr* pChangeMgr = pGlobal->GetLwpChangeMgr(); + sChangeID = pChangeMgr->GetChangeID(pFieldMark->GetStartFrib()); + } + + CheckFieldType(pFieldMark); + //end marker + if (type == MARKER_END) + { + if (pFieldMark->GetStart() == sal_False) + return; + if (pFieldMark->IsFormulaInsert()) + { + XFTextContent *pSpan = new XFTextContent(); + pSpan->SetText(A2OUSTR(">")); + pXFPara->Add(pSpan); + } + if (fieldType == LwpFieldMark::FLD_FIELD) + { + if (m_nSubType == SUBFIELD_DATETIME) + { + ConvertDateTimeEnd(pXFPara,pFieldMark); + } + else if (m_nSubType == SUBFIELD_CROSSREF) + { + ConvertCrossRefEnd(pXFPara,pFieldMark); + } + else if (m_nSubType == SUBFIELD_DOCPOWER) + { + ConvertDocFieldEnd(pXFPara,pFieldMark); + } + } + if(pFieldMark->GetRevisionFlag() && sChangeID.getLength()) + { + XFChangeEnd* pChangeEnd = new XFChangeEnd; + pChangeEnd->SetChangeID(sChangeID); + pXFPara->Add(pChangeEnd); + } + + return; + } + + //start marker + if(pFieldMark->GetRevisionFlag() && sChangeID.getLength()) + { + XFChangeStart* pChangeStart = new XFChangeStart; + pChangeStart->SetChangeID(sChangeID); + pXFPara->Add(pChangeStart); + } + + if (fieldType == LwpFieldMark::FLD_INDEX) + { + OUString sKey1,sKey2; + pFieldMark->ParseIndex(sKey1,sKey2); + if (sKey1.getLength()>0) + { + XFEntry* pEntry = new XFEntry; + pEntry->SetEntryType(enumXFEntryAlphabetical); + pEntry->SetKey(sKey1,sKey2); + pXFPara->Add(pEntry); + } + } + else if (fieldType == LwpFieldMark::FLD_TOC) + { + OUString sLevel,sText; + pFieldMark->ParseTOC(sLevel,sText); + if (sLevel.getLength()>0 && sText.getLength()>0) + { + XFEntry* pEntry = new XFEntry; + pEntry->SetEntryType(enumXFEntryTOC); + pEntry->SetStringValue(sText); + pEntry->SetOutlineLevel(sLevel.toInt32(10)); + pXFPara->Add(pEntry); + } + } + else if (fieldType == LwpFieldMark::FLD_FIELD) + { + sal_uInt8 nDatetype; + OUString sFormula; + sal_Bool bIsDateTime = pFieldMark->IsDateTimeField(nDatetype,sFormula); + + if (m_nSubType == SUBFIELD_DATETIME)//date time + { + ConvertDateTimeStart(pXFPara,pFieldMark); + } + else if (m_nSubType == SUBFIELD_CROSSREF)//cross ref + { + ConvertCrossRefStart(pXFPara,pFieldMark); + } + else if (m_nSubType == SUBFIELD_DOCPOWER) + { + ConvertDocFieldStart(pXFPara,pFieldMark); + } + } + + if (pFieldMark->IsFormulaInsert()) + { + XFTextContent *pSpan = new XFTextContent(); + pSpan->SetText(A2OUSTR("<")); + pXFPara->Add(pSpan); + } + + pFieldMark->SetStart(sal_True); +} + +void LwpFribField::RegisterStyle(LwpFoundry* pFoundry) +{ + LwpFrib::RegisterStyle(pFoundry); + LwpFieldMark* pFieldMark = GetMarker(); + if (!pFieldMark) + return; + + sal_uInt8 type = GetType(); + sal_uInt16 fieldType = pFieldMark->GetFieldType(); + + if (type == MARKER_START && fieldType == LwpFieldMark::FLD_FIELD) + { + RegisterTimeField(pFieldMark); + } + + if (type == MARKER_START && m_bRevisionFlag) + { + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + LwpChangeMgr* pChangeMgr = pGlobal->GetLwpChangeMgr(); + pChangeMgr->AddChangeFrib(this); + pFieldMark->SetStartFrib(this); + pFieldMark->SetRevisionFlag(sal_True); + } +} + +void LwpFribField::RegisterTimeField(LwpFieldMark* pFieldMark) +{ + OUString sFormula = pFieldMark->GetFormula();//now bookmark maybe not all register to bookmarkmgr, + if (sFormula == A2OUSTR("TotalEditingTime"))//so check field type now is not correct. + RegisterTotalTimeStyle(); + else + { + sal_Int32 index; + sal_Unicode ch1(0x0020);//space + OUString tag; + index = sFormula.indexOf(ch1,0); + if (index < 0) + return; + + tag = sFormula.copy(0,index); + if (tag == A2OUSTR("Now()") || tag == A2OUSTR("CreateDate") || tag == A2OUSTR("EditDate")) + RegisterDateTimeStyle(sFormula.copy(index+1,sFormula.getLength()-index-1)); + } +} + +void LwpFribField::RegisterTotalTimeStyle() +{ + XFTimeStyle* pTimeStyle = new XFTimeStyle;//use the default format + pTimeStyle->SetTruncate(sal_False); + pTimeStyle->AddMinute(); + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_TimeStyle = pXFStyleManager->AddStyle(pTimeStyle)->GetStyleName(); +} + +void LwpFribField::RegisterDateTimeStyle(OUString sFormula) +{ + XFDateStyle* pDateStyle = NULL; + XFTimeStyle* pTimeStyle = NULL; +//DATE + if (sFormula.getLength()<2) + return; + if (sFormula[1] == 'F') + { + if (sFormula == A2OUSTR("%FLSystemShortDate")) + { + pDateStyle = LwpTools::GetSystemDateStyle(sal_False); + } + else if (sFormula == A2OUSTR("%FLSystemLongDate")) + { + pDateStyle = LwpTools::GetSystemDateStyle(sal_True); + } + else if (sFormula == A2OUSTR("%FLISODate1") || sFormula == A2OUSTR("%FLYYYY/MM/DD") ) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddYear(); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddMonth(); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddMonthDay(); + } + else if (sFormula == A2OUSTR("%FLISODate2") || sFormula == A2OUSTR("%FLYYYY/MM/DD HH:mm:SS") ) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddYear(); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddMonth(); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddMonthDay(); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddHour(); + pDateStyle->AddText(A2OUSTR(":")); + pDateStyle->AddMinute(); + pDateStyle->AddText(A2OUSTR(":")); + pDateStyle->AddSecond(sal_True,0); + } + else if (sFormula == A2OUSTR("%FLM/D/YY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(sal_False); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddYear(sal_False); + } + else if (sFormula == A2OUSTR("%FLMonth D, YYYY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%FLWeekday, Month D, YYYY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddWeekDay(); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%FLMn D, YYYY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(sal_False,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%FLWday, Mn D, YYYY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddWeekDay(sal_False); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddMonth(sal_False,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%FLMn D")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(sal_False,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(sal_False); + } + else if (sFormula == A2OUSTR("%FLWeekday, Mn D")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddWeekDay(); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddMonth(sal_False,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(sal_False); + } + else if (sFormula == A2OUSTR("%FLMn D, YY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(sal_False,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddYear(sal_False); + } + else if (sFormula == A2OUSTR("%FLM/D")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(sal_False); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddMonthDay(sal_False); + } + else if (sFormula == A2OUSTR("%FLM/YY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(sal_False); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddYear(sal_False); + } + else if (sFormula == A2OUSTR("%FLMn YY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(sal_False,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddYear(sal_False); + } + else if (sFormula == A2OUSTR("%FLWeekday")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddWeekDay(); + } + else if (sFormula == A2OUSTR("%FLWday")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddWeekDay(sal_False); + } + else if (sFormula == A2OUSTR("%FLMonth")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(sal_True,sal_True); + } + else if (sFormula == A2OUSTR("%FLMn")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(sal_False,sal_True); + } + else if (sFormula == A2OUSTR("%FLD")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonthDay(sal_False); + } + else if (sFormula == A2OUSTR("%FLM")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(sal_False); + } + else if (sFormula == A2OUSTR("%FLYYYY") ) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%FLYY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddYear(sal_False); + } + //chinese version begin + else if (sFormula == A2OUSTR("%FLYY/M/D")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddYear(sal_False); + pDateStyle->AddText(A2OUSTR("-")); + pDateStyle->AddMonth(sal_False); + pDateStyle->AddText(A2OUSTR("-")); + pDateStyle->AddMonthDay(sal_False); + } + else if(sFormula == A2OUSTR("%FLYYYY Month D")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddYear(); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(sal_False); + } + else if(sFormula == A2OUSTR("%FLWeekday, YYYY Month D")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddWeekDay(); + pDateStyle->AddText(A2OUSTR(",")); + pDateStyle->AddYear(); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(sal_False); + } + else if(sFormula == A2OUSTR("%FLYYYY Mn D")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddYear(); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_False,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(sal_False); + } + else if(sFormula == A2OUSTR("%FLWday, YYYY Mn D")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddWeekDay(sal_False); + pDateStyle->AddText(A2OUSTR(",")); + pDateStyle->AddYear(); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(sal_False); + } + //next 2 are the same with english version + else if (sFormula == A2OUSTR("%FLYY Mn D")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddYear(sal_False); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_False,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(sal_False); + } + else if (sFormula == A2OUSTR("%FLYY/M")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(sal_False); + pDateStyle->AddText(A2OUSTR("-")); + pDateStyle->AddMonth(sal_False); + } + else if (sFormula == A2OUSTR("%FLYY Mn")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(sal_False); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_False,sal_True); + } + else if (sFormula == A2OUSTR("%FLeeeeoa") || sFormula == A2OUSTR("%FLffffooaa") || sFormula == A2OUSTR("%FLEEEEOA")) + { + pDateStyle = new XFDateStyle; + // OUString lang = OUString::createFromAscii("zh-CN"); + // pDateStyle->SetLanguage( lang); + rtl::OUString sText; + pDateStyle->AddYear(); + sText = rtl::OUString(0x5e74); + pDateStyle->AddText(sText); + pDateStyle->AddMonth(sal_False); + sText = rtl::OUString(0x6708); + pDateStyle->AddText(sText); + pDateStyle->AddMonthDay(sal_False); + sText = rtl::OUString(0x65e5); + pDateStyle->AddText(sText); + } + else if (sFormula == A2OUSTR("%FLoa") || sFormula == A2OUSTR("%FLooaa") || sFormula == A2OUSTR("%FLOA") ) + { + pDateStyle = new XFDateStyle; + OUString sText; + pDateStyle->AddMonth(sal_False); + sText = rtl::OUString(0x6708); + pDateStyle->AddText(sText); + pDateStyle->AddMonthDay(sal_False); + sText = rtl::OUString(0x65e5); + pDateStyle->AddText(sText); + } + else if (sFormula == A2OUSTR("%FLYYYY/M/D") || sFormula == A2OUSTR("%FLGGGG/od/ad")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddYear(); + pDateStyle->AddText(A2OUSTR("-")); + pDateStyle->AddMonth(sal_False); + pDateStyle->AddText(A2OUSTR("-")); + pDateStyle->AddMonthDay(sal_False); + } + else if (sFormula == A2OUSTR("%FLYY.M.D") ) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddYear(sal_False); + pDateStyle->AddText(A2OUSTR(".")); + pDateStyle->AddMonth(sal_False); + pDateStyle->AddText(A2OUSTR(".")); + pDateStyle->AddMonthDay(sal_False); + } + //chinese version end + //other version begin + else if (sFormula == A2OUSTR("%FLWeekday, Month DD, YYYY") ) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddWeekDay(); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%FLYYYY/MM/DD") ) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddWeekDay(); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%FLD/M/YY") ) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddMonth(sal_False); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddYear(sal_False); + } + else if (sFormula == A2OUSTR("%FLD Month YYYY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%FLDD Month YYYY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonthDay(); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%FLWeekday, D Month YYYY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddWeekDay(); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%FLWeekday, DD Month YYYY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddWeekDay(); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddMonthDay(); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%FLD Mn YYYY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_False,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%FLWday, D Mn YYYY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddWeekDay(sal_False); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_False,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%FLWday, DD Mn YYYY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddWeekDay(sal_False); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddMonthDay(); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_False,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%FLD Mn")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_False,sal_True); + } + else if (sFormula == A2OUSTR("%FLDD Mn")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonthDay(); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_False,sal_True); + } + else if (sFormula == A2OUSTR("%FLWeekday, D Mn")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddWeekDay(); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_False,sal_True); + } + else if (sFormula == A2OUSTR("%FLWeekday, DD Mn")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddWeekDay(); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddMonthDay(); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_False,sal_True); + } + else if (sFormula == A2OUSTR("%FLD Mn YY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_False,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddYear(sal_False); + } + else if (sFormula == A2OUSTR("%FLDD Mn YY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonthDay(); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_False,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddYear(sal_False); + } + else if (sFormula == A2OUSTR("%FLD/M")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddMonth(sal_False); + } + else if (sFormula == A2OUSTR("%FLDD/MM")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonthDay(); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddMonth(); + } + else if(sFormula == A2OUSTR("%FLDD/MM/YY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonthDay(); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddMonth(); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddYear(sal_False); + } + else if (sFormula == A2OUSTR("%FLMM/YY")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddYear(sal_False); + } + //other version end + //TIME + else if (sFormula == A2OUSTR("%FLSystemTime")) + { + pTimeStyle = LwpTools::GetSystemTimeStyle(); + } + else if (sFormula == A2OUSTR("%FLISOTime1") || sFormula == A2OUSTR("%FLH:mm:SS")) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->AddHour(); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->AddMinute(); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->AddSecond(sal_True,0); + } + else if (sFormula == A2OUSTR("%FLH:mm ampm")) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->AddHour(sal_False); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->AddMinute(); + pTimeStyle->AddText(A2OUSTR(" ")); + pTimeStyle->SetAmPm(sal_True); + } + else if (sFormula == A2OUSTR("%FLH:mm")) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->AddHour(sal_False); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->AddMinute(); + } + else if (sFormula == A2OUSTR("%FLH:mm:SS ampm")) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->AddHour(sal_False); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->AddMinute(); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->AddSecond(sal_True,0); + pTimeStyle->AddText(A2OUSTR(" ")); + pTimeStyle->SetAmPm(sal_True); + } + else if (sFormula == A2OUSTR("%FLH:mm:SS")) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->AddHour(sal_False); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->AddMinute(); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->AddSecond(sal_True,0); + } + else if (sFormula == A2OUSTR("%FLH ampm")) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->AddHour(sal_False); + pTimeStyle->AddText(A2OUSTR(" ")); + pTimeStyle->SetAmPm(sal_True); + } + else if (sFormula == A2OUSTR("%FLH")) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->AddHour(sal_False); + } + else if (sFormula == A2OUSTR("%FLmm")) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->AddMinute(); + } + else if (sFormula == A2OUSTR("%FLSS")) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->AddSecond(sal_True,0); + } + else if (sFormula == A2OUSTR("%FLampm")) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->SetAmPm(sal_True); + } + //chinese version begin + else if (sFormula == A2OUSTR("%FLjF") || sFormula == A2OUSTR("%FLJFF") + || sFormula == A2OUSTR("%FLjjF") || sFormula == A2OUSTR("%FLJJFF ") ) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->AddHour(sal_False); + rtl::OUString sText; + sText = rtl::OUString(0x70b9); + pTimeStyle->AddText(sText); + pTimeStyle->AddMinute(sal_False); + sText = rtl::OUString(0x5206); + pTimeStyle->AddText(sText); + } + else if (sFormula == A2OUSTR("%FLjjjF") || sFormula == A2OUSTR("%FLJJJFF") ) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->SetAmPm(sal_True); + pTimeStyle->AddHour(sal_False); + rtl::OUString sText; + sText = rtl::OUString(0x70b9); + pTimeStyle->AddText(sText); + pTimeStyle->AddMinute(sal_False); + sText = rtl::OUString(0x5206); + pTimeStyle->AddText(sText); + } + //chinese version end + //other version begin + else if (sFormula == A2OUSTR("%FLHH:mm ampm")) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->AddHour(); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->AddMinute(); + pTimeStyle->AddText(A2OUSTR(" ")); + pTimeStyle->SetAmPm(sal_True); + } + else if (sFormula == A2OUSTR("%FLHH ampm")) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->AddHour(); + pTimeStyle->AddText(A2OUSTR(" ")); + pTimeStyle->SetAmPm(sal_True); + } + else if (sFormula == A2OUSTR("%FLHH:mm:SS ampm")) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->AddHour(); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->AddMinute(); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->AddSecond(sal_True,0); + pTimeStyle->AddText(A2OUSTR(" ")); + pTimeStyle->SetAmPm(sal_True); + } + else if (sFormula == A2OUSTR("%FLHH:mm")) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->AddHour(); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->AddMinute(); + } + else if (sFormula == A2OUSTR("%FLHH:mm:SS")) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->AddHour(); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->AddMinute(); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->AddSecond(sal_True,0); + } + //other version end + } + else if(sFormula[1] == 'D') + { + if (sFormula == A2OUSTR("%Da")) + { + pDateStyle = LwpTools::GetSystemDateStyle(sal_False); + } + else if (sFormula == A2OUSTR("%DB") || sFormula == A2OUSTR("%Db")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%Dc") || sFormula == A2OUSTR("%DC")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%Dd") || sFormula == A2OUSTR("%DD")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddWeekDay(); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR(", ")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%DE") || sFormula == A2OUSTR("%De")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(sal_False); + } + else if (sFormula == A2OUSTR("%Df") || sFormula == A2OUSTR("%DF")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddWeekDay(); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(sal_False); + } + else if (sFormula == A2OUSTR("%Dg")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(sal_False); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddMonthDay(sal_False); + } + else if (sFormula == A2OUSTR("%Dh")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(sal_False); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%Di") || sFormula == A2OUSTR("%DI")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR(".")); + pDateStyle->AddMonth(sal_True,sal_True); + } + else if (sFormula == A2OUSTR("%Dj") || sFormula == A2OUSTR("%DJ")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonthDay(sal_False); + pDateStyle->AddText(A2OUSTR(".")); + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%Dk") || sFormula == A2OUSTR("%DK")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddYear(); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(" ")); + pDateStyle->AddMonthDay(sal_False); + } + else if (sFormula == A2OUSTR("%DL") || sFormula == A2OUSTR("%Dl")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonth(sal_True,sal_True); + pDateStyle->AddText(A2OUSTR(",")); + pDateStyle->AddYear(); + } + else if (sFormula == A2OUSTR("%Dm")) + { + pDateStyle = new XFDateStyle; + pDateStyle->AddMonthDay(); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddMonth(); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddYear(); + } + } + else if (sFormula[1] == 'T') + { + if (sFormula == A2OUSTR("%T1")) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->AddHour(); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->AddMinute(); + } + else if (sFormula == A2OUSTR("%T2") || sFormula == A2OUSTR("%T6") + || sFormula == A2OUSTR("%T4") || sFormula == A2OUSTR("%T8") ) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->AddHour(sal_False); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->AddMinute(); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->SetAmPm(sal_True); + } + else if (sFormula == A2OUSTR("%T3") || sFormula == A2OUSTR("%T7") + || sFormula == A2OUSTR("%T5") || sFormula == A2OUSTR("%T9")) + { + pTimeStyle = new XFTimeStyle; + pTimeStyle->AddHour(); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->AddMinute(); + pTimeStyle->AddText(A2OUSTR(":")); + pTimeStyle->SetAmPm(sal_True); + } + } + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + if (pDateStyle) + m_TimeStyle = pXFStyleManager->AddStyle(pDateStyle)->GetStyleName(); + if (pTimeStyle) + m_TimeStyle = pXFStyleManager->AddStyle(pTimeStyle)->GetStyleName(); +} + +void LwpFribField::CheckFieldType(LwpFieldMark* pFieldMark) +{ + sal_uInt8 nType; + OUString sFormula; + if (pFieldMark->IsDateTimeField(nType,sFormula)) + { + m_nDateTimeType = nType; + m_sFormula = sFormula; + m_nSubType = SUBFIELD_DATETIME; + } + else if (pFieldMark->IsCrossRefField(nType,sFormula)) + { + m_nCrossRefType = nType; + m_sFormula = sFormula; + m_nSubType = SUBFIELD_CROSSREF; + } + else if (pFieldMark->IsDocPowerField(nType,sFormula)) + { + m_nDocPowerType = nType; + m_nSubType = SUBFIELD_DOCPOWER; + } + else + { + m_nSubType = SUBFIELD_INVALID; + } +} + +void LwpFribField::ConvertDocFieldStart(XFContentContainer* pXFPara,LwpFieldMark* pFieldMark) +{ + XFContent* pContent = NULL; + switch(m_nDocPowerType) + { + case LwpFieldMark::DOC_DESCRIPTION: + { + pContent = new XFDescriptionStart; + break; + } + case LwpFieldMark::DOC_NUMPAGES: + { + pContent = new XFPageCountStart; + break; + } + case LwpFieldMark::DOC_NUMWORDS: + { + pContent = new XFWordCountStart; + break; + } + case LwpFieldMark::DOC_NUMCHARS: + { + pContent = new XFCharCountStart; + break; + } +// case LwpFieldMark::DOC_TOTALTIME: +// { +// pContent = new XFTotalEditTimeStart; +// pContent->SetStyleName(m_TimeStyle); +// break; +// } + } + if (pContent) + { + if (m_ModFlag)//(m_pModifiers) + { + XFTextSpanStart* pSpan = new XFTextSpanStart; + pSpan->SetStyleName(GetStyleName()); + pSpan->Add(pContent); + pXFPara->Add(pSpan); + pFieldMark->SetStyleFlag(sal_True); + } + else + pXFPara->Add(pContent); + } +} + +void LwpFribField::ConvertDocFieldEnd(XFContentContainer* pXFPara,LwpFieldMark* pFieldMark) +{ + XFContent* pContent = NULL; + switch(m_nDocPowerType) + { + case LwpFieldMark::DOC_DESCRIPTION: + { + pContent = new XFDescriptionEnd; + break; + } + case LwpFieldMark::DOC_NUMPAGES: + { + pContent = new XFPageCountEnd; + break; + } + case LwpFieldMark::DOC_NUMWORDS: + { + pContent = new XFWordCountEnd; + break; + } + case LwpFieldMark::DOC_NUMCHARS: + { + pContent = new XFCharCountEnd; + break; + } +// case LwpFieldMark::DOC_TOTALTIME: +// { +// pContent = new XFTotalEditTimeEnd; +// break; +// } + } + if (pContent) + { + if (pFieldMark->GetStyleFlag()) + { + XFTextSpanEnd* pSpan = new XFTextSpanEnd; + pSpan->Add(pContent); + pXFPara->Add(pSpan); + } + else + pXFPara->Add(pContent); + } +} + +void LwpFribField::ConvertDateTimeStart(XFContentContainer* pXFPara,LwpFieldMark* pFieldMark) +{ + XFContent* pContent = NULL; + switch(m_nDateTimeType) + { + case LwpFieldMark::DATETIME_NOW: + { + pContent = new XFDateStart; + pContent->SetStyleName(m_TimeStyle); + break; + } + case LwpFieldMark::DATETIME_CREATE: + { + pContent = new XFCreateTimeStart; + pContent->SetStyleName(m_TimeStyle); + break; + } + case LwpFieldMark::DATETIME_LASTEDIT: + { + pContent = new XFLastEditTimeStart; + pContent->SetStyleName(m_TimeStyle); + break; + } + case LwpFieldMark::DATETIME_TOTALTIME: + { + pContent = new XFTotalEditTimeStart; + pContent->SetStyleName(m_TimeStyle); + break; + } + default: + break; + } + if (pContent) + { + if (m_ModFlag)//(m_pModifiers) + { + XFTextSpanStart* pSpan = new XFTextSpanStart; + pSpan->SetStyleName(GetStyleName()); + pSpan->Add(pContent); + pXFPara->Add(pSpan); + pFieldMark->SetStyleFlag(sal_True); + } + else + pXFPara->Add(pContent); + } + +} + +void LwpFribField::ConvertDateTimeEnd(XFContentContainer* pXFPara,LwpFieldMark* pFieldMark) +{ + XFContent* pContent = NULL; + switch(m_nDateTimeType) + { + case LwpFieldMark::DATETIME_NOW: + { + pContent = new XFDateEnd; + break; + } + case LwpFieldMark::DATETIME_CREATE: + { + pContent = new XFCreateTimeEnd; + break; + } + case LwpFieldMark::DATETIME_LASTEDIT: + { + pContent = new XFLastEditTimeEnd; + break; + } + case LwpFieldMark::DATETIME_TOTALTIME: + { + pContent = new XFTotalEditTimeEnd; + break; + } + } + if (pContent) + { + if (pFieldMark->GetStyleFlag()) + { + XFTextSpanEnd* pSpan = new XFTextSpanEnd; + pSpan->Add(pContent); + pXFPara->Add(pSpan); + } + else + pXFPara->Add(pContent); + } +} + +void LwpFribField::ConvertCrossRefStart(XFContentContainer* pXFPara,LwpFieldMark* pFieldMark) +{ + XFCrossRefStart* pRef = new XFCrossRefStart; + pRef->SetRefType(m_nCrossRefType); + pRef->SetMarkName(m_sFormula); +// pFieldMark->SetStart(sal_True);//for some disnormal cases + if (m_ModFlag) + { + XFTextSpanStart* pSpan = new XFTextSpanStart; + pSpan->SetStyleName(GetStyleName()); + pSpan->Add(pRef); + pXFPara->Add(pSpan); + pFieldMark->SetStyleFlag(sal_True); + } + else + pXFPara->Add(pRef); +} + +void LwpFribField::ConvertCrossRefEnd(XFContentContainer* pXFPara,LwpFieldMark* pFieldMark) +{ + XFCrossRefEnd* pRef = new XFCrossRefEnd; + if (pFieldMark->GetStyleFlag()) + { + XFTextSpanEnd* pSpan = new XFTextSpanEnd; + pSpan->Add(pRef); + pXFPara->Add(pSpan); + } + else + pXFPara->Add(pRef); +} + +LwpFribRubyMarker::LwpFribRubyMarker( LwpPara* pPara ): LwpFrib(pPara) +{ +} + +LwpRubyMarker* LwpFribRubyMarker::GetMarker() +{ + return static_cast<LwpRubyMarker*>(m_objMarker.obj(VO_RUBYMARKER)); +} + +void LwpFribRubyMarker::Read(LwpObjectStream* pObjStrm, sal_uInt16 len) +{ + m_objMarker.ReadIndexed(pObjStrm); + m_nType = pObjStrm->QuickReaduInt8(); +} + +void LwpFribRubyMarker::XFConvert(XFContentContainer* pXFPara) +{ + sal_uInt8 type = GetType(); + LwpRubyMarker* pMarker = GetMarker(); + + if (type == MARKER_START) + { + XFRubyStart* pRubyStart = new XFRubyStart; + if (pMarker) + { + pRubyStart->SetStyleName(pMarker->GetRubyStyleName()); + } + pXFPara->Add(pRubyStart); + } + else if(type == MARKER_END) + { + XFRubyEnd* pRubyEnd = new XFRubyEnd; + if (pMarker) + { + pRubyEnd->SetText(pMarker->GetRubyText()); + pRubyEnd->SetStyleName(pMarker->GetTextStyleName()); + } + pXFPara->Add(pRubyEnd); + } +} + +void LwpFribRubyMarker::RegisterStyle(LwpFoundry* pFoundry) +{ +} diff --git a/lotuswordpro/source/filter/lwpfribmark.hxx b/lotuswordpro/source/filter/lwpfribmark.hxx new file mode 100644 index 000000000000..a6f6a22f2d72 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfribmark.hxx @@ -0,0 +1,164 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + May 2005 Created + ************************************************************************/ + + +#ifndef _LWPFRIBMARKER_HXX_ +#define _LWPFRIBMARKER_HXX_ + +#include "lwpfrib.hxx" +#include "lwpstory.hxx" +#include "lwpmarker.hxx" +#include "xfilter/xftextspan.hxx" +#include "xfilter/xfbookmark.hxx" + +class LwpFribCHBlock : public LwpFrib +{ +public: + LwpFribCHBlock( LwpPara* pPara ) : LwpFrib(pPara){}; + ~LwpFribCHBlock(){}; + void Read(LwpObjectStream* pObjStrm, sal_uInt16 len); + LwpCHBlkMarker* GetMarker(); + sal_uInt8 GetType(){return m_nType;} + enum{MARKER_START=1,MARKER_END,MARKER_NONE}; + void XFConvert(XFContentContainer* pXFPara,LwpStory* pStory); +private: + sal_uInt8 m_nType; + LwpObjectID m_objMarker; +}; + +class LwpFribBookMark : public LwpFrib +{ +public: + LwpFribBookMark( LwpPara* pPara ); + ~LwpFribBookMark(){}; + void Read(LwpObjectStream* pObjStrm, sal_uInt16 len); + LwpObjectID GetMarkerID(){return m_objMarker;} + sal_uInt8 GetType(){return m_nType;} + enum{MARKER_START=1,MARKER_END,MARKER_NONE}; + void XFConvert(XFContentContainer* pXFPara); + void RegisterStyle(LwpFoundry* pFoundry); +private: + sal_uInt8 m_nType; + LwpObjectID m_objMarker; + XFBookmarkStart* m_pStart; + XFBookmarkEnd* m_pEnd; +}; + +class LwpFribField : public LwpFrib +{ +public: + LwpFribField( LwpPara* pPara ); + ~LwpFribField(){}; + void Read(LwpObjectStream* pObjStrm, sal_uInt16 len); + LwpFieldMark* GetMarker(); + sal_uInt8 GetType(){return m_nType;} + enum{MARKER_START=1,MARKER_END,MARKER_NONE}; + void XFConvert(XFContentContainer* pXFPara); + void RegisterStyle(LwpFoundry* pFoundry); + enum{ + SUBFIELD_INVALID = 0, + SUBFIELD_DATETIME = 1, + SUBFIELD_CROSSREF = 2, + SUBFIELD_DOCPOWER = 3, + }; +private: + sal_uInt8 m_nType; + LwpObjectID m_objMarker; + OUString m_TimeStyle; + + sal_uInt8 m_nSubType;//datetime/crossref/other + OUString m_sFormula; + + sal_uInt8 m_nCrossRefType; + sal_uInt8 m_nDateTimeType; + sal_uInt8 m_nDocPowerType; + + void RegisterTimeField(LwpFieldMark* pFieldMark); + void RegisterDateTimeStyle(OUString sFormula); + void RegisterTotalTimeStyle(); + void CheckFieldType(LwpFieldMark* pFieldMark); + void ConvertDocFieldStart(XFContentContainer* pXFPara,LwpFieldMark* pFieldMark); + void ConvertDocFieldEnd(XFContentContainer* pXFPara,LwpFieldMark* pFieldMark); + void ConvertDateTimeStart(XFContentContainer* pXFPara,LwpFieldMark* pFieldMark); + void ConvertDateTimeEnd(XFContentContainer* pXFPara,LwpFieldMark* pFieldMark); + void ConvertCrossRefEnd(XFContentContainer* pXFPara,LwpFieldMark* pFieldMark); + void ConvertCrossRefStart(XFContentContainer* pXFPara,LwpFieldMark* pFieldMark); +}; + +class LwpFribRubyMarker : public LwpFrib +{ +public: + LwpFribRubyMarker( LwpPara* pPara ); + ~LwpFribRubyMarker(){}; + void Read(LwpObjectStream* pObjStrm, sal_uInt16 len); + LwpRubyMarker* GetMarker(); + sal_uInt8 GetType(){return m_nType;} + enum{MARKER_START=1,MARKER_END,MARKER_NONE}; + void XFConvert(XFContentContainer* pXFPara); + void RegisterStyle(LwpFoundry* pFoundry); +private: + sal_uInt8 m_nType; + LwpObjectID m_objMarker; +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpfribptr.cxx b/lotuswordpro/source/filter/lwpfribptr.cxx new file mode 100644 index 000000000000..c37738a2274b --- /dev/null +++ b/lotuswordpro/source/filter/lwpfribptr.cxx @@ -0,0 +1,689 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpfribptr.hxx" + +#include "lwpfribheader.hxx" +#include "lwpfribtext.hxx" +#include "lwppara.hxx" +#include "lwpstory.hxx" +#include "xfilter/xftextspan.hxx" +#include "xfilter/xftextcontent.hxx" +#include "xfilter/xftabstop.hxx" +#include "xfilter/xflinebreak.hxx" +#include "lwpfribsection.hxx" +#include "lwpsection.hxx" +#include "lwpfribbreaks.hxx" +#include "lwpfribframe.hxx" +#include "lwpfribtable.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "lwphyperlinkmgr.hxx" +#include "xfilter/xfhyperlink.hxx" +#include "lwpfootnote.hxx" +#include "lwpnotes.hxx" +#include "lwpfribmark.hxx" +#include "xfilter/xfchange.hxx" +#include "lwpchangemgr.hxx" +#include "lwpglobalmgr.hxx" + + +LwpFribPtr::LwpFribPtr() + : m_pFribs(NULL),m_pPara(NULL),m_pXFPara(NULL) +{} + +LwpFribPtr::~LwpFribPtr() +{ + LwpFrib* pNextFrib = m_pFribs; + LwpFrib* pCurFrib = m_pFribs; + while(pCurFrib) + { + pNextFrib = pCurFrib -> GetNext(); + delete pCurFrib; + pCurFrib = pNextFrib; + } +} + +void LwpFribPtr::ReadPara(LwpObjectStream* pObjStrm) +{ + sal_uInt8 FribTag=0; + sal_uInt8 FribType; + sal_uInt8 FribEditor; + BOOL ProblemFrib; + + LwpFrib* pCurFrib = m_pFribs = NULL; + for(;;) + { + ProblemFrib = FALSE; + // Get the frib type + pObjStrm->QuickRead(&FribTag, sizeof(FribTag)); + + FribType = FribTag & ~FRIB_TAG_TYPEMASK; + + // Stop when we hit Elvis + if (FribType == FRIB_TAG_ELVIS) + break; + + // skip the editor ID + //pObjStrm->SeekRel(sizeof(sal_uInt8)); + pObjStrm->QuickRead(&FribEditor, sizeof(FribEditor)); + if( FribType != FT_MAXIMUM ) + { + LwpFrib* pFrib = LwpFrib::CreateFrib( m_pPara, pObjStrm, FribTag,FribEditor); + if(!m_pFribs) + { + m_pFribs = pFrib; + } + if(pCurFrib) + { + pCurFrib->SetNext(pFrib); + } + else//frist frib in the para,add by 2/1 + { + if (pFrib->GetType() == FRIB_TAG_TEXT) + { + LwpFribText* pText = static_cast<LwpFribText*>(pFrib); + if (pFrib->GetModifiers()) + m_pPara->SetFirstFrib(pText->GetText(),pText->GetModifiers()->FontID); + else + m_pPara->SetFirstFrib(pText->GetText(),0); + } + } + pCurFrib = pFrib; + } + else + ProblemFrib = TRUE; + } +} + +/*String LwpFribPtr::GetText() +{ + LwpFrib* pFrib = m_pFribs; + String content; + while(pFrib) + { + if(pFrib->GetType() == FRIB_TAG_TEXT) + { + content+= static_cast<LwpFribText*>(pFrib)->GetText(); + } + pFrib = pFrib->GetNext(); + } + return (content); +}*/ + +#include "lwpdropcapmgr.hxx" +void LwpFribPtr::XFConvert() +{ + LwpFrib* pFrib = m_pFribs; + while(pFrib) + { + sal_uInt8 nFribType = pFrib->GetType(); + sal_Bool bRevisionFlag = pFrib->GetRevisionFlag(); + sal_uInt8 nRevisionType; + OUString sChangeID; + if (bRevisionFlag) + { + if ( nFribType!= FRIB_TAG_TABLE && nFribType != FRIB_TAG_FIELD + && nFribType != FRIB_TAG_FRAME) + { + nRevisionType = pFrib->GetRevisionType(); + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + LwpChangeMgr* pChangeMgr = pGlobal->GetLwpChangeMgr(); + sChangeID = pChangeMgr->GetChangeID(pFrib); + if (sChangeID.getLength()) + { + /// if (nRevisionType == LwpFrib::REV_INSERT) + /// { + XFChangeStart* pChangeStart = new XFChangeStart; + pChangeStart->SetChangeID(sChangeID); + m_pXFPara->Add(pChangeStart); + /// } + /// else if (nRevisionType == LwpFrib::REV_DELETE) + /// { + /// XFChange* pChange = new XFChange; + /// pChange->SetChangeID(sChangeID); + /// m_pXFPara->Add(pChange); + /// pFrib = pFrib->GetNext(); + /// continue; + /// } + } + } + } + + switch(nFribType) + { + case FRIB_TAG_TEXT: + { + LwpFribText* textFrib= static_cast<LwpFribText*>(pFrib); + textFrib->XFConvert(m_pXFPara,m_pPara->GetStory()); + } + break; + case FRIB_TAG_TAB: + { + LwpFribTab* tabFrib = static_cast<LwpFribTab*>(pFrib); + if (pFrib->m_ModFlag) + { + XFTextSpan *pSpan = new XFTextSpan(); + pSpan->SetStyleName(tabFrib->GetStyleName()); + XFTabStop *pTab = new XFTabStop(); + pSpan->Add(pTab); + m_pXFPara->Add(pSpan); + } + else + { + XFTabStop *pTab = new XFTabStop(); + m_pXFPara->Add(pTab); + } + } + break; + case FRIB_TAG_SECTION: + { + LwpFribSection* pSectionFrib = static_cast<LwpFribSection*>(pFrib); + pSectionFrib->ParseSection(); + } + break; + + case FRIB_TAG_PAGEBREAK: + { + LwpFribPageBreak* pPageBreak = static_cast<LwpFribPageBreak*>(pFrib); + LwpPageLayout* pLayout = static_cast<LwpPageLayout*>(pPageBreak->GetLayout()->obj()); + if(pLayout) + { + pPageBreak->ParseLayout(); + } + else + { + if (pPageBreak->IsLastFrib() == sal_True) + { + m_pXFPara->SetStyleName( pPageBreak->GetStyleName() ); + } + else + { + //parse pagebreak + XFParagraph *pPara = new XFParagraph(); + pPara->SetStyleName(pFrib->GetStyleName()); + SetXFPara(pPara); + m_pPara->AddXFContent(pPara); + } + } + } + break; + case FRIB_TAG_COLBREAK: + { + XFParagraph *pPara = new XFParagraph(); + pPara->SetStyleName(pFrib->GetStyleName()); + SetXFPara(pPara); + m_pPara->AddXFContent(pPara); + } + break; + case FRIB_TAG_LINEBREAK: + { + XFLineBreak *pLineBreak = new XFLineBreak(); + m_pXFPara->Add(pLineBreak); + } + break; + case FRIB_TAG_UNICODE: //fall through + case FRIB_TAG_UNICODE2: //fall through + case FRIB_TAG_UNICODE3: //fall through + { + LwpFribUnicode* unicodeFrib= static_cast<LwpFribUnicode*>(pFrib); + unicodeFrib->XFConvert(m_pXFPara,m_pPara->GetStory()); + } + break; + case FRIB_TAG_HARDSPACE: + { + rtl::OUString sHardSpace(sal_Unicode(0x00a0)); + LwpHyperlinkMgr* pHyperlink = + m_pPara->GetStory()->GetHyperlinkMgr(); + if (pHyperlink->GetHyperlinkFlag()) + pFrib->ConvertHyperLink(m_pXFPara,pHyperlink,sHardSpace); + else + pFrib->ConvertChars(m_pXFPara,sHardSpace); + } + break; + case FRIB_TAG_SOFTHYPHEN: + { + rtl::OUString sSoftHyphen(sal_Unicode(0x00ad)); + pFrib->ConvertChars(m_pXFPara,sSoftHyphen); + } + break; + case FRIB_TAG_FRAME: + { + LwpFribFrame* frameFrib= static_cast<LwpFribFrame*>(pFrib); + LwpObject* pLayout = frameFrib->GetLayout(); + if (pLayout->GetTag() == VO_DROPCAPLAYOUT) + { + m_pPara->GetFoundry()->GetDropcapMgr()->SetXFPara(m_pXFPara); + //LwpObject* pDropCap = frameFrib->GetLayout(); + //pDropCap ->XFConvert(m_pXFPara); + } + //pLayout->XFConvert(m_pXFPara); + frameFrib->XFConvert(m_pXFPara); + } + break; + case FRIB_TAG_CHBLOCK: + { + LwpFribCHBlock* chbFrib = static_cast<LwpFribCHBlock*>(pFrib); + chbFrib->XFConvert(m_pXFPara,m_pPara->GetStory()); + } + break; + case FRIB_TAG_TABLE: + { + LwpFribTable* tableFrib = static_cast<LwpFribTable*>(pFrib); + //tableFrib->XFConvert(m_pPara->GetXFContainer()); + tableFrib->XFConvert(m_pXFPara); + } + break; + case FRIB_TAG_BOOKMARK: + { + LwpFribBookMark* bookmarkFrib = static_cast<LwpFribBookMark*>(pFrib); + bookmarkFrib->XFConvert(m_pXFPara); + } + break; + case FRIB_TAG_FOOTNOTE: + { + LwpFribFootnote* pFootnoteFrib = static_cast<LwpFribFootnote*>(pFrib); + pFootnoteFrib->XFConvert(m_pXFPara); + break; + } + case FRIB_TAG_FIELD: + { + LwpFribField* fieldFrib = static_cast<LwpFribField*>(pFrib); + fieldFrib->XFConvert(m_pXFPara); + break; + } + case FRIB_TAG_NOTE: + { + LwpFribNote* pNoteFrib = static_cast<LwpFribNote*>(pFrib); + pNoteFrib->XFConvert(m_pXFPara); + break; + } + case FRIB_TAG_PAGENUMBER: + { + LwpFribPageNumber* pagenumFrib = static_cast<LwpFribPageNumber*>(pFrib); + pagenumFrib->XFConvert(m_pXFPara); + break; + } + case FRIB_TAG_DOCVAR: + { + LwpFribDocVar* docFrib = static_cast<LwpFribDocVar*>(pFrib); + docFrib->XFConvert(m_pXFPara); + break; + } + case FRIB_TAG_RUBYMARKER: + { + LwpFribRubyMarker* rubyFrib = static_cast<LwpFribRubyMarker*>(pFrib); + rubyFrib->XFConvert(m_pXFPara); + break; + } + case FRIB_TAG_RUBYFRAME: + { + LwpFribRubyFrame* rubyfrmeFrib = static_cast<LwpFribRubyFrame*>(pFrib); + rubyfrmeFrib->XFConvert(m_pXFPara); + break; + } + default : + break; + } + + if (bRevisionFlag )//&& pFrib->GetRevisionType() == LwpFrib::REV_INSERT) + { + if (nFribType!= FRIB_TAG_TABLE && nFribType != FRIB_TAG_FIELD + && nFribType != FRIB_TAG_FRAME) + { + if (sChangeID.getLength()) + { + XFChangeEnd* pChangeEnd = new XFChangeEnd; + pChangeEnd->SetChangeID(sChangeID); + m_pXFPara->Add(pChangeEnd); + } + } + } + pFrib = pFrib->GetNext(); + } + +} + +void LwpFribPtr::FindLayouts() +{ + LwpFrib* pFrib = m_pFribs; + while(pFrib) + { + switch(pFrib->GetType()) + { + case FRIB_TAG_SECTION: + { + LwpFribSection* pSectionFrib = static_cast<LwpFribSection*>(pFrib); + LwpSection* pSection = pSectionFrib->GetSection(); + if(pSection) + { + LwpPageLayout* pLayout = pSection->GetPageLayout(); + if(pLayout) + { + LwpLayout::UseWhenType eSectionType = pLayout->GetUseWhenType(); + if(eSectionType==LwpLayout::StartWithinColume) + { + //StartWithinColume type not support now + break; + } + LwpStory* pStory = static_cast<LwpStory*>(m_pPara->GetStoryID()->obj()); + pStory->AddPageLayout(pSection->GetPageLayout()); + } + } + + break; + } + case FRIB_TAG_PAGEBREAK: + { + LwpFribPageBreak* pPageBreak = static_cast<LwpFribPageBreak*>(pFrib); + LwpPageLayout* pLayout = static_cast<LwpPageLayout*>(pPageBreak->GetLayout()->obj()); + if(pLayout) + { + LwpStory* pStory = static_cast<LwpStory*>(m_pPara->GetStoryID()->obj()); + pStory->AddPageLayout(pLayout); + } + break; + } + default: + break; + } + pFrib = pFrib->GetNext(); + } +} +/************************************************************************** + * @descr: Whether has a frib which type is nType + * @param: + * @param: + * @return: +**************************************************************************/ +LwpFrib* LwpFribPtr::HasFrib(sal_uInt8 nType) +{ + LwpFrib* pFrib = m_pFribs; + while(pFrib) + { + if(pFrib->GetType()==nType) + { + return pFrib; + } + pFrib = pFrib->GetNext(); + } + return NULL; +} + +void LwpFribPtr::GatherAllText() +{ + LwpFrib* pFrib = m_pFribs; + while(pFrib) + { + switch(pFrib->GetType()) + { + case FRIB_TAG_TEXT: + { + OUString sText = static_cast<LwpFribText*>(pFrib)->GetText(); + m_pPara->SetAllText(sText); + break; + } + case FRIB_TAG_UNICODE: //fall through + case FRIB_TAG_UNICODE2: //fall through + case FRIB_TAG_UNICODE3: //fall through : + { + OUString sText = static_cast<LwpFribText*>(pFrib)->GetText(); + m_pPara->SetAllText(sText); + break; + } + default : + break; + } + pFrib = pFrib->GetNext(); + } +} + +void LwpFribPtr::RegisterStyle() +{ + LwpFrib* pFrib = m_pFribs; + while(pFrib) + { + switch(pFrib->GetType()) + { + case FRIB_TAG_TEXT: + { + pFrib->RegisterStyle(m_pPara->GetFoundry()); + OUString sText = static_cast<LwpFribText*>(pFrib)->GetText(); + ProcessDropcap(m_pPara->GetStory(), pFrib,sText.getLength()); + break; + } + case FRIB_TAG_TAB: + pFrib->RegisterStyle(m_pPara->GetFoundry()); + break; + case FRIB_TAG_SECTION: + { + //section registerstyle here; + LwpFribSection* pSectionFrib = static_cast<LwpFribSection*>(pFrib); + pSectionFrib->RegisterSectionStyle(); + //for bullet + pSectionFrib->SetSectionName(); + } + break; + case FRIB_TAG_PAGEBREAK: + { + LwpFribPageBreak* breakFrib = static_cast<LwpFribPageBreak*>(pFrib); + breakFrib->RegisterBreakStyle(m_pPara); + } + break; + case FRIB_TAG_COLBREAK: + { + LwpFribColumnBreak* breakFrib = static_cast<LwpFribColumnBreak*>(pFrib); + breakFrib->RegisterBreakStyle(m_pPara); + } + break; + case FRIB_TAG_UNICODE: //fall through + case FRIB_TAG_UNICODE2: //fall through + case FRIB_TAG_UNICODE3: //fall through : + { + pFrib->RegisterStyle(m_pPara->GetFoundry()); + OUString sText = static_cast<LwpFribUnicode*>(pFrib)->GetText(); + ProcessDropcap(m_pPara->GetStory(), pFrib,sText.getLength()); + break; + } + case FRIB_TAG_HARDSPACE: + pFrib->RegisterStyle(m_pPara->GetFoundry()); + ProcessDropcap(m_pPara->GetStory(),pFrib,1); + break; + case FRIB_TAG_SOFTHYPHEN: + pFrib->RegisterStyle(m_pPara->GetFoundry()); + break; + case FRIB_TAG_FRAME: + { + LwpFribFrame* frameFrib = static_cast<LwpFribFrame*>(pFrib); + frameFrib->SetParaDropcap(m_pPara); + frameFrib->RegisterStyle(m_pPara->GetFoundry()); + //register framelayout style, ,03/09/2005 + //frameFrib->GetLayout()->RegisterStyle(); + } + break; + case FRIB_TAG_CHBLOCK: + break; + case FRIB_TAG_TABLE: + { + LwpFribTable* tableFrib = static_cast<LwpFribTable*>(pFrib); + tableFrib->RegisterStyle(); + } + break; + case FRIB_TAG_FOOTNOTE: + { + LwpFribFootnote* pFribFootnote = static_cast<LwpFribFootnote*>(pFrib); + pFribFootnote->RegisterStyle(); + } + break; + case FRIB_TAG_NOTE: + { + LwpFribNote* pNoteFrib = static_cast<LwpFribNote*>(pFrib); + pNoteFrib->RegisterStyle(); + break; + } + case FRIB_TAG_PAGENUMBER: + { + pFrib->RegisterStyle(m_pPara->GetFoundry()); + break; + } + case FRIB_TAG_DOCVAR: + { + LwpFribDocVar* docFrib = static_cast<LwpFribDocVar*>(pFrib); + docFrib->RegisterStyle(m_pPara->GetFoundry()); + break; + } + case FRIB_TAG_FIELD: + { + LwpFribField* fieldFrib = static_cast<LwpFribField*>(pFrib); + fieldFrib->RegisterStyle(m_pPara->GetFoundry()); + break; + } + case FRIB_TAG_BOOKMARK: + { + LwpFribBookMark* bookmarkFrib = static_cast<LwpFribBookMark*>(pFrib); + bookmarkFrib->RegisterStyle(m_pPara->GetFoundry()); + break; + } + case FRIB_TAG_RUBYFRAME: + { + LwpFribRubyFrame* rubyfrmeFrib = static_cast<LwpFribRubyFrame*>(pFrib); + rubyfrmeFrib->RegisterStyle(m_pPara->GetFoundry()); + break; + } + default : + break; + } + if (pFrib->GetRevisionFlag() && pFrib->GetType()!= FRIB_TAG_FIELD) + { + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + LwpChangeMgr* pChangeMgr = pGlobal->GetLwpChangeMgr(); + pChangeMgr->AddChangeFrib(pFrib); + } + + pFrib = pFrib->GetNext(); + } +} + +void LwpFribPtr::ProcessDropcap(LwpStory* pStory,LwpFrib* pFrib,sal_uInt32 nLen) +{ + if (pStory) + { + if (pStory->GetDropcapFlag() == sal_True) + { + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + XFTextStyle* pFribStyle = pXFStyleManager->FindTextStyle(pFrib->GetStyleName()); + pFribStyle->GetFont()->SetFontSize(0); + + LwpObject* pObj= pStory->GetLayoutsWithMe()->GetOnlyLayout()->obj(); + if (pObj) + static_cast<LwpDropcapLayout*>(pObj)->SetChars(nLen); + } + } +} +/** + * @descr: If the position of pPreLayout is earlier than pNextLayout, return true, or return false, defalut return true + * +*/ +sal_Bool LwpFribPtr::ComparePagePosition(LwpVirtualLayout* pPreLayout, LwpVirtualLayout* pNextLayout) +{ + if(!pPreLayout || !pNextLayout) + return sal_True; + + LwpFrib* pFrib = m_pFribs; + LwpVirtualLayout* pLayout = NULL; + while(pFrib) + { + switch(pFrib->GetType()) + { + case FRIB_TAG_SECTION: + { + LwpFribSection* pSectionFrib = static_cast<LwpFribSection*>(pFrib); + LwpSection* pSection = pSectionFrib->GetSection(); + if(pSection) + { + pLayout = pSection->GetPageLayout(); + } + + break; + } + case FRIB_TAG_PAGEBREAK: + { + LwpFribPageBreak* pPageBreak = static_cast<LwpFribPageBreak*>(pFrib); + pLayout = static_cast<LwpVirtualLayout*>(pPageBreak->GetLayout()->obj()); + break; + } + default: + break; + } + + if(pLayout) + { + if(pPreLayout == pLayout) + return sal_True; + if(pNextLayout == pLayout) + return sal_False; + } + pFrib = pFrib->GetNext(); + } + + return sal_True; +} diff --git a/lotuswordpro/source/filter/lwpfribptr.hxx b/lotuswordpro/source/filter/lwpfribptr.hxx new file mode 100644 index 000000000000..eafaf1593e69 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfribptr.hxx @@ -0,0 +1,100 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPFRIBPTR_HXX_ +#define _LWPFRIBPTR_HXX_ + +#include "lwpobjstrm.hxx" +#include "lwpfrib.hxx" +#include "lwpstory.hxx" +#include "xfilter/xfparagraph.hxx" + +class LwpPara; +class LwpFribPtr +{ +public: + LwpFribPtr(); + ~LwpFribPtr(); + void ReadPara(LwpObjectStream* pObjStrm); +private: +// void ReadModifiers(LwpObjectStream* pObjStrm,ModifierInfo* pModInfo); + LwpFrib* m_pFribs; + XFParagraph* m_pXFPara;//for parse ,add by 1-17 //Current XFPara used for frib parsing + LwpPara* m_pPara;//for get foundry, add by 1-17 + void ProcessDropcap(LwpStory* pStory,LwpFrib* pFrib,sal_uInt32 nLen); +public: +// String GetText(); + void XFConvert(); + void SetXFPara(XFParagraph* Para){m_pXFPara = Para;}; + XFParagraph* GetXFPara(){return m_pXFPara;}; + void SetPara(LwpPara* para){m_pPara=para;}; + LwpPara* GetPara(){return m_pPara;}; + void RegisterStyle(); + void FindLayouts();// for register pagelayout, add by , 02/20/2005 + LwpFrib* GetFribs(){return m_pFribs;} + LwpFrib* HasFrib(sal_uInt8 nType); + sal_Bool ComparePagePosition(LwpVirtualLayout* pPreLayout, LwpVirtualLayout* pNextLayout); + void GatherAllText(); +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpfribsection.cxx b/lotuswordpro/source/filter/lwpfribsection.cxx new file mode 100644 index 000000000000..c4ee7b4c9739 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfribsection.cxx @@ -0,0 +1,470 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * the class for section frib and process section and page layout + ************************************************************************/ +/************************************************************************* + * Change History +Jan 2005 Created + ************************************************************************/ +#include "lwpfribsection.hxx" +#include "lwpfribbreaks.hxx" +#include "lwpstory.hxx" +#include "lwpsection.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xfsectionstyle.hxx" +#include "xfilter/xfsection.hxx" +#include "xfilter/xfindex.hxx" +#include "lwpfribptr.hxx" +#include "lwpglobalmgr.hxx" + +LwpFribSection::LwpFribSection(LwpPara *pPara) + : LwpFrib(pPara),m_pMasterPage(NULL) +{ + +} + +LwpFribSection::~LwpFribSection() +{ + if(m_pMasterPage) + { + delete m_pMasterPage; + m_pMasterPage = NULL; + } +} + +/** + * @descr: Read section frib information + * + */ +void LwpFribSection::Read(LwpObjectStream *pObjStrm, sal_uInt16 len) +{ + m_Section.ReadIndexed(pObjStrm); +} + +/** + * @descr: Get section pointer + * + */ +LwpSection* LwpFribSection::GetSection() +{ + return static_cast<LwpSection*>(m_Section.obj()); +} + +/** + * @descr: Register section style + * + */ +void LwpFribSection::RegisterSectionStyle() +{ + LwpPageLayout* pLayout = GetPageLayout(); + if(pLayout) + { + m_pMasterPage = new LwpMasterPage(m_pPara, pLayout); + m_pMasterPage->RegisterMasterPage(this); + } +} + +/** + * @descr: Register section style + * + */ +void LwpFribSection::SetSectionName() +{ + LwpSection* pSection = GetSection(); + if(pSection) + { + LwpStory* pStory = static_cast<LwpStory*>(m_pPara->GetStoryID()->obj()); + pStory->SetSectionName(pSection->GetSectionName()); + } +} + +/** + * @descr: Get page layout that current section points + * + */ +LwpPageLayout* LwpFribSection::GetPageLayout() +{ + if(GetSection()) + return GetSection()->GetPageLayout(); + return NULL; +} + +/** + * @descr: XFConvert section + * + */ +void LwpFribSection::ParseSection() +{ + LwpPageLayout* pLayout = GetPageLayout(); + if(pLayout) + { + // StartWithinColume not support now + LwpLayout::UseWhenType eSectionType = pLayout->GetUseWhenType(); + if(eSectionType==LwpLayout::StartWithinColume) + { + return; + } + if(m_pMasterPage) + { + m_pMasterPage->ParseSection(this); + } + } + else + { + LwpStory* pStory = static_cast<LwpStory*> ( m_pPara->GetStoryID()->obj() ); + if (m_Section.obj()->GetTag() == VO_INDEXSECTION) + { + sal_Bool bRunin = sal_False; + sal_Bool bSeparator = sal_False; + //create a new section and add it to container + XFIndex* pIndex = new XFIndex; + pIndex->SetIndexType(enumXFIndexAlphabetical); + /* + LwpIndexSection* pIndexSection = static_cast<LwpIndexSection*>(m_Section.obj()); + if (pIndexSection->IsFormatRunin()) + bRunin = sal_True; + if (pIndexSection->IsFormatSeparator()) + bSeparator = sal_True; + pIndex->SetDefaultAlphaIndex(A2OUSTR(""),bRunin,bSeparator); + */ + SetDefaultAlphaIndex(pIndex); + + pStory->AddXFContent( pIndex ); + m_pPara->SetXFContainer( pIndex ); + } + else + { + XFContentContainer* pContent = pStory->GetXFContent(); + m_pPara->SetXFContainer( pContent ); + } + } +} + +void LwpFribSection::SetDefaultAlphaIndex(XFIndex * pXFIndex) +{ + LwpFoundry* pFoundry = m_pPara->GetFoundry(); + OUString styleName = pFoundry->FindActuralStyleName(A2OUSTR("Separator")); + + LwpIndexSection* pIndexSection = static_cast<LwpIndexSection*>(m_Section.obj()); + XFIndexTemplate * pTemplateSep = new XFIndexTemplate(); + if (pIndexSection->IsFormatSeparator()) + { + pXFIndex->SetSeparator(sal_True); + pTemplateSep->AddEntry(enumXFIndexTemplateText,A2OUSTR("")); + } + //pXFIndex->AddTemplate(A2OUSTR("separator"),A2OUSTR("Separator"),pTemplateSep); + pXFIndex->AddTemplate(A2OUSTR("separator"),styleName,pTemplateSep); + + + styleName = pFoundry->FindActuralStyleName(A2OUSTR("Primary")); + + XFIndexTemplate * pTemplate1 = new XFIndexTemplate(); + pTemplate1->AddEntry(enumXFIndexTemplateText,A2OUSTR("")); + pTemplate1->AddEntry(enumXFIndexTemplateTab,A2OUSTR("")); + pTemplate1->AddEntry(enumXFIndexTemplatePage,A2OUSTR("")); + //pXFIndex->AddTemplate(Int32ToOUString(1),A2OUSTR("Primary"),pTemplate1); + pXFIndex->AddTemplate(Int32ToOUString(1),styleName,pTemplate1); + + XFIndexTemplate * pTemplate2 = new XFIndexTemplate(); + pTemplate2->AddEntry(enumXFIndexTemplateText,A2OUSTR("")); + pTemplate2->AddEntry(enumXFIndexTemplateTab,A2OUSTR("")); + pTemplate2->AddEntry(enumXFIndexTemplatePage,A2OUSTR("")); + XFIndexTemplate * pTemplate3 = new XFIndexTemplate(); + pTemplate3->AddEntry(enumXFIndexTemplateText,A2OUSTR("")); + pTemplate3->AddEntry(enumXFIndexTemplateTab,A2OUSTR("")); + pTemplate3->AddEntry(enumXFIndexTemplatePage,A2OUSTR("")); + + if (pIndexSection->IsFormatRunin()) + { + //pXFIndex->AddTemplate(Int32ToOUString(2),A2OUSTR("Primary"),pTemplate2); + //pXFIndex->AddTemplate(Int32ToOUString(3),A2OUSTR("Primary"),pTemplate3); + pXFIndex->AddTemplate(Int32ToOUString(2),styleName,pTemplate2); + pXFIndex->AddTemplate(Int32ToOUString(3),styleName,pTemplate3); + } + else + { + //pXFIndex->AddTemplate(Int32ToOUString(2),A2OUSTR("Secondary"),pTemplate2); + //pXFIndex->AddTemplate(Int32ToOUString(3),A2OUSTR("Secondary"),pTemplate3); + styleName = pFoundry->FindActuralStyleName(A2OUSTR("Secondary")); + pXFIndex->AddTemplate(Int32ToOUString(2),styleName,pTemplate2); + pXFIndex->AddTemplate(Int32ToOUString(3),styleName,pTemplate3); + } +} + + +LwpMasterPage::LwpMasterPage(LwpPara* pPara, LwpPageLayout* pLayout) + :m_pPara(pPara),m_pLayout(pLayout),m_bNewSection(sal_False) +{ +} + +/** + * @descr: Register master page style for para style and register section style if necessary + * + */ +sal_Bool LwpMasterPage::RegisterMasterPage(LwpFrib* pFrib) +{ + //if there is no other frib after current firb, register master page in starting para of next page + if(IsNextPageType()&&(!pFrib->HasNextFrib())) + { + LwpStory* pStory = static_cast<LwpStory*>(m_pPara->GetStoryID()->obj()); + pStory->SetCurrentLayout(m_pLayout); + RegisterFillerPageStyle(); + return sal_False; + } + + m_bNewSection = sal_False; + //sal_Bool bSectionColumns = sal_False; + + XFParaStyle* pOverStyle = new XFParaStyle; + *pOverStyle = *(m_pPara->GetXFParaStyle()); + pOverStyle->SetStyleName(A2OUSTR("")); + + LwpLayout::UseWhenType eUserType = m_pLayout->GetUseWhenType(); + switch(eUserType) + { + case LwpLayout::StartWithinColume://not support now + { + m_bNewSection = sal_False; + break; + } + case LwpLayout::StartWithinPage: + { + m_bNewSection = sal_True; + //bSectionColumns = sal_True; + break; + } + case LwpLayout::StartOnNextPage: //fall throught + case LwpLayout::StartOnOddPage: //fall throught + case LwpLayout::StartOnEvenPage: + { + LwpStory* pStory = static_cast<LwpStory*>(m_pPara->GetStoryID()->obj()); + pStory->SetCurrentLayout(m_pLayout); + //get odd page layout when the current pagelayout is mirror + m_pLayout = pStory->GetCurrentLayout(); + m_bNewSection = IsNeedSection(); + //bSectionColumns = m_bNewSection; + pOverStyle->SetMasterPage( m_pLayout->GetStyleName()); + RegisterFillerPageStyle(); + break; + } + default: + break; + } + + //register tab style; + LwpStory* pStory = static_cast<LwpStory*>(m_pPara->GetStoryID()->obj()); + pStory->SetTabLayout(m_pLayout); + m_pPara->RegisterTabStyle(pOverStyle); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_StyleName = pXFStyleManager->AddStyle(pOverStyle)->GetStyleName(); + //register section style here + if(m_bNewSection) + { + XFSectionStyle* pSectStyle= new XFSectionStyle(); + //set margin + LwpStory* pStory = static_cast<LwpStory*>(m_pPara->GetStoryID()->obj()); + if(pStory) + { + LwpPageLayout* pCurrentLayout = pStory->GetCurrentLayout(); + double fLeft = m_pLayout->GetMarginsValue(MARGIN_LEFT)- pCurrentLayout->GetMarginsValue(MARGIN_LEFT); + double fRight = m_pLayout->GetMarginsValue(MARGIN_RIGHT)- pCurrentLayout->GetMarginsValue(MARGIN_RIGHT); + pSectStyle->SetMarginLeft(fLeft); + pSectStyle->SetMarginRight(fRight); + } + + //if(bSectionColumns) + //{ + //set columns + XFColumns* pColumns = m_pLayout->GetXFColumns(); + if(pColumns) + { + pSectStyle->SetColumns(pColumns); + } + //} + m_SectionStyleName = pXFStyleManager->AddStyle(pSectStyle)->GetStyleName(); + } + return sal_False; +} + +/** + * @descr: Whether it need create a new section + * + */ +sal_Bool LwpMasterPage::IsNeedSection() +{ + sal_Bool bNewSection = sal_False; + //get story + LwpStory* pStory = static_cast<LwpStory*>(m_pPara->GetStoryID()->obj()); + //if pagelayout is modified, register the pagelayout + if(pStory->IsPMModified()) + { + bNewSection = pStory->IsNeedSection(); + } + return bNewSection; +} + +/** + * @descr: Create XFSection if necessary + * + */ +XFSection* LwpMasterPage::CreateXFSection() +{ + if(m_bNewSection) + { + //new a section + XFSection* pXFSection = new XFSection(); + pXFSection->SetStyleName(m_SectionStyleName); + return pXFSection; + } + return NULL; +} + +/** + * @descr: Parse section + * + */ +void LwpMasterPage::ParseSection(LwpFrib* pFrib) +{ + LwpFribPtr* pFribPtr = m_pPara->GetFribs(); + //XFParagraph * pXFPara = pFribPtr->GetXFPara(); + + //parse fillerpage text + if(m_pLayout->HasFillerPageText(m_pPara->GetFoundry())) + { + XFParagraph *pPara = new XFParagraph(); + pPara->SetStyleName(GetFillerPageStyleName()); + m_pPara->AddXFContent(pPara); + pFribPtr->SetXFPara(pPara); + + m_pLayout->ConvertFillerPageText(m_pPara->GetXFContainer()); + } + //create a new section and add it to container + XFContentContainer* pContent = CreateXFSection(); + if(pContent) + { + LwpStory* pStory = static_cast<LwpStory*> ( m_pPara->GetStoryID()->obj() ); + //delete the additional blank para, 06/28/2005 + XFParagraph* pCurrPara = pFribPtr->GetXFPara(); + if(!pCurrPara->HasContents()) + { + XFContentContainer* pCurrContainer = m_pPara->GetXFContainer(); + if(pFrib->HasNextFrib() && (pCurrContainer->GetLastContent() == pCurrPara)) + { + pCurrContainer->RemoveLastContent(); + } + } + //end,06/28/2005 + pStory->AddXFContent( pContent ); + } + else + { + LwpStory* pStory = static_cast<LwpStory*> ( m_pPara->GetStoryID()->obj() ); + pContent = pStory->GetXFContent(); + } + if(pContent) + { + m_pPara->SetXFContainer( pContent ); + } + //out put the contents after the section frib in the same para. + if(pFrib->HasNextFrib()) + { + XFParagraph *pNextPara = new XFParagraph(); + pNextPara->SetStyleName(GetStyleName()); + m_pPara->AddXFContent(pNextPara); + pFribPtr->SetXFPara(pNextPara); + } + +} + +/** + * @descr: Register filler page text style + * + */ +void LwpMasterPage::RegisterFillerPageStyle() +{ + LwpLayout::UseWhenType eUserType = m_pLayout->GetUseWhenType(); + if(eUserType==LwpLayout::StartOnOddPage + ||eUserType==LwpLayout::StartOnEvenPage) + { + if(m_pLayout->HasFillerPageText(m_pPara->GetFoundry())) + { + XFParaStyle* pPagebreakStyle = new XFParaStyle; + *pPagebreakStyle = *(m_pPara->GetXFParaStyle()); + pPagebreakStyle->SetStyleName(A2OUSTR("")); + pPagebreakStyle->SetBreaks(enumXFBreakAftPage); + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_FillerPageStyleName= pXFStyleManager->AddStyle(pPagebreakStyle)->GetStyleName(); + } + } +} + +/** + * @descr: Whether the layout is next page type + * + */ +sal_Bool LwpMasterPage::IsNextPageType() +{ + LwpLayout::UseWhenType eUserType = m_pLayout->GetUseWhenType(); + if(eUserType == LwpLayout::StartOnNextPage + || eUserType == LwpLayout::StartOnOddPage + || eUserType == LwpLayout::StartOnEvenPage ) + { + return sal_True; + } + return sal_False; +} diff --git a/lotuswordpro/source/filter/lwpfribsection.hxx b/lotuswordpro/source/filter/lwpfribsection.hxx new file mode 100644 index 000000000000..e42636ad051a --- /dev/null +++ b/lotuswordpro/source/filter/lwpfribsection.hxx @@ -0,0 +1,131 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * the class for section frib and process section and page layout + ************************************************************************/ +/************************************************************************* + * Change History +Jan 2005 Created + ************************************************************************/ +#ifndef _LWPFRIBSECTION_HXX_ +#define _LWPFRIBSECTION_HXX_ +#include "lwpfrib.hxx" +#include "lwppara.hxx" + +/** + * @brief Process page layout for inserting pagelayout or section + * + */ +class LwpMasterPage +{ +public: + LwpMasterPage(LwpPara* pPara, LwpPageLayout* pLayout); + ~LwpMasterPage(){}; + +public: + //for page layout register and parse + sal_Bool RegisterMasterPage(LwpFrib* pFrib); + void RegisterFillerPageStyle(); + void ParseSection(LwpFrib* pFrib); + XFSection* CreateXFSection(); + + sal_Bool IsNewSection(){return m_bNewSection;} + OUString GetSectionStyleName(){return m_SectionStyleName;} + OUString GetStyleName(){ return m_StyleName;} + OUString GetFillerPageStyleName(){ return m_FillerPageStyleName;} + sal_Bool IsNextPageType(); + +private: + sal_Bool IsNeedSection(); + +private: + sal_Bool m_bNewSection; + OUString m_FillerPageStyleName; + OUString m_SectionStyleName; + OUString m_StyleName; //master page style name + + LwpPara* m_pPara; + LwpPageLayout* m_pLayout; +}; + +/** + * @brief FRIB_TAB_SECTION object + * + */ +class LwpSection; +class XFIndex; +class LwpFribSection: public LwpFrib +{ +public: + LwpFribSection(LwpPara* pPara ); + ~LwpFribSection(); + void Read(LwpObjectStream* pObjStrm, sal_uInt16 len); + LwpSection * GetSection(); + void RegisterSectionStyle(); + //Modified by Helen for XFConvert refactor + void ParseSection(); + //End of modification + void SetSectionName(); + + LwpPageLayout* GetPageLayout(); +private: + void SetDefaultAlphaIndex(XFIndex* pXFIndex); + +private: + LwpObjectID m_Section; + LwpMasterPage* m_pMasterPage; +}; +#endif diff --git a/lotuswordpro/source/filter/lwpfribtable.cxx b/lotuswordpro/source/filter/lwpfribtable.cxx new file mode 100644 index 000000000000..380d4eadd093 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfribtable.cxx @@ -0,0 +1,173 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "lwpfribtable.hxx" +#include "lwppara.hxx" +#include "lwptablelayout.hxx" +#include "lwpchangemgr.hxx" +#include "lwpglobalmgr.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xfchange.hxx" +/** + * @short: Read table frib + * @param: + * @param: + */ + +void LwpFribTable::Read(LwpObjectStream* pObjStrm, sal_uInt16 len) +{ + m_objTable.ReadIndexed(pObjStrm); +} + +LwpSuperTableLayout* LwpFribTable::GetSuperTable() +{ + return static_cast<LwpSuperTableLayout*>(m_objTable.obj()); +} + +void LwpFribTable::RegisterStyle() +{ + GetSuperTable()->RegisterStyle(); + XFParaStyle* pOldStyle = m_pPara->GetXFParaStyle(); + if(HasNextFrib()) + { + if (pOldStyle->GetMasterPage().getLength() == 0) + m_StyleName = pOldStyle->GetStyleName(); + else + { + XFParaStyle* pParaStyle = new XFParaStyle; + *pParaStyle = *(pOldStyle); + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_StyleName = pXFStyleManager->AddStyle(pParaStyle)->GetStyleName(); + } + } +} + +void LwpFribTable::Parse(IXFStream* pOutputStream) +{ + GetSuperTable()->Parse(pOutputStream); +} + +void LwpFribTable::XFConvert(XFContentContainer* pCont) +{ + XFContentContainer* pXFContentContainer = pCont; + LwpSuperTableLayout* pSuper = GetSuperTable(); + sal_uInt8 nType = pSuper->GetRelativeType(); + LwpVirtualLayout* pContainer = pSuper->GetContainerLayout(); + if (!pContainer) + return; + if ( LwpLayoutRelativityGuts::LAY_INLINE_NEWLINE == nType + && !pContainer->IsCell()) + { + pXFContentContainer = m_pPara->GetXFContainer(); + //delete the additional blank para, 06/28/2005 + XFParagraph* pCurrPara = m_pPara->GetFribs()->GetXFPara(); + if(!pCurrPara->HasContents()) + { + if(pXFContentContainer->GetLastContent() == pCurrPara) + { + pXFContentContainer->RemoveLastContent(); + } + } + //end,06/28/2005 + } + else if( LwpLayoutRelativityGuts::LAY_PARA_RELATIVE == nType) + { + //same page as text and in frame + if(pContainer->IsFrame()) + { + pXFContentContainer = m_pPara->GetXFContainer(); + } + else if(pContainer->IsCell()) + { + //same page as text and in cell, get the first xfpara + XFContentContainer* pXFFirtPara = static_cast<XFContentContainer*>(pCont->FindFirstContent(enumXFContentPara)); + if(pXFFirtPara) + pXFContentContainer = pXFFirtPara; + } + } + OUString sChangeID; + if(m_bRevisionFlag) + { + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + LwpChangeMgr* pChangeMgr = pGlobal->GetLwpChangeMgr(); + sChangeID = pChangeMgr->GetChangeID(this); + if (sChangeID.getLength()) + { + XFChangeStart* pChangeStart = new XFChangeStart; + pChangeStart->SetChangeID(sChangeID); + pXFContentContainer->Add(pChangeStart); + } + } + pSuper->XFConvert(pXFContentContainer); + + if(m_bRevisionFlag) + { + if (sChangeID.getLength()) + { + XFChangeEnd* pChangeEnd = new XFChangeEnd; + pChangeEnd->SetChangeID(sChangeID); + pXFContentContainer->Add(pChangeEnd); + } + } + + if(LwpLayoutRelativityGuts::LAY_INLINE_NEWLINE == nType + && HasNextFrib()) + { + XFParagraph* pXFPara = new XFParagraph(); + pXFPara->SetStyleName(m_StyleName); + m_pPara->AddXFContent(pXFPara); + m_pPara->GetFribs()->SetXFPara(pXFPara); + } + +} diff --git a/lotuswordpro/source/filter/lwpfribtable.hxx b/lotuswordpro/source/filter/lwpfribtable.hxx new file mode 100644 index 000000000000..29ce89159f07 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfribtable.hxx @@ -0,0 +1,74 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _LWPFRIBTABLE_HXX_ +#define _LWPFRIBTABLE_HXX_ + +#include "lwpfrib.hxx" + +class LwpSuperTableLayout; +class LwpFribTable : public LwpFrib +{ +public: + LwpFribTable( LwpPara* pPara ) : LwpFrib(pPara){}; + ~LwpFribTable(){}; + void Read(LwpObjectStream* pObjStrm, sal_uInt16 len); + LwpSuperTableLayout* GetSuperTable(); + void RegisterStyle(); + void Parse(IXFStream* pOutputStream); + virtual void XFConvert(XFContentContainer* pCont); +private: + LwpObjectID m_objTable; +}; +#endif diff --git a/lotuswordpro/source/filter/lwpfribtext.cxx b/lotuswordpro/source/filter/lwpfribtext.cxx new file mode 100644 index 000000000000..d316fa94e8f7 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfribtext.cxx @@ -0,0 +1,496 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ +#include "lwpglobalmgr.hxx" +#include "lwpfribtext.hxx" +#include "lwpcharsetmgr.hxx" +#include "lwphyperlinkmgr.hxx" +#include "lwptools.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xftextspan.hxx" +#include "xfilter/xfbookmark.hxx" +#include "xfilter/xfentry.hxx" +#include "xfilter/xftextcontent.hxx" +#include "xfilter/xfcrossref.hxx" +#include "xfilter/xfpagenumber.hxx" +#include "xfilter/xfdocfield.hxx" +#include "xfilter/xfdatestyle.hxx" +#include "xfilter/xftimestyle.hxx" +#include "xfilter/xfdate.hxx" +#include "xfilter/xfannotation.hxx" + +LwpFribText::LwpFribText( LwpPara *pPara, sal_Bool bNoUnicode ) + : LwpFrib(pPara), m_bNoUnicode(bNoUnicode) +{}; + +void LwpFribText::Read(LwpObjectStream* pObjStrm, sal_uInt16 len) +{ + if( len>=1 ) + { + rtl_TextEncoding rEncode; + if(m_bNoUnicode) + { + rEncode = RTL_TEXTENCODING_ISO_8859_1; + } + else + { + if (m_pModifiers && m_pModifiers->CodePage) + rEncode = LwpCharSetMgr::GetInstance()-> + GetTextCharEncoding(m_pModifiers->CodePage); + else + rEncode = LwpCharSetMgr::GetInstance()->GetTextCharEncoding(); + } + LwpTools::QuickReadUnicode(pObjStrm, m_Content, len, rEncode); + } +} + +void LwpFribText::XFConvert(XFContentContainer* pXFPara,LwpStory* pStory) +{ + if (!pStory) + return; + LwpHyperlinkMgr* pHyperlink = pStory->GetHyperlinkMgr(); + if (pHyperlink->GetHyperlinkFlag()) + LwpFrib::ConvertHyperLink(pXFPara,pHyperlink,GetText()); + else + LwpFrib::ConvertChars(pXFPara,GetText()); +} + +/** + * @short: Reading mothed of paranumber frib. + * @param: pObjStrm wordpro object stream. + * @param: len length of the frib + */ +void LwpFribParaNumber::Read(LwpObjectStream* pObjStrm, sal_uInt16 len) +{ + pObjStrm->QuickRead(&m_nStyleID, sizeof(m_nStyleID)); + pObjStrm->QuickRead(&m_nNumberChar, sizeof(m_nNumberChar)); + pObjStrm->QuickRead(&m_nLevel, sizeof(m_nLevel)); + pObjStrm->QuickRead(&m_nStart, sizeof(m_nStart)); +} + +/** + * @short: default constructor of LwpFribDocVar + */ +LwpFribDocVar::LwpFribDocVar(LwpPara* pPara) + : LwpFrib(pPara), m_nType(0), m_pName(new LwpAtomHolder) +{ +} +/** + * @short: destructor of LwpFribDocVar + */ +LwpFribDocVar::~LwpFribDocVar() +{ + if (m_pName) + { + delete m_pName; + m_pName = NULL; + } +} +/** + * @short: Reading mothed of document variable frib. + * @param: pObjStrm wordpro object stream. + * @param: len length of the frib + */ +void LwpFribDocVar::Read(LwpObjectStream* pObjStrm, sal_uInt16 len) +{ + pObjStrm->QuickRead(&m_nType, sizeof(m_nType)); + m_pName->Read(pObjStrm); +} + +/** + * @short: register style for doc field (text style,date style) + * @param: + * @param: + */ +void LwpFribDocVar::RegisterStyle(LwpFoundry* pFoundry) +{ + LwpFrib::RegisterStyle(pFoundry); + + switch(m_nType) + { + case DATECREATED: + case DATELASTREVISION: + { +// m_TimeStyle = LwpTools::RegisterDefaultTimeStyle(); + RegisterDefaultTimeStyle(); + } + break; + case TOTALEDITTIME: + RegisterTotalTimeStyle(); + break; + default: + break; + } +} + +/** + * @short: register default time style for doc field + * @param: + * @param: + */ +void LwpFribDocVar::RegisterDefaultTimeStyle() +{ + XFDateStyle* pDateStyle = new XFDateStyle;//use the default format + + pDateStyle->AddMonth(); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddMonthDay(); + pDateStyle->AddText(A2OUSTR("/")); + pDateStyle->AddYear(); + pDateStyle->AddText(A2OUSTR(",")); + pDateStyle->AddHour(); + pDateStyle->AddText(A2OUSTR(":")); + pDateStyle->AddMinute(); + pDateStyle->AddText(A2OUSTR(":")); + pDateStyle->AddSecond(sal_True,0); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_TimeStyle = pXFStyleManager->AddStyle(pDateStyle)->GetStyleName(); +} +void LwpFribDocVar::RegisterTotalTimeStyle() +{ + XFTimeStyle* pTimeStyle = new XFTimeStyle;//use the default format + pTimeStyle->SetTruncate(sal_False); + pTimeStyle->AddMinute(); + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_TimeStyle = pXFStyleManager->AddStyle(pTimeStyle)->GetStyleName(); +} + +/** + * @short: convert the doc info field + * @param: + * @param: + */ +void LwpFribDocVar::XFConvert(XFContentContainer* pXFPara) +{ + XFContent* pContent=NULL; + switch(m_nType) + { + case FILENAME: + { + pContent = new XFFileName; + static_cast<XFFileName*>(pContent)->SetType(A2OUSTR("FileName")); + break; + } + case PATH: + { + pContent = new XFFileName; + static_cast<XFFileName*>(pContent)->SetType(A2OUSTR("Path")); + break; + } + case DESCRIPTION: + pContent = new XFDescription; + break; + case DATECREATED: + { + pContent = new XFCreateTime; + pContent->SetStyleName(m_TimeStyle); + break; + } + case DATELASTREVISION: + { + pContent = new XFLastEditTime; + pContent->SetStyleName(m_TimeStyle); + break; + } + case NUMPAGES: + pContent = new XFPageCount; + break; + case NUMWORDS: + pContent = new XFWordCount; + break; + case NUMCHARS: + pContent = new XFCharCount; + break; + case TOTALEDITTIME: + { + pContent = new XFTotalEditTime; + pContent->SetStyleName(m_TimeStyle); + break; + } + case KEYWORDS: + pContent = new XFKeywords; + break; + case CREATEDBY: + pContent = new XFInitialCreator; + break; + case DOCSIZE: + { +/* pContent = new XFAnnotation; + XFTextContent* pSpan = new XFTextContent(); + pSpan->SetText(A2OUSTR("Document Size is Here")); + XFParagraph* pPara = new XFParagraph; + pPara->Add(pSpan); + static_cast<XFAnnotation*>(pContent)->Add(pPara); + break; +*/ + OUString text = A2OUSTR("<Document Size>"); + LwpFrib::ConvertChars(pXFPara,text); + return; + } + case SMARTMASTER: + { + OUString text = A2OUSTR("<Smart master>"); + LwpFrib::ConvertChars(pXFPara,text); + return; + } + case DIVISIONNAME: + { + OUString text = A2OUSTR("<Division name>"); + LwpFrib::ConvertChars(pXFPara,text); + return; + } + case SECTIONNAME: + { + OUString text = A2OUSTR("<Section name>"); + LwpFrib::ConvertChars(pXFPara,text); + return; + } + case VERSIONCREATEBY: + { + OUString text = A2OUSTR("<Version Creat by>"); + LwpFrib::ConvertChars(pXFPara,text); + return; + } + case VERSIONCREATEDATE: + { + OUString text = A2OUSTR("<Version Creat date>"); + LwpFrib::ConvertChars(pXFPara,text); + return; + } + case VERSIONOTHEREDITORS: + { + OUString text = A2OUSTR("<Version other Editors>"); + LwpFrib::ConvertChars(pXFPara,text); + return; + } + case VERSIONNAME: + { + OUString text = A2OUSTR("<Version Name>"); + LwpFrib::ConvertChars(pXFPara,text); + return; + } + case VERSIONNUMBER: + { + OUString text = A2OUSTR("<Version Numbers>"); + LwpFrib::ConvertChars(pXFPara,text); + return; + } + case ALLVERSIONNAME: + { + OUString text = A2OUSTR("<All Version Name>"); + LwpFrib::ConvertChars(pXFPara,text); + return; + } + case VERSIONREMARK: + { + OUString text = A2OUSTR("<Version Remark>"); + LwpFrib::ConvertChars(pXFPara,text); + return; + } + case DOCUMENTCATEGORY: + { + OUString text = A2OUSTR("<Document Category>"); + LwpFrib::ConvertChars(pXFPara,text); + return; + } + case VERSIONLASTDATE: + { + OUString text = A2OUSTR("<Version Last Modify Date>"); + LwpFrib::ConvertChars(pXFPara,text); + return; + } + case VERSIONLASTEDITOR: + { + OUString text = A2OUSTR("<Version Last Editor>"); + LwpFrib::ConvertChars(pXFPara,text); + return; + } + case LASTEDIT: + { + OUString text = A2OUSTR("<Last Editor>"); + LwpFrib::ConvertChars(pXFPara,text); + return; + } + case OTHEREDITORS: + { + OUString text = A2OUSTR("<Other Editors>"); + LwpFrib::ConvertChars(pXFPara,text); + return; + } + case NUMOFREVISION: + { + OUString text = A2OUSTR("<Number of Revision>"); + LwpFrib::ConvertChars(pXFPara,text); + return; + } + default: + return; + } + if (m_ModFlag)//(m_pModifiers) + { + XFTextSpan *pSpan = new XFTextSpan; + pSpan->SetStyleName(GetStyleName()); + pSpan->Add(pContent); + pXFPara->Add(pSpan); + } + else + pXFPara->Add(pContent); + +} +/** + * @short: Read unicode + * @param: + * @param: + */ +void LwpFribUnicode::Read(LwpObjectStream* pObjStrm, sal_uInt16 len) +{ + if(len>1) + { + rtl_TextEncoding rEncode; + + if (m_pModifiers && m_pModifiers->CodePage) + rEncode = LwpCharSetMgr::GetInstance()-> + GetTextCharEncoding(m_pModifiers->CodePage); + else + rEncode = LwpCharSetMgr::GetInstance()->GetTextCharEncoding(); + + LwpTools::QuickReadUnicode(pObjStrm, m_Content, len, rEncode); + + } + else + pObjStrm->SeekRel(len); +} + +void LwpFribUnicode::XFConvert(XFContentContainer* pXFPara,LwpStory* pStory) +{ + if (!pStory) + return; + LwpHyperlinkMgr* pHyperlink = pStory->GetHyperlinkMgr(); + if (pHyperlink->GetHyperlinkFlag()) + LwpFrib::ConvertHyperLink(pXFPara,pHyperlink,GetText()); + else + LwpFrib::ConvertChars(pXFPara,GetText()); +} + +/** + * @short: Read page number + * @param: + * @param: + */ +void LwpFribPageNumber::Read(LwpObjectStream* pObjStrm, sal_uInt16 len) +{ + m_nNumStyle = pObjStrm->QuickReaduInt16(); + m_aBefText.Read(pObjStrm); + m_aAfterText.Read(pObjStrm); + m_nStartNum = pObjStrm->QuickReaduInt16(); + m_nStartOnPage = pObjStrm->QuickReaduInt16(); + m_nFlag = pObjStrm->QuickReaduInt16(); +} + +void LwpFribPageNumber::XFConvert(XFContentContainer* pXFPara) +{ + if (m_nNumStyle == 0x0) + return; + XFPageNumber* pNum = new XFPageNumber; +// pNum->SetSelect(A2OUSTR("current")); + switch(m_nNumStyle) + { + case 0x01: + pNum->SetNumFmt(A2OUSTR("1")); + break; + case 0x02: + pNum->SetNumFmt(A2OUSTR("A")); + break; + case 0x03: + pNum->SetNumFmt(A2OUSTR("a")); + break; + case 0x04: + pNum->SetNumFmt(A2OUSTR("I")); + break; + case 0x05: + pNum->SetNumFmt(A2OUSTR("i")); + break; + } + OUString styleName = GetStyleName(); + if (m_aBefText.str().getLength()>0) + { + OUString textStr = m_aBefText.str(); + XFTextSpan *pBef = new XFTextSpan(textStr,styleName); + pXFPara->Add(pBef); + } + if (m_ModFlag)//(m_pModifiers) + { + XFTextSpan *pSpan = new XFTextSpan; + pSpan->SetStyleName(styleName); + pSpan->Add(pNum); + pXFPara->Add(pSpan); + } + else + pXFPara->Add(pNum); + if (m_aAfterText.str().getLength()>0) + { + OUString textStr = m_aAfterText.str(); + XFTextSpan *pAfter = new XFTextSpan(textStr,styleName); + pXFPara->Add(pAfter); + } +} diff --git a/lotuswordpro/source/filter/lwpfribtext.hxx b/lotuswordpro/source/filter/lwpfribtext.hxx new file mode 100644 index 000000000000..f07e76250c33 --- /dev/null +++ b/lotuswordpro/source/filter/lwpfribtext.hxx @@ -0,0 +1,230 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ +#ifndef _LWPFRIBTEXT_HXX_ +#define _LWPFRIBTEXT_HXX_ + +#include "lwpfrib.hxx" +#include "lwpstory.hxx" +class LwpFribText : public LwpFrib +{ +public: + LwpFribText( LwpPara* pPara, sal_Bool bNoUnicode=false); + ~LwpFribText(){}; + void Read(LwpObjectStream* pObjStrm, sal_uInt16 len); + void XFConvert(XFContentContainer* pXFPara,LwpStory* pStory); +private: + OUString m_Content; + sal_Bool m_bNoUnicode; +public: + OUString GetText(){return m_Content;} +}; + +class LwpFribHardSpace : public LwpFrib +{ +public: + LwpFribHardSpace( LwpPara* pPara ) : LwpFrib(pPara){}; + ~LwpFribHardSpace(){}; +}; + +class LwpFribSoftHyphen : public LwpFrib +{ +public: + LwpFribSoftHyphen( LwpPara* pPara ) : LwpFrib(pPara){}; + ~LwpFribSoftHyphen(){}; +}; + +//add by , 02/03/2005 +class LwpFribParaNumber : public LwpFrib +{ +public: + LwpFribParaNumber( LwpPara* pPara ) : LwpFrib(pPara), + m_nStyleID(0), m_nNumberChar(0), m_nLevel(1), m_nStart(0){}; + void Read(LwpObjectStream* pObjStrm, sal_uInt16 len); + + inline sal_uInt16 GetStyleID() const; + + inline sal_uInt16 GetNumberChar() const; + + inline sal_uInt16 GetLevel() const; + + inline sal_uInt16 GetStart() const; + +private: + sal_uInt16 m_nStyleID; + sal_uInt16 m_nNumberChar; + sal_uInt16 m_nLevel; + sal_uInt16 m_nStart; +}; +inline sal_uInt16 LwpFribParaNumber::GetStyleID() const +{ + return m_nStyleID; +} +inline sal_uInt16 LwpFribParaNumber::GetNumberChar() const +{ + return m_nNumberChar; +} +inline sal_uInt16 LwpFribParaNumber::GetLevel() const +{ + return m_nLevel; +} +inline sal_uInt16 LwpFribParaNumber::GetStart() const +{ + return m_nStart; +} + +class LwpFribDocVar : public LwpFrib +{ +public: + LwpFribDocVar( LwpPara* pPara ); + + ~LwpFribDocVar(); + + void Read(LwpObjectStream* pObjStrm, sal_uInt16 len); + + void RegisterStyle(LwpFoundry* pFoundry);//add by ,05/5/27 + + void XFConvert(XFContentContainer* pXFPara);//add by ,05/5/27 + +// inline sal_uInt16 GetType() const; + + enum { + FILENAME = 0x02, + PATH = 0x03, + SMARTMASTER = 0x04, + DESCRIPTION = 0x05, + DATECREATED = 0x06, + DATELASTREVISION = 0x07, + TOTALEDITTIME = 0x08, + NUMPAGES= 0x09, + NUMWORDS= 0x0a, + NUMCHARS = 0x0b, + DOCSIZE = 0x0c, + DIVISIONNAME = 0x0d, + SECTIONNAME = 0x0e, + VERSIONCREATEBY = 0x0f, + VERSIONCREATEDATE = 0x10, + VERSIONOTHEREDITORS = 0x11, + VERSIONNAME = 0x12, + VERSIONNUMBER = 0x13, + ALLVERSIONNAME = 0x14, + VERSIONREMARK = 0x15, + DOCUMENTCATEGORY = 0x16, + VERSIONLASTDATE = 0x17, + VERSIONLASTEDITOR = 0x18, + KEYWORDS = 0x19, + CREATEDBY = 0x1a, + LASTEDIT = 0x1b, + OTHEREDITORS = 0x1c, + NUMOFREVISION = 0x1d, + }; + +private: + sal_uInt16 m_nType; + LwpAtomHolder* m_pName; + OUString m_TimeStyle; + void RegisterDefaultTimeStyle(); + void RegisterTotalTimeStyle(); +}; +//inline sal_uInt16 LwpFribDocVar::GetType() const +//{ +// return m_nType; +//} + +class LwpFribTab : public LwpFrib +{ +public: + LwpFribTab( LwpPara* pPara ) : LwpFrib(pPara){}; + ~LwpFribTab(){}; +}; + +class LwpFribUnicode: public LwpFrib +{ +public: + LwpFribUnicode( LwpPara* pPara ) : LwpFrib(pPara){}; + ~LwpFribUnicode(){}; + void Read(LwpObjectStream* pObjStrm, sal_uInt16 len); + void XFConvert(XFContentContainer* pXFPara,LwpStory* pStory); +private: + OUString m_Content; +public: + OUString GetText(){return m_Content;} +}; + +class LwpFribPageNumber : public LwpFrib +{ +public: + LwpFribPageNumber(LwpPara* pPara) : LwpFrib(pPara), + m_nNumStyle(0), m_nStartNum(1), m_nStartOnPage(1), m_nFlag(0){}; + ~LwpFribPageNumber(){}; + void Read(LwpObjectStream* pObjStrm, sal_uInt16 len); + void XFConvert(XFContentContainer* pXFPara); +private: + sal_uInt16 m_nNumStyle; + LwpAtomHolder m_aBefText; + LwpAtomHolder m_aAfterText; + sal_uInt16 m_nStartNum; + sal_uInt16 m_nStartOnPage; + sal_uInt16 m_nFlag; +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpglobalmgr.cxx b/lotuswordpro/source/filter/lwpglobalmgr.cxx new file mode 100644 index 000000000000..803729e737c9 --- /dev/null +++ b/lotuswordpro/source/filter/lwpglobalmgr.cxx @@ -0,0 +1,166 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "lwpglobalmgr.hxx" +#ifndef _OSL_THREAD_H_ +#include <osl/thread.h> +#endif +std::map< sal_uInt32,LwpGlobalMgr* > LwpGlobalMgr::m_ThreadMap; +LwpGlobalMgr::LwpGlobalMgr(LwpSvStream* pSvStream) +{ + if (pSvStream) + m_pObjFactory = new LwpObjectFactory(pSvStream); + else + m_pObjFactory = NULL; + m_pBookmarkMgr = new LwpBookmarkMgr; + m_pChangeMgr = new LwpChangeMgr; + m_pXFFontFactory = new XFFontFactory; + m_pXFStyleManager = new XFStyleManager; +} + +LwpGlobalMgr::~LwpGlobalMgr() +{ + if (m_pObjFactory) + { + delete m_pObjFactory; + m_pObjFactory = NULL; + } + if (m_pBookmarkMgr) + { + delete m_pBookmarkMgr; + m_pBookmarkMgr = NULL; + } + if (m_pChangeMgr) + { + delete m_pChangeMgr; + m_pChangeMgr = NULL; + } + if (m_pXFFontFactory) + { + delete m_pXFFontFactory; + m_pXFFontFactory = NULL; + } + if (m_pXFStyleManager) + { + delete m_pXFStyleManager; + m_pXFStyleManager = NULL; + } + std::map<sal_uInt16,LwpEditorAttr*>::iterator iter; + for (iter =m_EditorAttrMap.begin();iter != m_EditorAttrMap.end(); iter++) + { + delete iter->second; + iter->second = NULL; + } + m_EditorAttrMap.clear(); +} + +LwpGlobalMgr* LwpGlobalMgr::GetInstance(LwpSvStream* pSvStream) +{ + sal_uInt32 nThreadID = osl_getThreadIdentifier((void*)0); + std::map< sal_uInt32,LwpGlobalMgr* >::iterator iter; + iter = m_ThreadMap.find(nThreadID); + if (iter == m_ThreadMap.end()) + { + LwpGlobalMgr* pInstance = new LwpGlobalMgr(pSvStream); + m_ThreadMap[nThreadID] = pInstance; + return pInstance; + } + else + return iter->second; +} + +void LwpGlobalMgr::DeleteInstance() +{ + sal_uInt32 nThreadID = osl_getThreadIdentifier((void*)0); + std::map< sal_uInt32,LwpGlobalMgr* >::iterator iter; + iter = m_ThreadMap.find(nThreadID); + if (iter != m_ThreadMap.end()) + { + delete iter->second; + iter->second = NULL; + m_ThreadMap.erase(iter); + } +} + +void LwpGlobalMgr::SetEditorAttrMap(sal_uInt16 nID, LwpEditorAttr* pAttr) +{ + m_EditorAttrMap[nID] = pAttr; +} + +rtl::OUString LwpGlobalMgr::GetEditorName(sal_uInt8 nID) +{ + std::map<sal_uInt16,LwpEditorAttr*>::iterator iter; + iter = m_EditorAttrMap.find(nID); + if (iter != m_EditorAttrMap.end()) + return iter->second->cName.str(); + return A2OUSTR(""); +} + +XFColor LwpGlobalMgr::GetHighLightColor(sal_uInt8 nID) +{ + std::map<sal_uInt16,LwpEditorAttr*>::iterator iter; + + iter = m_EditorAttrMap.find(nID); + if (iter != m_EditorAttrMap.end()) + { + LwpColor aLwpColor = iter->second->cHiLiteColor; + XFColor aColor(aLwpColor.GetRed(),aLwpColor.GetGreen(),aLwpColor.GetBlue()); + return aColor; + } + else + { + XFColor aColor(255,255,0);//yellow + return aColor; + } +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwpglobalmgr.hxx b/lotuswordpro/source/filter/lwpglobalmgr.hxx new file mode 100644 index 000000000000..95647b9d5ad8 --- /dev/null +++ b/lotuswordpro/source/filter/lwpglobalmgr.hxx @@ -0,0 +1,103 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Nov 2005 Created + ************************************************************************/ +#ifndef _LWPGLOBALMGR_HXX_ +#define _LWPGLOBALMGR_HXX_ + +#include <map> +#include "lwpheader.hxx" +#include "lwpsvstream.hxx" +#include "lwpobjfactory.hxx" +#include "lwpbookmarkmgr.hxx" +#include "lwpchangemgr.hxx" +#include "xfilter/xffontfactory.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "lwpdocdata.hxx" +#include "xfilter/xfcolor.hxx" + +class LwpGlobalMgr +{ +public: + ~LwpGlobalMgr(); + static LwpGlobalMgr* GetInstance(LwpSvStream* pSvStream=NULL); + static void DeleteInstance(); + LwpObjectFactory* GetLwpObjFactory(){return m_pObjFactory;} + LwpBookmarkMgr* GetLwpBookmarkMgr(){return m_pBookmarkMgr;} + LwpChangeMgr* GetLwpChangeMgr(){return m_pChangeMgr;} + XFFontFactory* GetXFFontFactory(){return m_pXFFontFactory;} + XFStyleManager* GetXFStyleManager(){return m_pXFStyleManager;} + void SetEditorAttrMap(sal_uInt16 nID, LwpEditorAttr* pAttr); + OUString GetEditorName(sal_uInt8 nID); + XFColor GetHighLightColor(sal_uInt8 nID); +private: + LwpGlobalMgr(LwpSvStream* pSvStream); +private: + static std::map< sal_uInt32,LwpGlobalMgr* > m_ThreadMap; + LwpObjectFactory* m_pObjFactory; + LwpBookmarkMgr* m_pBookmarkMgr; + LwpChangeMgr* m_pChangeMgr; + XFFontFactory* m_pXFFontFactory; + XFStyleManager* m_pXFStyleManager; + std::map< sal_uInt16,LwpEditorAttr* > m_EditorAttrMap; +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwpgrfobj.cxx b/lotuswordpro/source/filter/lwpgrfobj.cxx new file mode 100644 index 000000000000..341526a9272b --- /dev/null +++ b/lotuswordpro/source/filter/lwpgrfobj.cxx @@ -0,0 +1,841 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/***************************************************************************** +* Change History +* 2005/2 draft code for chart +****************************************************************************/ + +/** + * @file + * For LWP filter architecture prototype +*/ +#include <stdio.h> +#include "lwp9reader.hxx" +#include "lwpgrfobj.hxx" +#include "lwpsdwfileloader.hxx" +#include "bento.hxx" + +#include "lwpglobalmgr.hxx" +#include "xfilter/xfframe.hxx" +#include "xfilter/xfimage.hxx" +#include "xfilter/xfimagestyle.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xfparagraph.hxx" +#include "xfilter/xfannotation.hxx" + +//For chart +#include "string.h" +//#include "lwpchartstreamtools.hxx" + +#ifndef _OSL_THREAD_H_ +#include <osl/thread.h> +#endif + +#define EF_NONE 0x0000 +#define EF_FTP 0x0001 +#define EF_ODMA 0x0002 +#define EF_NOS 0x0003 + +LwpGraphicObject::LwpGraphicObject(LwpObjectHeader &objHdr, LwpSvStream* pStrm) +:LwpGraphicOleObject(objHdr, pStrm),m_bCompressed(0),m_bIsLinked(0),m_nCachedBaseLine(0) +{ +} +LwpGraphicObject::~LwpGraphicObject() +{ + m_vXFDrawObjects.clear(); +} +void LwpGraphicObject::Read() +{ + LwpGraphicOleObject::Read(); + sal_uInt16 disksize = m_pObjStrm->QuickReaduInt16(); + sal_uInt16 strsize = m_pObjStrm->QuickReaduInt16(); + if (strsize<AFID_MAX_FILE_FORMAT_SIZE) + { + m_pObjStrm->QuickRead(m_sDataFormat,strsize); + m_sDataFormat[strsize] = '\0'; + } +/* + if (m_sDataFormat!=(unsigned char*)(".lch")) + { + return; + } +*/ + sal_uInt32 nServerContextSize = m_pObjStrm->QuickReaduInt32(); + unsigned char *pServerContext = NULL; + if (nServerContextSize > 0) + { + pServerContext = new unsigned char[nServerContextSize]; + m_pObjStrm->QuickRead(pServerContext, static_cast<sal_uInt16>(nServerContextSize)); + // add by , 04/05/2005 + if (nServerContextSize > 44) + { + m_aIPData.nBrightness = pServerContext[14]; + m_aIPData.nContrast = pServerContext[19]; + m_aIPData.nEdgeEnchancement = pServerContext[24]; + m_aIPData.nSmoothing = pServerContext[29]; + m_aIPData.bInvertImage = (sal_Bool)(pServerContext[34] == 0x01); + m_aIPData.bAutoContrast = (sal_Bool)(pServerContext[44] == 0x00); + } + // end add + } + disksize = m_pObjStrm->QuickReaduInt16(); + strsize = m_pObjStrm->QuickReaduInt16(); + if (strsize<AFID_MAX_FILE_FORMAT_SIZE) + { + m_pObjStrm->QuickRead(m_sServerContextFormat,strsize); + m_sServerContextFormat[strsize] = '\0'; + } + if (nServerContextSize == 0) + { + if (strcmp((char *)m_sServerContextFormat, ".cht") == 0 && + strcmp((char *)m_sDataFormat, ".sdw") == 0) + { + strcpy((char *)m_sServerContextFormat, ".lch"); + strcpy((char *)m_sDataFormat, ".lch"); + } + } + m_nCachedBaseLine = m_pObjStrm->QuickReadInt32(); + m_bIsLinked = m_pObjStrm->QuickReadInt16(); + //OUString pLinkedFilePath; + unsigned char * pFilterContext = NULL; + sal_uInt32 nFilterContextSize = 0; + + if (m_bIsLinked) + { + m_LinkedFilePath = m_pObjStrm->QuickReadStringPtr(); + + nFilterContextSize = m_pObjStrm->QuickReaduInt32(); + if (nFilterContextSize > 0) + { + pFilterContext = new unsigned char[nFilterContextSize]; + m_pObjStrm->QuickRead(pFilterContext, static_cast<sal_uInt16>(nFilterContextSize)); + } + if (LwpFileHeader::m_nFileRevision >= 0x000b) + { + + // read external file object stuff + sal_uInt16 type = m_pObjStrm->QuickReaduInt16(); +// if (EF_ODMA == type) +// ; + if ((EF_ODMA != type) && (EF_NONE != type)) // don't know about this + { + sal_uInt32 size = m_pObjStrm->QuickReaduInt32(); + m_pObjStrm->SeekRel(static_cast<sal_uInt16>(size)); + } + // else no external file object + } + } + + if (LwpFileHeader::m_nFileRevision >= 0x000b) + { + m_bCompressed = m_pObjStrm->QuickReadInt16(); + m_Cache.LinkedFileSize = m_pObjStrm->QuickReaduInt32(); + m_Cache.LinkedFileTime = m_pObjStrm->QuickReaduInt32(); + m_Cache.Width = m_pObjStrm->QuickReadInt32(); + m_Cache.Height = m_pObjStrm->QuickReadInt32(); + } + + if(LwpFileHeader::m_nFileRevision >= 0x000c) + { + m_WatermarkName = m_pObjStrm->QuickReadStringPtr(); + } + + if (pServerContext != NULL) + delete[] pServerContext; + + if (pFilterContext != NULL) + delete[] pFilterContext; + +} + +void LwpGraphicObject::XFConvert (XFContentContainer* pCont) +{ + if ((m_sServerContextFormat[1]=='s'&&m_sServerContextFormat[2]=='d'&&m_sServerContextFormat[3]=='w')) + { +/* LwpSvStream* pStream = m_pStrm; + //test code + OpenStormBento::LtcBenContainer* pBentoContainer; + ULONG ulRet = OpenStormBento::BenOpenContainer(pStream, &pBentoContainer); + std::vector<SvStream*> vStream; + std::vector<SvStream*>::iterator iter; + pBentoContainer->CreateGraphicStreams(&vStream); + for (iter=vStream.begin();iter!=vStream.end();iter++) + { + LwpSdwFileLoader fileLoader(*iter,pOutputStream); + fileLoader.LoadObjectList(); + delete *iter; + } + vStream.clear();*/ + + //XFParagraph* pPara = new XFParagraph(); + std::vector <XFFrame*>::iterator iter; + for (iter = m_vXFDrawObjects.begin(); iter != m_vXFDrawObjects.end(); iter++) + { + //pPara->Add(*iter); + pCont->Add(*iter); + } + + //pCont->Add(pPara); + + } + else if (this->IsGrafFormatValid()) + { + XFImage* pImage = static_cast<XFImage*>(m_vXFDrawObjects.front()); + + if (m_bIsLinked) + { + OUString fileURL = LwpTools::convertToFileUrl(OUStringToOString(m_LinkedFilePath, osl_getThreadTextEncoding())); + pImage->SetFileURL(fileURL); + } + else + { + sal_uInt8* pGrafData = NULL; + sal_uInt32 nDataLen = this->GetRawGrafData(pGrafData); + + if (pGrafData) + { + pImage->SetImageData(pGrafData, nDataLen); + + // delete used image data + delete [] pGrafData; + pGrafData = NULL; + } + } + + pCont->Add(pImage); + } + else if((m_sServerContextFormat[1]=='t'&&m_sServerContextFormat[2]=='e'&&m_sServerContextFormat[3]=='x')) + { + XFConvertEquation(pCont); + } + if (m_sServerContextFormat[1]=='l'&&m_sServerContextFormat[2]=='c'&&m_sServerContextFormat[3]=='h') + { + LwpSvStream* pDocStream = m_pStrm; + //LwpChartStreamTools::ParseChart(pDocStream, GetObjectID(), + // GetRectIn100thMM(), GetRectInCM(), pOutputStream); + //LwpChartStreamTools::ParseChart(pDocStream, GetObjectID(), + // GetRectIn100thMM(), GetRectInCM(), pCont, m_strStyleName); + } +} + +/** +* @short Get the rectangle of a chart in 100thMM +* @descr +* @return the rectangle of the chart +*/ +Rectangle LwpGraphicObject::GetRectIn100thMM() +{ +#define To100thMM(num) (long)(2540* (double(num)/(72 * 65536L))) + INT32 nLeft,nTop,nRight,nBottom; + GetRect(nLeft,nTop,nRight,nBottom); + return Rectangle( To100thMM(nLeft),To100thMM(nTop),To100thMM(nRight),To100thMM(nBottom) ); +} + +/** +* @short Get the rectangle of a chart in CM +* @descr +* @return The rectangle of the chart +*/ +XFRect LwpGraphicObject::GetRectInCM() +{ +#define ToCM(num) (2.54*(double(num)/(72 * 65536L))) + INT32 nLeft,nTop,nRight,nBottom; + GetRect(nLeft,nTop,nRight,nBottom); + return XFRect( ToCM(nLeft),ToCM(nTop),ToCM(nRight-nLeft),ToCM(nBottom-nTop) ); +} + +/** +* @short Get the rectangle of a chart +* @descr +* @param nLeft +* @param nTop +* @param nRight +* @param nBottom +*/ +#include "lwpframelayout.hxx" +void LwpGraphicObject::GetRect(INT32& nLeft, INT32& nTop, INT32& nRight, INT32& nBottom) +{ + nLeft = nTop = nRight = nBottom = 0; + + LwpObjectID* pObjID = GetLayoutsWithMe()->GetOnlyLayout(); + if (pObjID) + { + LwpFrameLayout* pLayout = (LwpFrameLayout*)pObjID->obj(); + if (pLayout) + { + LwpLayoutGeometry* pGeometry =(LwpLayoutGeometry*) pLayout->GetGeometry(); + + if (pGeometry) + { + LwpPoint aOrigin = pGeometry->GetOrigin(); +// 2005.6 +//frame width/height are not width/height of a chart +// sal_Int32 nWidth = pGeometry->GetWidth(); +// sal_Int32 nHeight = pGeometry->GetHeight(); + double fWidth =0; + double fHeight = 0; + GetGrafScaledSize(fWidth, fHeight); + + sal_Int32 nWidth = fWidth * UNITS_PER_INCH /CM_PER_INCH; + sal_Int32 nHeight = fHeight * UNITS_PER_INCH /CM_PER_INCH; +//end + nLeft = pLayout->GetMarginsValue(MARGIN_LEFT) * UNITS_PER_INCH /CM_PER_INCH; + nTop = pLayout->GetMarginsValue(MARGIN_TOP)* UNITS_PER_INCH /CM_PER_INCH; + nRight = nLeft+nWidth; + nBottom = nTop+nHeight; + } + } + } +} + +/** + * @descr judge if the graphic format is what we can support: bmp, jpg, wmf, gif, tgf(tif). other format will be filtered to + * these formats by Word Pro. + * @return sal_True if yes sal_False if not. + */ +sal_Bool LwpGraphicObject::IsGrafFormatValid() +{ + if ((m_sServerContextFormat[1]=='b'&& m_sServerContextFormat[2]=='m' && m_sServerContextFormat[3]=='p') + || (m_sServerContextFormat[1]=='j' && m_sServerContextFormat[2]=='p' && m_sServerContextFormat[3]=='g') + || (m_sServerContextFormat[1]=='w' && m_sServerContextFormat[2]=='m' && m_sServerContextFormat[3]=='f') + || (m_sServerContextFormat[1]=='g' && m_sServerContextFormat[2]=='i' && m_sServerContextFormat[3]=='f') + || (m_sServerContextFormat[1]=='t' && m_sServerContextFormat[2]=='g' && m_sServerContextFormat[3]=='f') + || (m_sServerContextFormat[1]=='p' && m_sServerContextFormat[2]=='n' && m_sServerContextFormat[3]=='g') + || (m_sServerContextFormat[1]=='e' && m_sServerContextFormat[2]=='p' && m_sServerContextFormat[3]=='s')) + { + return sal_True; + } + else + { + return sal_False; + } +} + +/** + * @descr create drawing object and image object. + */ +void LwpGraphicObject::RegisterStyle() +{ + if (m_sServerContextFormat[1]=='s'&&m_sServerContextFormat[2]=='d'&&m_sServerContextFormat[3]=='w') + { + this->CreateDrawObjects(); + } + // test codes for importing pictures + else if(this->IsGrafFormatValid()) + { + this->CreateGrafObject(); + } +/* if (m_sServerContextFormat[1]=='s'&&m_sServerContextFormat[2]=='d'&&m_sServerContextFormat[3]=='w') + { + LwpSvStream* pStream = m_pStrm; + //test code + OpenStormBento::LtcBenContainer* pBentoContainer; + ULONG ulRet = OpenStormBento::BenOpenContainer(pStream, &pBentoContainer); + std::vector<SvStream*> vStream; + std::vector<SvStream*>::iterator iter; + pBentoContainer->CreateGraphicStreams(&vStream); + for (iter=vStream.begin();iter!=vStream.end();iter++) + { + LwpSdwFileLoader fileLoader(*iter); + fileLoader.RegisterStyle(); + delete *iter; + } + vStream.clear(); + + }*/ + if (m_sServerContextFormat[1]=='l'&&m_sServerContextFormat[2]=='c'&&m_sServerContextFormat[3]=='h') + { + LwpVirtualLayout* pMyLayout = GetLayout(NULL); + if(pMyLayout->IsFrame()) + { + XFFrameStyle* pXFFrameStyle = new XFFrameStyle(); + pXFFrameStyle->SetXPosType(enumXFFrameXPosFromLeft, enumXFFrameXRelFrame); + pXFFrameStyle->SetYPosType(enumXFFrameYPosFromTop, enumXFFrameYRelPara); + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_strStyleName = pXFStyleManager->AddStyle(pXFFrameStyle)->GetStyleName(); + } + } + +} + +// add by , 03/25/2005 +/** + * @descr create drawing object. + */ +void LwpGraphicObject::CreateDrawObjects() +{ + // if small file, use the compressed stream for BENTO + LwpSvStream* pStream = m_pStrm->GetCompressedStream() ? m_pStrm->GetCompressedStream(): m_pStrm; + + OpenStormBento::LtcBenContainer* pBentoContainer; + ULONG ulRet = OpenStormBento::BenOpenContainer(pStream, &pBentoContainer); + SvStream* pDrawObjStream = NULL; + + // get graphic object's bento objet name + LwpObjectID* pMyID = this->GetObjectID(); + std::string aGrfObjName; + this->GetBentoNamebyID(pMyID, aGrfObjName); + + // get bento stream by the name + pBentoContainer->CreateGraphicStream(pDrawObjStream, aGrfObjName.c_str()); + if (pDrawObjStream) + { + LwpSdwFileLoader fileLoader(pDrawObjStream, this); + fileLoader.CreateDrawObjects(&m_vXFDrawObjects); + + delete pDrawObjStream; + pDrawObjStream = NULL; + } +} + +/** + * @descr create drawing object. + */ +void LwpGraphicObject::GetBentoNamebyID(LwpObjectID* pMyID, std::string& rName) +{ + sal_uInt16 nHigh = pMyID->GetHigh(); + sal_uInt32 nLow = pMyID->GetLow(); + char pTempStr[32]; + rName = std::string("Gr"); + sprintf(pTempStr, "%X,%lX", nHigh, nLow); + rName.append(pTempStr); +} + +/** + * @descr get the image data read from bento stream according to the VO_GRAPHIC ID. + * @param pGrafData the array to store the image data. the pointer need to be deleted outside. + * @return the length of the image data. + */ +sal_uInt32 LwpGraphicObject::GetRawGrafData(sal_uInt8*& pGrafData) +{ + // create graphic object + // if small file, use the compressed stream for BENTO + LwpSvStream* pStream = m_pStrm->GetCompressedStream() ? m_pStrm->GetCompressedStream(): m_pStrm; + + OpenStormBento::LtcBenContainer* pBentoContainer; + ULONG ulRet = OpenStormBento::BenOpenContainer(pStream, &pBentoContainer); + SvStream* pGrafStream = NULL; + + // get graphic object's bento objet name + LwpObjectID* pMyID = this->GetObjectID(); + std::string aGrfObjName; + this->GetBentoNamebyID(pMyID, aGrfObjName); + + // get bento stream by the name + pBentoContainer->CreateGraphicStream(pGrafStream, aGrfObjName.c_str()); + SvMemoryStream* pMemGrafStream = static_cast<SvMemoryStream*>(pGrafStream); + + if (pMemGrafStream) + { + // read image data + sal_uInt32 nDataLen = pMemGrafStream->GetEndOfData(); + pGrafData = new sal_uInt8 [nDataLen]; + pMemGrafStream->Read(pGrafData, nDataLen); + + delete pMemGrafStream; + pMemGrafStream = NULL; + + return nDataLen; + } + + return 0; +} + +/** + * @descr get the image data (only -D dara) read from bento stream according to the VO_GRAPHIC ID. + * @param pGrafData the array to store the image data. the pointer need to be deleted outside. + * @return the length of the image data. + */ +sal_uInt32 LwpGraphicObject::GetGrafData(sal_uInt8*& pGrafData) +{ + // create graphic object + // if small file, use the compressed stream for BENTO + LwpSvStream* pStream = m_pStrm->GetCompressedStream() ? m_pStrm->GetCompressedStream(): m_pStrm; + + OpenStormBento::LtcBenContainer* pBentoContainer; + ULONG ulRet = OpenStormBento::BenOpenContainer(pStream, &pBentoContainer); + + SvStream* pGrafStream = NULL; + + // get graphic object's bento objet name + LwpObjectID* pMyID = this->GetObjectID(); + std::string aGrfObjName; + this->GetBentoNamebyID(pMyID, aGrfObjName); + + char sDName[64]=""; + sprintf(sDName, "%s-D", aGrfObjName.c_str()); + + // get bento stream by the name + pGrafStream = pBentoContainer->FindValueStreamWithPropertyName(sDName); + + SvMemoryStream* pMemGrafStream = static_cast<SvMemoryStream*>(pGrafStream); + + if (pMemGrafStream) + { + // read image data + UINT32 nPos = pGrafStream->Tell(); + pGrafStream->Seek(STREAM_SEEK_TO_END); + sal_uInt32 nDataLen = pGrafStream->Tell(); + pGrafStream->Seek(nPos); + + pGrafData = new sal_uInt8 [nDataLen]; + pMemGrafStream->Read(pGrafData, nDataLen); + + delete pMemGrafStream; + pMemGrafStream = NULL; + + return nDataLen; + } + + return 0; +} + + +/** + * @descr create xf-image object and save it in the container: m_vXFDrawObjects. + */ +void LwpGraphicObject::CreateGrafObject() +{ + + XFImage* pImage = new XFImage(); + + // set image processing styles + XFImageStyle* pImageStyle = new XFImageStyle(); + if (m_sServerContextFormat[1]!='w' || m_sServerContextFormat[2]!='m' || m_sServerContextFormat[3]!='f') + { + if (m_aIPData.nBrightness != 50) + { + sal_Int32 nSODCBrightness = (sal_Int32)m_aIPData.nBrightness*2 - 100; + pImageStyle->SetBrightness(nSODCBrightness); + } + if (m_aIPData.nContrast != 50) + { + //sal_Int32 nSODCContrast = (sal_Int32)m_aIPData.nContrast*2 - 100; + //lwp [0, 100] map to sodc [80, -80] + sal_Int32 nSODCContrast = (sal_Int32)(80 - (double)m_aIPData.nContrast*1.6); + pImageStyle->SetContrast(nSODCContrast); + } + } + + // set scale and crop styles + LwpAssociatedLayouts* pLayoutWithMe = GetLayoutsWithMe(); + LwpFrameLayout* pMyFrameLayout = + static_cast<LwpFrameLayout*>(pLayoutWithMe->GetOnlyLayout()->obj(VO_FRAMELAYOUT)); + if (pMyFrameLayout) + { + LwpLayoutScale* pMyScale = pMyFrameLayout->GetLayoutScale(); + LwpLayoutGeometry* pFrameGeo = pMyFrameLayout->GetGeometry(); + + // original image size + double fOrgGrafWidth = (double)m_Cache.Width/TWIPS_PER_CM; + double fOrgGrafHeight = (double)m_Cache.Height/TWIPS_PER_CM; + + // get margin values + double fLeftMargin = pMyFrameLayout->GetMarginsValue(MARGIN_LEFT); + double fRightMargin = pMyFrameLayout->GetMarginsValue(MARGIN_RIGHT); + double fTopMargin = pMyFrameLayout->GetMarginsValue(MARGIN_TOP); + double fBottomMargin = pMyFrameLayout->GetMarginsValue(MARGIN_BOTTOM); + + if (pMyScale && pFrameGeo) + { + // frame size + double fFrameWidth = LwpTools::ConvertFromUnitsToMetric(pFrameGeo->GetWidth()); + double fFrameHeight = LwpTools::ConvertFromUnitsToMetric(pFrameGeo->GetHeight()); + + // calculate the displayed size of the frame + double fDisFrameWidth = fFrameWidth - (fLeftMargin+fRightMargin); + double fDisFrameHeight = fFrameHeight - (fTopMargin+fBottomMargin); + + // scaled image size + double fSclGrafWidth = fOrgGrafWidth;//LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleWidth()); + double fSclGrafHeight = fOrgGrafHeight;//LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleHeight()); + + // get scale mode + sal_uInt16 nScalemode = pMyScale->GetScaleMode(); + if (nScalemode & LwpLayoutScale::CUSTOM) + { + fSclGrafWidth = LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleWidth()); + fSclGrafHeight = LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleHeight()); + } + else if (nScalemode & LwpLayoutScale::PERCENTAGE) + { + double fScalePercentage = (double)pMyScale->GetScalePercentage() / 1000; + fSclGrafWidth = fScalePercentage * fOrgGrafWidth; + fSclGrafHeight = fScalePercentage * fOrgGrafHeight; + } + else if (nScalemode & LwpLayoutScale::FIT_IN_FRAME) + { + if (pMyFrameLayout->IsFitGraphic()) + { + fSclGrafWidth = fOrgGrafWidth; + fSclGrafHeight = fOrgGrafHeight; + } + else if (nScalemode & LwpLayoutScale::MAINTAIN_ASPECT_RATIO) + { + if (fOrgGrafWidth/fOrgGrafHeight >= fDisFrameWidth/fDisFrameHeight) + { + fSclGrafWidth = fDisFrameWidth; + fSclGrafHeight = (fDisFrameWidth/fOrgGrafWidth) * fOrgGrafHeight; + } + else + { + fSclGrafHeight = fDisFrameHeight; + fSclGrafWidth = (fDisFrameHeight/fOrgGrafHeight) * fOrgGrafWidth; + } + } + else + { + fSclGrafWidth = fDisFrameWidth; + fSclGrafHeight = fDisFrameHeight; + } + } + + // scaled ratio + double fXRatio = fSclGrafWidth / fOrgGrafWidth; + double fYRatio = fSclGrafHeight / fOrgGrafHeight; + + // set image to scaled size. + pImage->SetWidth(fSclGrafWidth); + pImage->SetHeight(fSclGrafHeight); + + // placement:centered or tiled. tiled style is not supported so it's processed together with centered. + if (pMyFrameLayout->GetScaleCenter() || pMyFrameLayout->GetScaleTile()) + { + // set center alignment + pImageStyle->SetXPosType(enumXFFrameXPosCenter, enumXFFrameXRelFrame); + pImageStyle->SetYPosType(enumXFFrameYPosMiddle, enumXFFrameYRelFrame); + + // need horizontal crop? + double fClipWidth = 0; + double fClipHeight = 0; + sal_Bool sal_bCropped = sal_False; + if (fSclGrafWidth > fDisFrameWidth) + { + fClipWidth = (fSclGrafWidth-fDisFrameWidth ) / 2 / fXRatio; + sal_bCropped = sal_True; + } + + // need vertical crop? + if (fSclGrafHeight > fDisFrameHeight) + { + fClipHeight = (fSclGrafHeight-fDisFrameHeight ) / 2 / fYRatio; + sal_bCropped = sal_True; + } + + if (sal_bCropped) + { + pImageStyle->SetClip(fClipWidth, fClipWidth, fClipHeight, fClipHeight); + pImage->SetWidth(fDisFrameWidth); + pImage->SetHeight(fDisFrameHeight); + } + } + // placement:automatic + else + { + // set left-top alignment +// pImageStyle->SetXPosType(enumXFFrameXPosLeft, enumXFFrameXRelFrame); +// pImageStyle->SetYPosType(enumXFFrameYPosTop, enumXFFrameYRelFrame); + pImageStyle->SetYPosType(enumXFFrameYPosFromTop, enumXFFrameYRelFrame); + pImageStyle->SetXPosType(enumXFFrameXPosFromLeft, enumXFFrameXRelFrame); + + // get image position offset + LwpPoint* pOffset = pMyScale->GetOffset(); + double fOffsetX = LwpTools::ConvertFromUnitsToMetric(pOffset->GetX()); + double fOffsetY = LwpTools::ConvertFromUnitsToMetric(pOffset->GetY()); + + struct LwpRect + { + double fLeft; + double fRight; + double fTop; + double fBottom; + + LwpRect() + { + fLeft = 0.00; + fRight = 0.00; + fTop = 0.00; + fBottom = 0.00; + } + LwpRect(double fL, double fR, double fT, double fB) + { + fLeft = fL; + fRight = fR; + fTop = fT; + fBottom = fB; + } + }; + LwpRect aFrameRect(-fOffsetX, (fDisFrameWidth-fOffsetX), (-fOffsetY), ((fDisFrameHeight-fOffsetY))); + LwpRect aImageRect(0, fSclGrafWidth, 0, fSclGrafHeight); + LwpRect aCropRect; + + if (aFrameRect.fRight <= aImageRect.fLeft || aFrameRect.fLeft >= aImageRect.fRight + ||aFrameRect.fBottom <= aImageRect.fTop|| aFrameRect.fTop >= aImageRect.fBottom) + { + // display blank + } + else// need cropped + { + // horizontal crop + if (aFrameRect.fLeft > aImageRect.fLeft) + { + aCropRect.fLeft = (aFrameRect.fLeft - aImageRect.fLeft) / fXRatio; + } + + if (aFrameRect.fRight < aImageRect.fRight) + { + aCropRect.fRight = (aImageRect.fRight - aFrameRect.fRight) / fXRatio; + } + + // vertical crop + if (aFrameRect.fTop > aImageRect.fTop) + { + aCropRect.fTop = (aFrameRect.fTop - aImageRect.fTop) / fYRatio; + } + if (aFrameRect.fBottom < aImageRect.fBottom) + { + aCropRect.fBottom = (aImageRect.fBottom - aFrameRect.fBottom) / fYRatio; + } + + pImageStyle->SetClip(aCropRect.fLeft, aCropRect.fRight, aCropRect.fTop, aCropRect.fBottom); + double fPicWidth = fSclGrafWidth - (aCropRect.fLeft+aCropRect.fRight)*fXRatio; + double fPicHeight = fSclGrafHeight- (aCropRect.fTop+aCropRect.fBottom)*fYRatio; + double fX = fOffsetX > 0 ? fOffsetX : 0.00; + double fY = fOffsetY > 0 ? fOffsetY : 0.00; + pImage->SetPosition((fX+fLeftMargin), (fY+fTopMargin), fPicWidth, fPicHeight); + } + } + } + } + + // set style for the image + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + pImage->SetStyleName(pXFStyleManager->AddStyle(pImageStyle)->GetStyleName()); + + // set archor to frame + pImage->SetAnchorType(enumXFAnchorFrame); +// pImage->SetAnchorType(enumXFAnchorPara);//enumXFAnchorFrame); + + // set object name + LwpAtomHolder* pHolder = this->GetName(); + if ( pHolder && pHolder->str().getLength() ) + { + pImage->SetName(pHolder->str()); + } + + // insert image object into array + m_vXFDrawObjects.push_back(pImage); + +} +// end add + +/** + * @descr Reserve the equation text in a note in the context. + */ +void LwpGraphicObject::XFConvertEquation(XFContentContainer * pCont) +{ + sal_uInt8* pGrafData = NULL; + sal_uInt32 nDataLen = this->GetGrafData(pGrafData); + if(pGrafData) + { + //convert equation + XFParagraph* pXFPara = new XFParagraph; + pXFPara->Add(A2OUSTR("Formula:")); + //add notes + XFAnnotation* pXFNote = new XFAnnotation; + //add equation to comment notes + XFParagraph* pXFNotePara = new XFParagraph; + //equation header text: Times New Roman, + // 18,12,0,0,0,0,0. + // .TCIformat{2} + //total head length = 45 + sal_uInt32 nBegin = 45; + sal_uInt32 nEnd = nDataLen -1; + sal_uInt32 nIndex = 0; + + if(pGrafData[nEnd] == '$' && pGrafData[nEnd-1]!= '\\') + { + //equation body is contained by '$'; + nBegin++; + nEnd--; + } + + if(nEnd >= nBegin) + { + sal_uInt8* pEquData = new sal_uInt8[nEnd - nBegin + 1]; + for(nIndex = 0; nIndex < nEnd - nBegin +1 ; nIndex++) + { + pEquData[nIndex] = pGrafData[nBegin + nIndex]; + } + pXFNotePara->Add(rtl::OUString((sal_Char*)pEquData, (nEnd - nBegin + 1), gsl_getSystemTextEncoding())); + delete pEquData; + } + pXFNote->Add(pXFNotePara); + + pXFPara->Add(pXFNote); + pCont->Add(pXFPara); + + delete [] pGrafData; + pGrafData = NULL; + } + +} + +void LwpGraphicObject::GetGrafOrgSize(double & rWidth, double & rHeight) +{ + // original image size + rWidth = (double)m_Cache.Width/TWIPS_PER_CM; + rHeight = (double)m_Cache.Height/TWIPS_PER_CM; +} diff --git a/lotuswordpro/source/filter/lwpgrfobj.hxx b/lotuswordpro/source/filter/lwpgrfobj.hxx new file mode 100644 index 000000000000..176920edc0c4 --- /dev/null +++ b/lotuswordpro/source/filter/lwpgrfobj.hxx @@ -0,0 +1,140 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ + +#ifndef LWPGRFOBJECT_HXX_ +#define LWPGRFOBJECT_HXX_ + +#include "lwpoleobject.hxx" +#include "lwpheader.hxx" +#include "xfilter/xfrect.hxx" +#include <tools/gen.hxx> + +struct ImageProcessingData +{ + sal_uInt8 nBrightness; + sal_uInt8 nContrast; + sal_uInt8 nEdgeEnchancement; + sal_uInt8 nSmoothing; + sal_Bool bAutoContrast; + sal_Bool bInvertImage; + + ImageProcessingData() + { + nBrightness = 50; + nContrast = 50; + nEdgeEnchancement = 0; + nSmoothing = 0; + bAutoContrast = sal_False; + bInvertImage= sal_False; + } +}; + +class XFFrame; +class LwpGraphicObject : public LwpGraphicOleObject +{ +public: + LwpGraphicObject(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpGraphicObject(); +private: + unsigned char m_sDataFormat[AFID_MAX_FILE_FORMAT_SIZE]; + unsigned char m_sServerContextFormat[AFID_MAX_CONTEXT_FORMAT_SIZE]; + sal_Int32 m_nCachedBaseLine; + sal_Int16 m_bIsLinked; + AFID_CACHE m_Cache; + sal_Int16 m_bCompressed; + OUString m_WatermarkName; + OUString m_LinkedFilePath; + + ImageProcessingData m_aIPData; + + void GetRect(INT32& nLeft, INT32& nTop, INT32& nRight, INT32& nBottom); + XFRect GetRectInCM(); + Rectangle GetRectIn100thMM(); + void XFConvertEquation(XFContentContainer* pCont); + + void ParseChart(IXFStream* pOutputStream); + sal_Bool IsGrafFormatValid(); + // add by , 03/25/2005 + std::vector <XFFrame*> m_vXFDrawObjects; + // end add + +public: + //inline sal_uInt8* GetBuffer(){return m_DataBuffer;} + void Read(); + //Added by for XFConvert refactor, 03/31/2005 + virtual void XFConvert (XFContentContainer* pCont); + //End of Add + void RegisterStyle(); + + // add by , 03/25/2005 + void CreateDrawObjects(); + void CreateGrafObject(); + void GetBentoNamebyID(LwpObjectID* pMyID, std::string& rName); + sal_uInt32 GetRawGrafData(sal_uInt8*& pGrafData); + sal_uInt32 GetGrafData(sal_uInt8*& pGrafData); + void GetGrafOrgSize(long& rWidth, long& rHeight) { rWidth = m_Cache.Width; rHeight = m_Cache.Height; } + void GetGrafOrgSize(double& rWidth, double& rHeight); + // end add + + OUString GetWatermarkName(){ return m_WatermarkName;} + sal_Int16 IsLinked(){ return m_bIsLinked;} + OUString GetLinkedFilePath(){ return m_LinkedFilePath;} +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpheader.hxx b/lotuswordpro/source/filter/lwpheader.hxx new file mode 100644 index 000000000000..5e9487d9dac7 --- /dev/null +++ b/lotuswordpro/source/filter/lwpheader.hxx @@ -0,0 +1,84 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPHEADERS_HXX +#define _LWPHEADERS_HXX + +#include <math.h> +#include <vector> +#include <memory> +#include <hash_map> +#include <map> +#include <assert.h> +#include <string> + +#include <sal/types.h> +#include <tools/solar.h> +#include <sal/config.h> + +#include <rtl/ustring.hxx> +#include <tools/string.hxx> +#include <memory.h> + + +#endif diff --git a/lotuswordpro/source/filter/lwpholder.cxx b/lotuswordpro/source/filter/lwpholder.cxx new file mode 100644 index 000000000000..45a7738cdcad --- /dev/null +++ b/lotuswordpro/source/filter/lwpholder.cxx @@ -0,0 +1,118 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpholder.hxx" +#include "lwpfilehdr.hxx" + +LwpDLVListHeadHolder::LwpDLVListHeadHolder(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpObject(objHdr, pStrm) +{} +/** + * @descr read LwpDLVListHeadHolder from object stream +*/ +void LwpDLVListHeadHolder::Read() +{ + m_DLVHead.ReadIndexed(m_pObjStrm); + m_pObjStrm->SkipExtra(); +} + +LwpDLVListHeadTailHolder::LwpDLVListHeadTailHolder(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpObject(objHdr, pStrm) +{} +/** + * @descr read LwpDLVListHeadTailHolder from object stream +*/ +void LwpDLVListHeadTailHolder::Read() +{ + m_HeadTail.Read(m_pObjStrm); + //m_pObjStrm->SkipExtra(); +} + +LwpObjectHolder::LwpObjectHolder(LwpObjectHeader &objHdr, LwpSvStream *pStrm) + :LwpDLVList(objHdr, pStrm) +{} +/** + * @descr read LwpObjectHolder from object stream +*/ +void LwpObjectHolder::Read() +{ + LwpDLVList::Read(); + + m_Object.ReadIndexed(m_pObjStrm); + if( LwpFileHeader::m_nFileRevision < 0x0006 ) + m_pObjStrm->SkipExtra(); +} + +LwpListList::LwpListList(LwpObjectHeader &objHdr, LwpSvStream *pStrm) + :LwpObjectHolder(objHdr, pStrm) +{} +/** + * @descr read LwpListList from object stream +*/ +void LwpListList::Read() +{ + LwpObjectHolder::Read(); + + m_HeadTail.Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); +} diff --git a/lotuswordpro/source/filter/lwpholder.hxx b/lotuswordpro/source/filter/lwpholder.hxx new file mode 100644 index 000000000000..16867b490a24 --- /dev/null +++ b/lotuswordpro/source/filter/lwpholder.hxx @@ -0,0 +1,129 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * kinds of holder classes header file + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPDLVLISTHEADHOLDER_HXX_ +#define _LWPDLVLISTHEADHOLDER_HXX_ + +#include "lwpobj.hxx" +#include "lwpdlvlist.hxx" +/** + * @brief VO_HEADHOLDER, LwpDLVListHeadHolder, + * contains an id to the head of LwpDLVList +*/ +class LwpDLVListHeadHolder : public LwpObject +{ +public: + LwpDLVListHeadHolder(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + ~LwpDLVListHeadHolder(){}; + void Read(); + LwpObjectID* GetHeadID() { return &m_DLVHead;} +private: + LwpObjectID m_DLVHead; +}; +/** + * @brief VO_HEADTAILHOLDER, LwpDLVListHeadTailHolder, + * contains a LwpDLVListHeadTail (Head and tail id) +*/ +class LwpDLVListHeadTailHolder : public LwpObject +{ +public: + LwpDLVListHeadTailHolder(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + ~LwpDLVListHeadTailHolder(){}; + void Read(); + LwpObjectID* GetHead(){ return m_HeadTail.GetHead();} + LwpObjectID* GetTail(){ return m_HeadTail.GetTail();} +protected: + LwpDLVListHeadTail m_HeadTail; +}; +/** + * @brief LwpObjectHolder, which is LwpDLVList, contains an id to an object + * VO_OBJECTHOLDER +*/ +class LwpObjectHolder : public LwpDLVList +{ +public: + LwpObjectHolder(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + ~LwpObjectHolder(){}; + void Read(); + LwpObjectID* GetObject(){return &m_Object;} +protected: + LwpObjectID m_Object; +}; + +/** + * @brief VO_LISTLIST object in .lwp file + * + */ +class LwpListList : public LwpObjectHolder +{ +public: + LwpListList(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + ~LwpListList(){}; + void Read(); + LwpObjectID* GetHead(){ return m_HeadTail.GetHead();} + LwpObjectID* GetTail(){ return m_HeadTail.GetTail();} +protected: + LwpDLVListHeadTail m_HeadTail; +}; + +#endif diff --git a/lotuswordpro/source/filter/lwphyperlinkmgr.cxx b/lotuswordpro/source/filter/lwphyperlinkmgr.cxx new file mode 100644 index 000000000000..f2dc6b7cd084 --- /dev/null +++ b/lotuswordpro/source/filter/lwphyperlinkmgr.cxx @@ -0,0 +1,82 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ +#include "lwphyperlinkmgr.hxx" + +LwpHyperlinkMgr::LwpHyperlinkMgr() +{ + m_bIsHyperlink = sal_False; +} + +LwpHyperlinkMgr::~LwpHyperlinkMgr() +{ +} + +OUString LwpHyperlinkMgr::GetHyperlink() +{ + return m_Hyperlink; +} + +void LwpHyperlinkMgr::SetHyperlink(OUString hyperlink) +{ + m_Hyperlink = hyperlink; +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwphyperlinkmgr.hxx b/lotuswordpro/source/filter/lwphyperlinkmgr.hxx new file mode 100644 index 000000000000..2b5c2e5f613e --- /dev/null +++ b/lotuswordpro/source/filter/lwphyperlinkmgr.hxx @@ -0,0 +1,82 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ +#ifndef _LWPHYPERLINKMGR_HXX_ +#define _LWPHYPERLINKMGR_HXX_ + +#include "lwpfilehdr.hxx" + +class LwpHyperlinkMgr +{ +public: + LwpHyperlinkMgr(); + ~LwpHyperlinkMgr(); + void SetHyperlinkFlag(sal_Bool bFlag){m_bIsHyperlink = bFlag;} + sal_Bool GetHyperlinkFlag(){return m_bIsHyperlink;} + void SetHyperlink(OUString hyperlink); + OUString GetHyperlink(); +private: + OUString m_Hyperlink; + sal_Bool m_bIsHyperlink; +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpidxmgr.cxx b/lotuswordpro/source/filter/lwpidxmgr.cxx new file mode 100644 index 000000000000..d342fb75f0ea --- /dev/null +++ b/lotuswordpro/source/filter/lwpidxmgr.cxx @@ -0,0 +1,354 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/********************************************************************************************************************** + * @file + * index manager implementation + * Three record types are related with index information, and two ways are used. +* 1. VO_ROOTOBJINDEX works with one or more VO_LEAFOBJINDEX records to +* provide the map of all object ids and their offsets. +* VO_ROOTOBJINDEX includes k (object id, offset) and timetable which is used to map index to actual low id + * 2. VO_ROOTLEAFOBJINDEX is used when the file is so small that the number of objects is less than 256(?) + * VO_ROOTLEAFOBJINDEX contains directly the (object id, offset) map and time table. +/**********************************************************************************************************************/ +/********************************************************************************************************************** + * Change History + Jan 2005 Created +/**********************************************************************************************************************/ + +#include "lwpidxmgr.hxx" + +const sal_uInt8 LwpIndexManager::MAXOBJECTIDS = 255; + +LwpIndexManager::LwpIndexManager() + :m_nKeyCount(0), m_nLeafCount(0) +{ + + m_TempVec.resize( LwpIndexManager::MAXOBJECTIDS ); + +} + +LwpIndexManager::~LwpIndexManager() +{ + //Clear m_ObjectKeys + std::vector<LwpKey*>::iterator it; + + for( it = m_ObjectKeys.begin(); it != m_ObjectKeys.end(); it++ ) + { + LwpKey* pKey = *it; + if( pKey ) + { + delete pKey; + pKey = NULL; + } + } + m_ObjectKeys.clear(); +} + +/** + * @descr Read all index records, VO_ROOTLEAFOBJINDEX, VO_ROOTOBJINDEX, VO_LEAFOBJINDEX + */ +void LwpIndexManager::Read(LwpSvStream* pStrm) +{ + //Read index obj + LwpObjectHeader ObjHdr; + ObjHdr.Read(*pStrm); + LwpObjectStream* pObjStrm = new LwpObjectStream(pStrm, ObjHdr.IsCompressed(), + static_cast<sal_uInt16>(ObjHdr.GetSize()) ); + + if( ObjHdr.GetTag() == VO_ROOTLEAFOBJINDEX ) + { + ReadLeafData(pObjStrm); + ReadTimeTable(pObjStrm); + delete pObjStrm; + } + else + { + ReadRootData(pObjStrm); + delete pObjStrm; + + for (sal_uInt16 k = 0; k < m_nLeafCount; k++) + { + //Read leaf + pStrm->Seek(m_ChildIndex[k]+LwpSvStream::LWP_STREAM_BASE); + + + //Old Code + //ReadLeafIndex(pStrm); + //New Code + ReadObjIndex( pStrm ); + + + //Read object in root, these objects are between the leaf objects + if(k!=m_nLeafCount-1) + { + m_ObjectKeys.push_back(m_RootObjs[k]); + m_nKeyCount ++; + } + } + m_RootObjs.clear(); + } +} + +/** + * @descr Read data in VO_ROOTOBJINDEX + */ +void LwpIndexManager::ReadRootData(LwpObjectStream* pObjStrm) +{ + + sal_uInt16 KeyCount = 0; + pObjStrm->QuickRead(&KeyCount, sizeof(KeyCount)); + m_nLeafCount = KeyCount + 1; + + if(KeyCount) + { + //read object keys + LwpKey* akey = new LwpKey(); + akey->id.Read(pObjStrm); + m_RootObjs.push_back(akey); + + + //sal_uInt8 k = 0; + sal_uInt16 k = 0; + + for (k = 1; k < KeyCount; k++) + { + akey = new LwpKey(); + akey->id.ReadCompressed(pObjStrm, m_RootObjs[k-1]->id); + m_RootObjs.push_back(akey); + } + + for (k = 0; k < KeyCount; k++) + { + pObjStrm->QuickRead(&(m_RootObjs[k]->offset), sizeof(sal_uInt32)); + } + + //read leaf index offset + for (k = 0; k < m_nLeafCount; k++) + { + pObjStrm->QuickRead(&(m_ChildIndex[k]), sizeof(sal_uInt32)); + } + } + + ReadTimeTable(pObjStrm); + +} + + +//Add new method to handle ObjIndex data +/** + * @descr Read data in VO_OBJINDEX + */ +void LwpIndexManager::ReadObjIndexData(LwpObjectStream* pObjStrm) +{ + sal_uInt16 KeyCount = 0; + sal_uInt16 LeafCount = 0; + pObjStrm->QuickRead(&KeyCount, sizeof(KeyCount)); + LeafCount = KeyCount + 1; + + std::vector<LwpKey*> vObjIndexs; + + if(KeyCount) + { + LwpKey* akey = new LwpKey(); + akey->id.Read(pObjStrm); + vObjIndexs.push_back(akey); + + sal_uInt16 k = 0; + + for (k = 1; k < KeyCount; k++) + { + akey = new LwpKey(); + akey->id.ReadCompressed(pObjStrm, vObjIndexs[k-1]->id); + vObjIndexs.push_back(akey); + } + + for (k = 0; k < KeyCount; k++) + pObjStrm->QuickRead(&(vObjIndexs[k]->offset), sizeof(sal_uInt32)); + + for (k = 0; k < LeafCount; k++) + pObjStrm->QuickRead(&(m_TempVec[k]), sizeof(sal_uInt32)); + } + + for( sal_uInt16 j=0; j<LeafCount; j++ ) + { + pObjStrm->GetStream()->Seek( m_TempVec[j]+LwpSvStream::LWP_STREAM_BASE); + ReadLeafIndex(pObjStrm->GetStream()); + + if(j!=LeafCount-1) + { + m_ObjectKeys.push_back(vObjIndexs[j]); + + m_nKeyCount ++; + } + } + + vObjIndexs.clear(); + m_TempVec.clear(); +} + + +/** + * @descr Read VO_OBJINDEX + */ +void LwpIndexManager::ReadObjIndex( LwpSvStream *pStrm ) +{ + + LwpObjectHeader ObjHdr; + ObjHdr.Read(*pStrm); + LwpObjectStream* pObjStrm = new LwpObjectStream(pStrm, ObjHdr.IsCompressed(), + static_cast<sal_uInt16>(ObjHdr.GetSize()) ); + + if( (sal_uInt32)VO_OBJINDEX == ObjHdr.GetTag() ) + { + ReadObjIndexData( pObjStrm ); + } + else if( (sal_uInt32)VO_LEAFOBJINDEX == ObjHdr.GetTag() ) + { + ReadLeafData(pObjStrm); + } + + delete pObjStrm; +} + + +/** + * @descr Read VO_LEAFOBJINDEX + */ +void LwpIndexManager::ReadLeafIndex( LwpSvStream *pStrm ) +{ + LwpObjectHeader ObjHdr; + ObjHdr.Read(*pStrm); + LwpObjectStream* pObjStrm = new LwpObjectStream(pStrm, ObjHdr.IsCompressed(), + static_cast<sal_uInt16>(ObjHdr.GetSize()) ); + + ReadLeafData(pObjStrm); + + delete pObjStrm; +} +/** + * @descr Read data in VO_LEAFOBJINDEX + */ +void LwpIndexManager::ReadLeafData( LwpObjectStream *pObjStrm ) +{ + sal_uInt16 KeyCount; + pObjStrm->QuickRead(&KeyCount, sizeof(KeyCount)); + + if(KeyCount) + { + LwpKey* akey = new LwpKey(); + //read object keys: id & offset + akey->id.Read(pObjStrm); + m_ObjectKeys.push_back(akey); + + for (sal_uInt8 k = 1; k < KeyCount; k++) + { + akey = new LwpKey(); + akey->id.ReadCompressed(pObjStrm, m_ObjectKeys[m_nKeyCount+k-1]->id); + m_ObjectKeys.push_back(akey); + } + + for (sal_uInt8 j = 0; j < KeyCount; j++) + { + pObjStrm->QuickRead(&(m_ObjectKeys[m_nKeyCount+j]->offset), sizeof(sal_uInt32)); + } + } + m_nKeyCount += KeyCount; +} +/** + * @descr Read time table in VO_ROOTLEAFOBJINDEX and VO_ROOTOBJINDEX + */ +void LwpIndexManager::ReadTimeTable(LwpObjectStream *pObjStrm) +{ + sal_uInt16 nTimeCount; + pObjStrm->QuickRead(&nTimeCount, sizeof(nTimeCount)); + + sal_uInt32 atime; + for(sal_uInt16 i=0; i<nTimeCount; i++) + { + pObjStrm->QuickRead( &atime, sizeof(atime) ); + m_TimeTable.push_back(atime); + } +} +/** + * @descr get object offset per the object id + */ +sal_uInt32 LwpIndexManager::GetObjOffset( LwpObjectID objid ) +{ + + //sal_uInt16 L, U, M; + sal_uInt32 L, U, M; + + + L = 0; + U = m_nKeyCount; + while (L != U) + { + M = (L + U) >> 1; + + if (objid.GetLow() > m_ObjectKeys[M]->id.GetLow()) + L = M + 1; + else if (objid.GetLow() < m_ObjectKeys[M]->id.GetLow()) + U = M; + else if (objid.GetHigh() > m_ObjectKeys[M]->id.GetHigh()) + L = M + 1; + else if (objid.GetHigh() < m_ObjectKeys[M]->id.GetHigh()) + U = M; + else + { + return(m_ObjectKeys[M]->offset); + } + } + return BAD_OFFSET; +} diff --git a/lotuswordpro/source/filter/lwpidxmgr.hxx b/lotuswordpro/source/filter/lwpidxmgr.hxx new file mode 100644 index 000000000000..c823b187fcaf --- /dev/null +++ b/lotuswordpro/source/filter/lwpidxmgr.hxx @@ -0,0 +1,116 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * index manager, to maintain the map between object id and offset + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPINDEXMANAGER_HXX +#define _LWPINDEXMANAGER_HXX + +#include <rtl/ustring.hxx> +#include "lwpobjhdr.hxx" +#include "lwpobjstrm.hxx" + +/** + * @brief key structure used to map id to offset +*/ +struct LwpKey +{ + LwpObjectID id; + sal_uInt32 offset; +}; +/** + * @brief LwpIndexManager, to read all index records and maintain the index information +*/ +class LwpIndexManager +{ +public: + LwpIndexManager(); + ~LwpIndexManager(); +protected: + static const sal_uInt8 MAXOBJECTIDS; + std::vector<LwpKey*> m_ObjectKeys; //the <id, offset> ordered vector + std::vector<LwpKey*> m_RootObjs; //For those object ids in RootObjIndex + std::vector<sal_uInt32> m_TimeTable; //Time table for object low id compression + + //sal_uInt16 m_nKeyCount; + sal_uInt32 m_nKeyCount; //the count of all object + std::vector<sal_uInt32> m_TempVec; // a temp vector , store the offset of leafindex + + sal_uInt32 m_ChildIndex[256]; //Offset of leaf index + sal_uInt16 m_nLeafCount; +protected: + void ReadRootData(LwpObjectStream *pObjStrm ); //Read root index data + + + //Add new method to handle ObjIndex + void ReadObjIndexData(LwpObjectStream* pObjStrm); + void ReadObjIndex( LwpSvStream *pStrm ); //Read Obj index + + + void ReadLeafIndex( LwpSvStream *pStrm ); //Read leaf index obj + void ReadLeafData( LwpObjectStream *pStrm ); //Read leaf index obj data + void ReadTimeTable( LwpObjectStream *pStrm ); +public: + void Read( LwpSvStream *pStrm ); + sal_uInt32 GetObjOffset( LwpObjectID objid ); + sal_uInt32 GetObjTime( sal_uInt16 index ) { return m_TimeTable[index-1]; } +}; +#endif diff --git a/lotuswordpro/source/filter/lwplayout.cxx b/lotuswordpro/source/filter/lwplayout.cxx new file mode 100644 index 000000000000..ff01f05bd2bb --- /dev/null +++ b/lotuswordpro/source/filter/lwplayout.cxx @@ -0,0 +1,2215 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + Feb 2005 Process gemotry, margins + ************************************************************************/ + +#include "lwplayout.hxx" +#include "lwpusewhen.hxx" +#include "lwptools.hxx" +#include "xfilter/xfcolumns.hxx" +#include "lwpstory.hxx" +#include "lwpparastyle.hxx" +#include "lwpholder.hxx" +#include "lwpdoc.hxx" +#include "lwppagehint.hxx" +#include "lwpdivinfo.hxx" +#include "lwpgrfobj.hxx" +#ifndef _OSL_THREAD_H_ +#include <osl/thread.h> +#endif + +LwpVirtualLayout::LwpVirtualLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpDLNFPVList(objHdr, pStrm) +{} + +void LwpVirtualLayout::Read() +{ + LwpDLNFPVList::Read(); + + LwpObjectStream* pStrm = m_pObjStrm; + pStrm->QuickRead(&m_nAttributes, sizeof(m_nAttributes)); + pStrm->QuickRead(&m_nAttributes2, sizeof(m_nAttributes2)); + pStrm->QuickRead(&m_nAttributes3, sizeof(m_nAttributes3)); + pStrm->QuickRead(&m_nOverrideFlag, sizeof(m_nOverrideFlag)); + pStrm->QuickRead(&m_nDirection, sizeof(m_nDirection)); + + //Note that two bytes is read into m_nEditorID instead of one byte. + pStrm->QuickRead(&m_nEditorID, sizeof(m_nEditorID)); + + m_NextEnumerated.ReadIndexed(pStrm); + m_PreviousEnumerated.ReadIndexed(pStrm); + + pStrm->SkipExtra(); +} + +sal_Bool LwpVirtualLayout::MarginsSameAsParent() +{ + return m_nAttributes2 & STYLE2_MARGINSSAMEASPARENT ? sal_True : sal_False; +} + +/** +* @descr: Get column width +* +*/ +double LwpVirtualLayout::GetColWidth(sal_uInt16 nIndex) +{ + //return GetContentWidth(); //not support now + //return LwpTools::ConvertToMetric(5); //test + return 0; //test +} + +/** +* @descr: Get the gap between columns +* +*/ +double LwpVirtualLayout::GetColGap(sal_uInt16 nIndex) +{ + //return DEFAULTGAPSIZE; + //return LwpTools::ConvertToMetric(0.17);//DEFAULTGAPSIZE=0.17 + return LwpTools::ConvertToMetric(0.17); +} + +/** +* @descr: Whether it is honoring protection +* +*/ +sal_Bool LwpVirtualLayout::HonorProtection() +{ + if(!(m_nAttributes2 & STYLE2_HONORPROTECTION)) + return sal_False; + + LwpVirtualLayout* pParent = static_cast<LwpVirtualLayout*> (GetParent()->obj()); + if(pParent && !pParent->IsHeader()) + { + return pParent->HonorProtection(); + } + + if(m_pFoundry)//is null now + { + LwpDocument* pDoc = m_pFoundry->GetDocument(); + /*if(pDoc) + { + return pDoc->HonorProtection(); + }*/ + if(pDoc && pDoc->GetRootDocument()) + return pDoc->GetRootDocument()->HonorProtection(); + } + + return sal_True; +} + +/** +* @descr: Whether it is protected +* +*/ +sal_Bool LwpVirtualLayout::IsProtected() +{ + sal_Bool bProtected = (m_nAttributes & STYLE_PROTECTED)!=0; + + LwpVirtualLayout* pParent = static_cast<LwpVirtualLayout*> (GetParent()->obj()); + if(pParent && !pParent->IsHeader()) + { + if(pParent->HonorProtection()&&(pParent->HasProtection()||bProtected)) + { + return sal_True; + } + } + else if(m_pFoundry)//is null now + { + LwpDocument* pDoc = m_pFoundry->GetDocument(); + if(pDoc) + { + if (pDoc->HonorProtection() && bProtected) + { + return sal_True; + } + } + } + + return sal_False; +} + +/** +* @descr: Whether it has protection +* +*/ +sal_Bool LwpVirtualLayout::HasProtection() +{ + if(m_nAttributes & STYLE_PROTECTED) + return sal_True; + + LwpVirtualLayout* pParent = static_cast<LwpVirtualLayout*> (GetParent()->obj()); + if(pParent && !pParent->IsHeader()) + { + return pParent->HasProtection(); + } + + return sal_False; +} + +/** +* @descr: Whether it is a mirror layout +* +*/ +sal_Bool LwpVirtualLayout::IsComplex() +{ + return m_nAttributes & STYLE_COMPLEX ? sal_True : sal_False; +} + +/** +* @descr: Get usewhen pointer +* +*/ +LwpUseWhen* LwpVirtualLayout::GetUseWhen() +{ + /* + If we have a parent, and I'm not a page layout, + use my parents information. + */ + if(GetLayoutType()!=LWP_PAGE_LAYOUT) + { + //get parent + LwpVirtualLayout* pParent = static_cast<LwpVirtualLayout*> (GetParent()->obj()); + if(pParent && !pParent->IsHeader()&& (pParent->GetLayoutType()!=LWP_PAGE_LAYOUT)) + return pParent->GetUseWhen(); + + } + + return VirtualGetUseWhen(); +} +/** + * @descr: Whether this layout is page layout or not + * @param: + * @return: +*/ +sal_Bool LwpVirtualLayout::IsPage() +{ + return (GetLayoutType() == LWP_PAGE_LAYOUT); +} +/** + * @descr: Whether this layout is heaer layout or not + * @param: + * @return: +*/ +sal_Bool LwpVirtualLayout::IsHeader() +{ + return (GetLayoutType() == LWP_HEADER_LAYOUT); +} +/** + * @descr: Whether this layout is footer layout or not + * @param: + * @return: +*/ +sal_Bool LwpVirtualLayout::IsFooter() +{ + return (GetLayoutType() == LWP_FOOTER_LAYOUT); +} +/** + * @descr: Whether this layout is frame layout or not + * @param: + * @return: +*/ +sal_Bool LwpVirtualLayout::IsFrame() +{ + return (GetLayoutType() == LWP_FRAME_LAYOUT); +} + +/** + * @descr: Whether this layout is cell layout or not + * @param: + * @return: +*/ +sal_Bool LwpVirtualLayout::IsCell() +{ + return (GetLayoutType() == LWP_CELL_LAYOUT + || GetLayoutType() == LWP_CONNECTED_CELL_LAYOUT + || GetLayoutType() == LWP_HIDDEN_CELL_LAYOUT); +} +/** + * @descr: Whether this layout is supertable layout or not + * @param: + * @return: +*/ +sal_Bool LwpVirtualLayout::IsSuperTable() +{ + return (GetLayoutType() == LWP_SUPERTABLE_LAYOUT); +} +/** + * @descr: Whether this layout is group layout or not + * @param: + * @return: +*/ +sal_Bool LwpVirtualLayout::IsGroupHead() +{ + return (GetLayoutType() == LWP_GROUP_LAYOUT); +} +/** + * @descr: get the relative type + * @param: + * @return: +*/ +sal_uInt8 LwpVirtualLayout::GetRelativeType() +{ + return LwpLayoutRelativityGuts::LAY_PARENT_RELATIVE; +} +/** + * @descr: whether it is relative anchored layout + * @param: + * @return: +*/ +sal_Bool LwpVirtualLayout::IsRelativeAnchored() +{ + sal_uInt8 nType; + + nType = GetRelativeType(); + return (nType == LwpLayoutRelativityGuts::LAY_PARA_RELATIVE) || (nType == LwpLayoutRelativityGuts::LAY_INLINE) + || (nType == LwpLayoutRelativityGuts::LAY_INLINE_NEWLINE) || (nType == LwpLayoutRelativityGuts::LAY_INLINE_VERTICAL); +} +/** + * @descr: whether it is MinimumHeight layout + * @param: + * @return: +*/ +sal_Bool LwpVirtualLayout::IsMinimumHeight() +{ + return ((m_nAttributes3& STYLE3_MINHEIGHTVALID) != 0); +} + +/** +* @descr: Get parent layout +* +*/ +LwpVirtualLayout* LwpVirtualLayout::GetParentLayout() +{ + return static_cast<LwpVirtualLayout*> (GetParent()->obj()); +} + +/** +* @descr: Register child layout style +* +*/ +void LwpVirtualLayout::RegisterChildStyle() +{ + //Register all children styles + LwpVirtualLayout* pLayout = static_cast<LwpVirtualLayout*>(GetChildHead()->obj()); + while(pLayout) + { + pLayout->SetFoundry(m_pFoundry); + pLayout->RegisterStyle(); + pLayout = static_cast<LwpVirtualLayout*>(pLayout->GetNext()->obj()); + } +} + +sal_Bool LwpVirtualLayout::NoContentReference() +{ + return (m_nAttributes2 & STYLE2_NOCONTENTREFERENCE) != 0; +} + +sal_Bool LwpVirtualLayout::IsStyleLayout() +{ + if (m_nAttributes3 & STYLE3_STYLELAYOUT) + return sal_True; + + LwpVirtualLayout* pParent =static_cast<LwpVirtualLayout*>(GetParent()->obj()); + if (pParent) + return pParent->IsStyleLayout(); + return sal_False; +} + +/** +* @descr: Find child layout by layout type +* +*/ +LwpVirtualLayout* LwpVirtualLayout::FindChildByType(LWP_LAYOUT_TYPE eType) +{ + LwpObjectID *pID = GetChildHead(); + + while(pID && !pID->IsNull()) + { + LwpVirtualLayout * pLayout = static_cast<LwpVirtualLayout *>(pID->obj()); + if(!pLayout) + { + break; + } + + if (pLayout && pLayout->GetLayoutType() == eType) + { + return pLayout; + } + pID = pLayout->GetNext(); + } + + return NULL; +} + +/** +* @descr: Whether the size of layout is fit the graphic +* +*/ +sal_Bool LwpVirtualLayout::IsFitGraphic() +{ + return IsAutoGrowRight() && !IsAutoGrowLeft() && IsAutoGrowDown(); +} + +/** +* @descr: Whether the width of layout is auto grow +* +*/ +sal_Bool LwpVirtualLayout::IsAutoGrowWidth() +{ + return IsAutoGrowLeft() || IsAutoGrowRight(); +} + +/** +* @descr: Determine whether the layout width is to margin +* +*/ +sal_Bool LwpVirtualLayout::IsInlineToMargin() +{ + return (m_nAttributes3 & STYLE3_INLINETOMARGIN) != 0; +} + +void LwpAssociatedLayouts::Read(LwpObjectStream* pStrm) +{ + m_OnlyLayout.ReadIndexed(pStrm); + m_Layouts.Read(pStrm); + pStrm->SkipExtra(); +} + +/** +* @descr: Looking for the layout which follows the pStartLayout +* @param: pStartLayout - the layout which is used for looking for its following layout +*/ +LwpVirtualLayout* LwpAssociatedLayouts::GetLayout(LwpVirtualLayout *pStartLayout) +{ + LwpVirtualLayout* pLayout = NULL; + + if (!pStartLayout && !m_OnlyLayout.IsNull()) + /* Looking for the first layout and there's only one layout in the list.*/ + return static_cast<LwpVirtualLayout*>(m_OnlyLayout.obj()); + + LwpObjectHolder* pObjHolder =static_cast<LwpObjectHolder*>(m_Layouts.GetHead()->obj()); + if(pObjHolder) + { + pLayout = static_cast<LwpVirtualLayout*>(pObjHolder->GetObject()->obj()); + if(!pStartLayout ) + return pLayout; + + while(pObjHolder && pStartLayout != pLayout) + { + pObjHolder = static_cast<LwpObjectHolder*>(pObjHolder->GetNext()->obj()); + if(pObjHolder) + { + pLayout = static_cast<LwpVirtualLayout*>(pObjHolder->GetObject()->obj()); + } + } + + if(pObjHolder) + { + pObjHolder = static_cast<LwpObjectHolder*>(pObjHolder->GetNext()->obj()); + if(pObjHolder) + { + pLayout = static_cast<LwpVirtualLayout*>(pObjHolder->GetObject()->obj()); + return pLayout; + } + } + + //return pLayout; + } + + return NULL; +} + +LwpHeadLayout::LwpHeadLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpVirtualLayout(objHdr, pStrm) +{} + +void LwpHeadLayout::Read() +{ + LwpVirtualLayout::Read(); + //For PermissiveLayout + m_pObjStrm->SkipExtra(); + //For me + m_pObjStrm->SkipExtra(); +} + +void LwpHeadLayout::RegisterStyle() +{ + //Register all children styles + LwpVirtualLayout* pLayout = static_cast<LwpVirtualLayout*>(GetChildHead()->obj()); + while(pLayout) + { + pLayout->SetFoundry(m_pFoundry); + //if the layout is relative to para, the layout will be registered in para + if(!pLayout->IsRelativeAnchored()) + { + pLayout->RegisterStyle(); + } + pLayout = static_cast<LwpVirtualLayout*>(pLayout->GetNext()->obj()); + } +} + +/** + * @descr find endnote supertable layout from the child layout list. Suppose that there is only one endnote supertablelayout in one division + * @return pointer to endnote supertable layout + */ +LwpVirtualLayout* LwpHeadLayout::FindEnSuperTableLayout() +{ + LwpVirtualLayout* pLayout = static_cast<LwpVirtualLayout*>(GetChildHead()->obj()); + while(pLayout) + { + if(pLayout->GetLayoutType() == LWP_ENDNOTE_SUPERTABLE_LAYOUT) + { + return pLayout; + } + pLayout = static_cast<LwpVirtualLayout*>(pLayout->GetNext()->obj()); + } + return NULL; +} + +LwpLayoutStyle::LwpLayoutStyle() : +m_nStyleDefinition(0), m_nKey(0), +m_pDescription(new LwpAtomHolder) +{ +} + +LwpLayoutStyle::~LwpLayoutStyle() +{ + if (m_pDescription) + { + delete m_pDescription; + } +} + +void LwpLayoutStyle::Read(LwpObjectStream* pStrm) +{ + pStrm->QuickRead(&m_nStyleDefinition, sizeof(m_nStyleDefinition)); + m_pDescription->Read(pStrm); + if (pStrm->CheckExtra()) + { + pStrm->QuickRead(&m_nKey, 2); + pStrm->SkipExtra(); + } +} + +LwpLayoutMisc::LwpLayoutMisc() : +m_nGridDistance(0), m_nGridType(0), +m_pContentStyle(new LwpAtomHolder) +{ +} + +LwpLayoutMisc::~LwpLayoutMisc() +{ + if (m_pContentStyle) + { + delete m_pContentStyle; + } +} + +void LwpLayoutMisc::Read(LwpObjectStream* pStrm) +{ + pStrm->QuickRead(&m_nGridType, 2); + pStrm->QuickRead(&m_nGridDistance, 4); + m_pContentStyle->Read(pStrm); + pStrm->SkipExtra(); +} + +LwpMiddleLayout::LwpMiddleLayout( LwpObjectHeader &objHdr, LwpSvStream* pStrm ) + : LwpVirtualLayout(objHdr, pStrm), + m_pStyleStuff(new LwpLayoutStyle), m_pMiscStuff(new LwpLayoutMisc) +{} + +LwpMiddleLayout::~LwpMiddleLayout() +{ + if (m_pStyleStuff) + { + delete m_pStyleStuff; + } + if (m_pMiscStuff) + { + delete m_pMiscStuff; + } +} +void LwpMiddleLayout::Read() +{ + LwpObjectStream* pStrm = m_pObjStrm; + + LwpVirtualLayout::Read(); + + //skip CLiteLayout data; + LwpAtomHolder ContentClass; + ContentClass.Read(pStrm); + pStrm->SkipExtra(); + + // before layout hierarchy rework + if(LwpFileHeader::m_nFileRevision < 0x000B) + return; + + m_Content.ReadIndexed(pStrm); + + // 01/20/2005 + m_BasedOnStyle.ReadIndexed(pStrm); + m_TabPiece.ReadIndexed(pStrm); + + sal_uInt8 nWhatsItGot = 0; + pStrm->QuickRead(&nWhatsItGot, 1); + + if (nWhatsItGot & DISK_GOT_STYLE_STUFF) + { + m_pStyleStuff->Read(pStrm); + } + if (nWhatsItGot & DISK_GOT_MISC_STUFF) + { + m_pMiscStuff->Read(pStrm); + } + + m_LayGeometry.ReadIndexed(pStrm); + m_LayScale.ReadIndexed(pStrm); + m_LayMargins.ReadIndexed(pStrm); + m_LayBorderStuff.ReadIndexed(pStrm); + m_LayBackgroundStuff.ReadIndexed(pStrm); + + if (pStrm->CheckExtra()) + { + m_LayExtBorderStuff.ReadIndexed(pStrm); + pStrm->SkipExtra(); + } + //end +} + +#include "lwplaypiece.hxx" + +/** +* @descr: Get the geometry of current layout +* +*/ +LwpLayoutGeometry* LwpMiddleLayout::GetGeometry() +{ + if( !m_LayGeometry.IsNull() ) + { + return ( static_cast<LwpLayoutGeometry*> (m_LayGeometry.obj()) ); + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpMiddleLayout* pLay = static_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj() ); + return pLay->GetGeometry(); + } + return NULL; +} + +/** +* @descr: Get layout height, measured by "cm" +* +*/ +double LwpMiddleLayout::GetGeometryHeight() +{ + LwpLayoutGeometry* pGeo = GetGeometry(); + if(pGeo) + { + return ( LwpTools::ConvertFromUnitsToMetric( pGeo->GetHeight() ) ); + } + else + return -1; +} + +/** +* @descr: Get layout width, measured by "cm" +* +*/ +double LwpMiddleLayout::GetGeometryWidth() +{ + LwpLayoutGeometry* pGeo = GetGeometry(); + if(pGeo) + { + return ( LwpTools::ConvertFromUnitsToMetric( pGeo->GetWidth() ) ); + } + else + return -1; +} + +/** +* @descr: Whether the margins is same as parent layout +* +*/ +BOOL LwpMiddleLayout::MarginsSameAsParent() +{ + if(m_nOverrideFlag & OVER_MARGINS) + { + return LwpVirtualLayout::MarginsSameAsParent(); + } + if(!m_BasedOnStyle.IsNull()) + { + LwpVirtualLayout* play = static_cast<LwpVirtualLayout*> (m_BasedOnStyle.obj()); + play->MarginsSameAsParent(); + } + return LwpVirtualLayout::MarginsSameAsParent(); + +} + +/** +* @descr: Get margin +* @param: nWhichSide - 0: left, 1: right, 2:top, 3: bottom +*/ +double LwpMiddleLayout::GetMarginsValue(const sal_uInt8 &nWhichSide) +{ + double fValue = 0; + if((nWhichSide==MARGIN_LEFT)||(nWhichSide==MARGIN_RIGHT)) + { + if ( MarginsSameAsParent() ) + { + LwpVirtualLayout* pParent = static_cast<LwpVirtualLayout*> (GetParent()->obj()); + if(pParent && !pParent->IsHeader()) + { + fValue = pParent->GetMarginsValue(nWhichSide); + return fValue; + } + } + } + + if(m_nOverrideFlag & OVER_MARGINS) + { + LwpLayoutMargins* pMar1 = static_cast<LwpLayoutMargins*> (m_LayMargins.obj()); + if(pMar1) + { + fValue = pMar1->GetMargins()->GetMarginsValue(nWhichSide); + return fValue; + } + } + LwpVirtualLayout* pStyle = static_cast<LwpVirtualLayout*> (m_BasedOnStyle.obj()); + if(pStyle) + { + fValue = pStyle->GetMarginsValue(nWhichSide); + return fValue; + } + return LwpVirtualLayout::GetMarginsValue(nWhichSide); +} +/** + * @descr: Get extmargin value + * @param: nWhichSide - 0: left, 1: right, 2:top, 3: bottom + * @param: + * @return: +*/ +double LwpMiddleLayout::GetExtMarginsValue(const sal_uInt8 &nWhichSide) +{ + double fValue = 0; + if(m_nOverrideFlag & OVER_MARGINS) + { + LwpLayoutMargins* pMar1 = static_cast<LwpLayoutMargins*> (m_LayMargins.obj()); + if(pMar1) + { + fValue = pMar1->GetExtMargins()->GetMarginsValue(nWhichSide); + return fValue; + } + } + LwpVirtualLayout* pStyle = static_cast<LwpVirtualLayout*> (m_BasedOnStyle.obj()); + if(pStyle) + { + fValue = pStyle->GetExtMarginsValue(nWhichSide); + return fValue; + } + return LwpVirtualLayout::GetExtMarginsValue(nWhichSide); +} +/** + * @descr: Get the LwpBorderStuff object according to m_LayBorderStuff id. + * @param: + * @param: + * @return: +*/ +LwpBorderStuff* LwpMiddleLayout::GetBorderStuff() +{ + if(m_nOverrideFlag & OVER_BORDERS) + { + LwpLayoutBorder* pLayoutBorder = static_cast<LwpLayoutBorder*>(m_LayBorderStuff.obj()); + return pLayoutBorder->GetBorderStuff(); + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpMiddleLayout* pLay = static_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj() ); + return pLay->GetBorderStuff(); + } + return NULL; +} + +/** + * @descr: Get LwpBackgroundStuff object according to m_LayBackgroundStuff id; + * @param: + * @param: + * @return: +*/ +LwpBackgroundStuff* LwpMiddleLayout::GetBackgroundStuff() +{ + if(m_nOverrideFlag & OVER_BACKGROUND) + { + LwpLayoutBackground* pLayoutBackground = static_cast<LwpLayoutBackground*>(m_LayBackgroundStuff.obj()); + return pLayoutBackground->GetBackgoudStuff(); + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpMiddleLayout* pLay = static_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj() ); + return pLay->GetBackgroundStuff(); + } + return NULL; +} +/** + * @descr: create xfborder. + * @param: + * @param: + * @return: +*/ +XFBorders* LwpMiddleLayout::GetXFBorders() +{ + LwpBorderStuff* pBorderStuff = GetBorderStuff(); + if(pBorderStuff&&pBorderStuff->GetSide() != 0) + { + //copy from lwpparastyle. + XFBorders *pXFBorders = new XFBorders(); + // apply 4 borders respectively + LwpBorderStuff::BorderType pType[] = { LwpBorderStuff::LEFT, LwpBorderStuff::RIGHT, + LwpBorderStuff::TOP, LwpBorderStuff::BOTTOM }; + + for (sal_uInt8 nC = 0; nC < 4; nC++) + { + if (pBorderStuff->HasSide(pType[nC])) + { + LwpParaStyle::ApplySubBorder(pBorderStuff, pType[nC], pXFBorders); + } + } + return pXFBorders; + } + return NULL; +} + +/** + * @descr: Get text direction settings. + * @param: + * @param: + * @return: +*/ +enumXFTextDir LwpMiddleLayout::GetTextDirection() +{ + enumXFTextDir eTextDir = enumXFTextDirNone; + sal_uInt8 nDirection = GetContentOrientation(); + switch(nDirection) + { + case TEXT_ORIENT_LRTB: + { + eTextDir = enumXFTextDirLR_TB; + break; + } + case TEXT_ORIENT_TBRL: + { + eTextDir = enumXFTextDirTB_RL; + break; + } + case TEXT_ORIENT_RLBT: // not supported now + { + eTextDir = enumXFTextDirNone; + break; + } + case TEXT_ORIENT_BTLR: // not supported now + { + eTextDir = enumXFTextDirNone; + break; + } + default: + break; + } + return eTextDir; +} +/** + * @descr: Get back ground color. + * @param: + * @param: + * @return: +*/ +LwpColor* LwpMiddleLayout::GetBackColor() +{ + LwpBackgroundStuff* pBackgroundStuff = GetBackgroundStuff(); + if(pBackgroundStuff && !pBackgroundStuff->IsTransparent()) + { + LwpColor* pColor = pBackgroundStuff->GetFillColor(); + if(pColor->IsValidColor()) + { + return pColor; + } + } + return NULL; +} + +/** + * @descr: Add back color settings into xfpagemaster. + * @param: + * @param: + * @return: +*/ +LwpTabOverride* LwpMiddleLayout::GetTabOverride() +{ + if(m_nAttributes & OVER_TABS) + { + if(!m_TabPiece.IsNull()) + return (LwpTabOverride*)static_cast<LwpTabPiece*>(m_TabPiece.obj())->GetOverride(); + return NULL; + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpMiddleLayout* pLay = static_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj() ); + return pLay->GetTabOverride(); + } + return NULL; +} + +/** + * @descr: Layscale for graphic & watermark + * @param: + * @param: + * @return: +*/ +sal_uInt16 LwpMiddleLayout::GetScaleMode(void) +{ + if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj()) + return GetLayoutScale()->GetScaleMode(); + else if (m_BasedOnStyle.obj()) + return static_cast<LwpMiddleLayout*>(m_BasedOnStyle.obj())->GetScaleMode(); + else + return (LwpLayoutScale::FIT_IN_FRAME | LwpLayoutScale::MAINTAIN_ASPECT_RATIO); +} + +void LwpMiddleLayout::SetScaleMode(sal_uInt16 nVal) +{ + m_nOverrideFlag |= OVER_SCALING; +// nVal |= LwpLayoutScale::MAINTAIN_ASPECT_RATIO; + GetLayoutScale()->SetScaleMode(nVal); +} + +sal_uInt16 LwpMiddleLayout::GetScaleTile(void) +{ + if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj()) + return (GetLayoutScale()->GetPlacement() & LwpLayoutScale::TILED) + ? 1 : 0; + else if (m_BasedOnStyle.obj()) + return static_cast<LwpMiddleLayout*>(m_BasedOnStyle.obj())->GetScaleTile(); + else + return 0; +} + +void LwpMiddleLayout::SetScaleTile(sal_uInt16 nVal) +{ + m_nOverrideFlag |= OVER_SCALING; + if (nVal) + GetLayoutScale()->SetPlacement(GetLayoutScale()->GetPlacement() | LwpLayoutScale::TILED); + else + GetLayoutScale()->SetPlacement(GetLayoutScale()->GetPlacement() & ~LwpLayoutScale::TILED); +} + +sal_uInt16 LwpMiddleLayout::GetScaleCenter(void) +{ + if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj()) + return (GetLayoutScale()->GetPlacement() & LwpLayoutScale::CENTERED) + ? 1 : 0; + else if (m_BasedOnStyle.obj()) + return static_cast<LwpMiddleLayout*>(m_BasedOnStyle.obj())->GetScaleCenter(); + else + return 0; +} + +void LwpMiddleLayout::SetScaleCenter(sal_uInt16 nVal) +{ + m_nOverrideFlag |= OVER_SCALING; + if (nVal) + GetLayoutScale()->SetPlacement(GetLayoutScale()->GetPlacement() | LwpLayoutScale::CENTERED); + else + GetLayoutScale()->SetPlacement(GetLayoutScale()->GetPlacement() & ~LwpLayoutScale::CENTERED); +} + +sal_uInt32 LwpMiddleLayout::GetScalePercentage(void) +{ + if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj()) + return GetLayoutScale()->GetScalePercentage()/10;//m_nScalePercentage 1000 = 100% + else if (m_BasedOnStyle.obj()) + return static_cast<LwpMiddleLayout*>(m_BasedOnStyle.obj())->GetScalePercentage(); + else + return 100; +} + +void LwpMiddleLayout::SetScalePercentage(sal_uInt32 nVal) +{ + m_nOverrideFlag |= OVER_SCALING; + GetLayoutScale()->SetScalePercentage(nVal*10); +} + +double LwpMiddleLayout::GetScaleWidth(void) +{ + if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj()) + return LwpTools::ConvertFromUnits(GetLayoutScale()->GetScaleWidth()); + else if (m_BasedOnStyle.obj()) + return static_cast<LwpMiddleLayout*>(m_BasedOnStyle.obj())->GetScaleWidth(); + else + return 0; +} + +void LwpMiddleLayout::SetScaleWidth(double fVal) +{ + m_nOverrideFlag |= OVER_SCALING; + GetLayoutScale()->SetScaleWidth(LwpTools::ConvertToUnits(fVal)); +} + +double LwpMiddleLayout::GetScaleHeight(void) +{ + if ((m_nOverrideFlag & OVER_SCALING) && m_LayScale.obj()) + return LwpTools::ConvertFromUnits(GetLayoutScale()->GetScaleHeight()); + else if (m_BasedOnStyle.obj()) + return static_cast<LwpMiddleLayout*>(m_BasedOnStyle.obj())->GetScaleHeight(); + else + return 0; +} +sal_Bool LwpMiddleLayout::CanSizeRight(void) +{ + sal_uInt8 RelType = GetRelativeType(); + + if (RelType == LwpLayoutRelativityGuts::LAY_INLINE || RelType == LwpLayoutRelativityGuts::LAY_PARA_RELATIVE + || RelType == LwpLayoutRelativityGuts::LAY_INLINE_VERTICAL) + { + return sal_False; + } + return sal_True; +} +sal_Int32 LwpMiddleLayout::GetMinimumWidth() +{ + if (((m_nAttributes3 & STYLE3_WIDTHVALID) != 0) && GetGeometry()) + { + return GetGeometry()->GetWidth(); + } + else if (m_nOverrideFlag & OVER_SIZE) + { + return DetermineWidth(); + } + return 0; +} +sal_Int32 LwpMiddleLayout::DetermineWidth() +{ + if (IsSizeRightToContent()) + { + assert(sal_False); + } + else if (IsSizeRightToContainer()) + { + assert(sal_False); + } + else + { + m_nAttributes3 |= STYLE3_WIDTHVALID; + return GetGeometry()->GetWidth(); + } + return 0; +} +sal_Bool LwpMiddleLayout::IsSizeRightToContainer(void) +{ + if (!CanSizeRight()) + return sal_False; + + if (m_nOverrideFlag & OVER_SIZE) + { + return (m_nDirection & ((LAY_USEDIRECTION|LAY_AUTOSIZE|LAY_TOCONTAINER) + << SHIFT_RIGHT)) + == ((LAY_USEDIRECTION | LAY_TOCONTAINER | LAY_AUTOSIZE) << SHIFT_RIGHT); + } + else if (m_BasedOnStyle.obj()) + { + LwpMiddleLayout * pLayout = static_cast<LwpMiddleLayout *>(m_BasedOnStyle.obj()); + return pLayout->IsSizeRightToContainer(); + } + else + return sal_False; +} +sal_Bool LwpMiddleLayout::IsSizeRightToContent(void) +{ + if (!CanSizeRight()) + return sal_False; + + if (m_nOverrideFlag & OVER_SIZE) + { + return (m_nDirection & ((LAY_USEDIRECTION|LAY_AUTOSIZE|LAY_TOCONTAINER) + << SHIFT_RIGHT)) + == ((LAY_USEDIRECTION | LAY_AUTOSIZE) << SHIFT_RIGHT); + } + else if (m_BasedOnStyle.obj()) + { + LwpMiddleLayout * pLayout = static_cast<LwpMiddleLayout *>(m_BasedOnStyle.obj()); + return pLayout->IsSizeRightToContent(); + } + else + return sal_False; +} + +/** +* @descr: Get layout height +* +*/ +double LwpMiddleLayout::GetHeight() +{ + return GetGeometryHeight(); +} + +/** +* @descr: Get layout height +* +*/ +double LwpMiddleLayout::GetWidth() +{ + return GetGeometryWidth(); +} +/** +* @descr: Get layout orgin point +* +*/ +LwpPoint LwpMiddleLayout::GetOrigin() +{ + LwpLayoutGeometry* pGeo = GetGeometry(); + if(pGeo) + { + sal_uInt8 nType = GetRelativeType(); + if(nType == LwpLayoutRelativityGuts::LAY_INLINE + || nType == LwpLayoutRelativityGuts::LAY_INLINE_NEWLINE ) + { + return pGeo->GetAbsoluteOrigin(); + } + else + return pGeo->GetOrigin(); + + } + + return LwpPoint(); +} + +void LwpMiddleLayout::SetScaleHeight(double fVal) +{ + m_nOverrideFlag |= OVER_SCALING; + GetLayoutScale()->SetScaleHeight(LwpTools::ConvertToUnits(fVal)); +} + +/** +* @descr: Whether the fill is pattern fill or not +* @return: True if yes, false if not. +*/ +sal_Bool LwpMiddleLayout::IsPatternFill() +{ + LwpBackgroundStuff* pBackgroundStuff = GetBackgroundStuff(); + if (pBackgroundStuff) + { + return pBackgroundStuff->IsPatternFill(); + } + + return sal_False; +} + +/** +* @descr: Get the fill pattern style. Data are saved in a XFBGImage object +* @return: the fill pattern style. +*/ +XFBGImage* LwpMiddleLayout::GetFillPattern() +{ + LwpBackgroundStuff* pBackgroundStuff = GetBackgroundStuff(); + if (pBackgroundStuff) + { + return pBackgroundStuff->GetFillPattern(); + } + + return NULL; + +} + +/** +* @descr: Whether the height and width of layout is auto grow +* +*/ +sal_Bool LwpMiddleLayout::IsAutoGrow() +{ + if(m_nOverrideFlag & OVER_SIZE) + { + return m_nDirection & + ((LAY_AUTOGROW << SHIFT_UP) | (LAY_AUTOGROW << SHIFT_DOWN) | + (LAY_AUTOGROW << SHIFT_RIGHT) | (LAY_AUTOGROW << SHIFT_LEFT)) + ? sal_True : sal_False; + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpMiddleLayout* pLay = static_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj() ); + return pLay->IsAutoGrow(); + } + return LwpVirtualLayout::IsAutoGrow(); +} + +/** +* @descr: Whether the height of layout is auto grow down +* +*/ +sal_Bool LwpMiddleLayout::IsAutoGrowDown() +{ + if(m_nOverrideFlag & OVER_SIZE) + { + return m_nDirection & (LAY_AUTOGROW << SHIFT_DOWN) ? sal_True : sal_False; + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpMiddleLayout* pLay = static_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj() ); + return pLay->IsAutoGrowDown(); + } + return LwpVirtualLayout::IsAutoGrowDown(); +} + +/** +* @descr: Whether the height of layout is auto grow up +* +*/ +sal_Bool LwpMiddleLayout::IsAutoGrowUp() +{ + if(m_nOverrideFlag & OVER_SIZE) + { + return m_nDirection & (LAY_AUTOGROW << SHIFT_UP) ? sal_True : sal_False; + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpMiddleLayout* pLay = static_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj() ); + return pLay->IsAutoGrowUp(); + } + return LwpVirtualLayout::IsAutoGrowUp(); +} + +/** +* @descr: Whether the height of layout is auto grow down +* +*/ +sal_Bool LwpMiddleLayout::IsAutoGrowLeft() +{ + if(m_nOverrideFlag & OVER_SIZE) + { + return m_nDirection & (LAY_AUTOGROW << SHIFT_LEFT) ? sal_True : sal_False; + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpMiddleLayout* pLay = static_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj() ); + return pLay->IsAutoGrowLeft(); + } + return LwpVirtualLayout::IsAutoGrowLeft(); +} + +/** +* @descr: Whether the height of layout is auto grow down +* +*/ +sal_Bool LwpMiddleLayout::IsAutoGrowRight() +{ + if(m_nOverrideFlag & OVER_SIZE) + { + return m_nDirection & (LAY_AUTOGROW << SHIFT_RIGHT) ? sal_True : sal_False; + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpMiddleLayout* pLay = static_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj() ); + return pLay->IsAutoGrowRight(); + } + return LwpVirtualLayout::IsAutoGrowRight(); +} + + +/** +* @descr: Get contents orientation +* +*/ +sal_uInt8 LwpMiddleLayout::GetContentOrientation() +{ + //content orientation in Graphic objects and OLE objects not supported now + if((m_nOverrideFlag & OVER_ROTATION)&& !m_LayGeometry.IsNull()) + { + LwpLayoutGeometry* pLayGeometry = static_cast<LwpLayoutGeometry*> (m_LayGeometry.obj()); + return pLayGeometry->GetContentOrientation(); + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpMiddleLayout* pLay = static_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj() ); + return pLay->GetContentOrientation(); + } + return LwpVirtualLayout::GetContentOrientation(); +} + +/** +* @descr: Whether it is honoring protection +* +*/ +sal_Bool LwpMiddleLayout::HonorProtection() +{ + if(m_nOverrideFlag & OVER_MISC) + { + if(!(m_nAttributes2 & STYLE2_HONORPROTECTION)) + return sal_False; + + LwpVirtualLayout* pParent = static_cast<LwpVirtualLayout*> (GetParent()->obj()); + if(pParent && !pParent->IsHeader()) + { + return pParent->HonorProtection(); + } + + if(m_pFoundry)//is null now + { + LwpDocument* pDoc = m_pFoundry->GetDocument(); + if(pDoc) + { + return pDoc->HonorProtection(); + } + } + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpMiddleLayout* pLay = static_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj() ); + return pLay->HonorProtection(); + } + + return LwpVirtualLayout::HonorProtection(); +} + +/** +* @descr: Whether it is pretected +* +*/ +sal_Bool LwpMiddleLayout::IsProtected() +{ + sal_Bool bProtected = sal_False; + if(m_nOverrideFlag & OVER_MISC) + { + bProtected = (m_nAttributes & STYLE_PROTECTED)!=0; + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpMiddleLayout* pLay = static_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj() ); + bProtected = pLay->IsProtected(); + } + else + bProtected = LwpVirtualLayout::IsProtected(); + + LwpVirtualLayout* pParent = static_cast<LwpVirtualLayout*> (GetParent()->obj()); + if(pParent && !pParent->IsHeader()) + { + /* If a parent's protected then none of its children can be accessed. */ + if(pParent->IsProtected()) + return sal_True; + + if(pParent->HonorProtection()) + return bProtected; + + /* If our parent isn't honoring protection then we aren't protected. */ + return sal_False; + + } + if(m_pFoundry)//is null now + { + LwpDocument* pDoc = m_pFoundry->GetDocument(); + if(pDoc) + { + if (pDoc->HonorProtection()) + return bProtected; + + /* If the document isn't honoring protection then we aren't protected.*/ + return sal_False; + } + } + + return bProtected; +} + +/** +* @descr: Get watermark layout +* +*/ +LwpVirtualLayout* LwpMiddleLayout::GetWaterMarkLayout() +{ + LwpVirtualLayout* pLay = static_cast<LwpVirtualLayout*>(GetChildHead()->obj()); + while(pLay) + { + if( pLay->IsForWaterMark()) + { + return pLay; + } + pLay = static_cast<LwpVirtualLayout*> (pLay->GetNext()->obj()); + } + return NULL; +} + +/** +* @descr: Create and reture xfbgimage object for watermark +* +*/ +XFBGImage* LwpMiddleLayout::GetXFBGImage() +{ + LwpMiddleLayout* pLay = static_cast<LwpMiddleLayout*>(GetWaterMarkLayout()); + if(pLay) + { + //test BGImage + LwpGraphicObject* pGrfObj = static_cast<LwpGraphicObject*>(pLay->GetContent()->obj()); + if(pGrfObj) + { + XFBGImage* pXFBGImage = new XFBGImage(); + + if(pGrfObj->IsLinked()) + { + //set file link + OUString linkedfilepath = pGrfObj->GetLinkedFilePath(); + OUString fileURL = LwpTools::convertToFileUrl(OUStringToOString(linkedfilepath, osl_getThreadTextEncoding())); + pXFBGImage->SetFileLink(fileURL); + } + else + { + sal_uInt8* pGrafData = NULL; + sal_uInt32 nDataLen = pGrfObj->GetRawGrafData(pGrafData); + pXFBGImage->SetImageData(pGrafData, nDataLen); + if(pGrafData) + { + delete pGrafData; + pGrafData = NULL; + } + } + + + //automatic, top left + pXFBGImage->SetPosition(enumXFAlignStart,enumXFAlignTop); + if(pLay->GetScaleCenter()) + { + //center + pXFBGImage->SetPosition(enumXFAlignCenter,enumXFAlignCenter); + } + else if(pLay->GetScaleTile()) + { + //tile + pXFBGImage->SetRepeate(); + } + //fit type, area type + if((pLay->GetScaleMode()& LwpLayoutScale::FIT_IN_FRAME)!=0) + { + if((pLay->GetScaleMode()& LwpLayoutScale::MAINTAIN_ASPECT_RATIO)==0) + { + pXFBGImage->SetStretch(); + } + } + return pXFBGImage; + } + } + return NULL; +} + +/** +* @descr: Whether the page uses the printer setting +* +*/ +sal_Bool LwpMiddleLayout::GetUsePrinterSettings() +{ + if(m_nOverrideFlag & OVER_SIZE) + { + return (m_nAttributes3 & STYLE3_USEPRINTERSETTINGS) != 0; + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpMiddleLayout* pLay = static_cast<LwpMiddleLayout*> ( m_BasedOnStyle.obj() ); + return pLay->GetUsePrinterSettings(); + } + return sal_False; +} + + +//Check whether there are contents in the layout +sal_Bool LwpMiddleLayout::HasContent() +{ + LwpObject* content = m_Content.obj(); + if(content) + return sal_True; + return sal_False; +} +//End by + +LwpLayout::LwpLayout( LwpObjectHeader &objHdr, LwpSvStream* pStrm ) : + LwpMiddleLayout(objHdr, pStrm), m_pUseWhen(new LwpUseWhen) +{} + +LwpLayout::~LwpLayout() +{ + if (m_pUseWhen) + { + delete m_pUseWhen; + } +} + +void LwpLayout::Read() +{ + LwpObjectStream* pStrm = m_pObjStrm; + + LwpMiddleLayout::Read(); + if (LwpFileHeader::m_nFileRevision < 0x000B) + { + // read PreRevBLayout... + } + else + { + sal_uInt16 nSimple; + pStrm->QuickRead(&nSimple, 2); + + if (!nSimple) + { + m_pUseWhen->Read(pStrm); + + sal_uInt8 nFlag; + pStrm->QuickRead(&nFlag, 1); + if (nFlag) + { + m_Positon.ReadIndexed(pStrm); + } + } + + m_LayColumns.ReadIndexed(pStrm); + m_LayGutterStuff.ReadIndexed(pStrm); + m_LayJoinStuff.ReadIndexed(pStrm); + m_LayShadow.ReadIndexed(pStrm); + + if (pStrm->CheckExtra()) + { + m_LayExtJoinStuff.ReadIndexed(pStrm); + pStrm->SkipExtra(); + } + } +} + +/** +* @descr: Get columns number +* +*/ +sal_uInt16 LwpLayout::GetNumCols() +{ + if(m_nOverrideFlag & OVER_COLUMNS) + { + LwpLayoutColumns* pLayColumns = static_cast<LwpLayoutColumns*>(m_LayColumns.obj()); + if(pLayColumns) + { + return pLayColumns->GetNumCols(); + } + } + + LwpVirtualLayout* pStyle = static_cast<LwpVirtualLayout*> (m_BasedOnStyle.obj()); + if(pStyle) + { + return pStyle->GetNumCols(); + } + + return LwpVirtualLayout::GetNumCols(); + +} + +/** +* @descr: Get column width +* @param: the order of column +*/ +double LwpLayout::GetColWidth(sal_uInt16 nIndex) +{ + if((m_nOverrideFlag & OVER_COLUMNS)||(m_nAttributes2 & STYLE2_LOCALCOLUMNINFO)) + { + LwpLayoutColumns* pLayColumns = static_cast<LwpLayoutColumns*>(m_LayColumns.obj()); + if(pLayColumns) + { + return pLayColumns->GetColWidth(nIndex); + } + } + + LwpVirtualLayout* pStyle = static_cast<LwpVirtualLayout*> (m_BasedOnStyle.obj()); + if(pStyle) + { + return pStyle->GetColWidth(nIndex); + } + + return LwpVirtualLayout::GetColWidth(nIndex); + +} + +/** +* @descr: Get gap between columns +* @param: the order of column +*/ +double LwpLayout::GetColGap(sal_uInt16 nIndex) +{ + if((m_nOverrideFlag & OVER_COLUMNS)||(m_nAttributes2 & STYLE2_LOCALCOLUMNINFO)) + { + LwpLayoutColumns* pLayColumns = static_cast<LwpLayoutColumns*>(m_LayColumns.obj()); + if(pLayColumns) + { + return pLayColumns->GetColGap(nIndex); + } + } + + LwpVirtualLayout* pStyle = static_cast<LwpVirtualLayout*> (m_BasedOnStyle.obj()); + if(pStyle) + { + return pStyle->GetColGap(nIndex); + } + + return LwpVirtualLayout::GetColGap(nIndex); +} + +/** +* @descr: Create and return XFColumns object +* +*/ +XFColumns* LwpLayout::GetXFColumns() +{ + //if there is only one column, do not need insert columns + sal_uInt16 nCols = GetNumCols(); + if(nCols==1) + { + return NULL; + } + + XFColumns* pColumns = new XFColumns(); + //set XFColumnSep + XFColumnSep* pColumnSep = GetColumnSep(); + if(pColumnSep) + { + pColumns->SetSeperator(*pColumnSep); + } + + //set column count and column gap + pColumns->SetCount(nCols); + double fGap = GetColGap(0); + pColumns->SetGap(fGap); + + //set xfcolumn + for(sal_uInt16 nIndex = 0; nIndex<nCols; nIndex++) + { + XFColumn* pColumn = new XFColumn(); + sal_Int32 nWidth = static_cast<sal_Int32>(GetColWidth(nIndex)); + nWidth=8305/nCols; //relative width + pColumn->SetRelWidth(nWidth); + + //the left and right margins is 0; + double nGap = GetColGap(nIndex)/2; + //nGap=0; + pColumn->SetMargins(nGap,nGap); + if(nIndex==0) + { + pColumn->SetMargins(0,nGap); + } + if(nIndex==(nCols-1)) + { + pColumn->SetMargins(nGap,0); + } + pColumns->AddColumn(*pColumn); + } + + return pColumns; +} + +/** +* @descr: Create and return XFColumnSep object +* +*/ +XFColumnSep* LwpLayout::GetColumnSep() +{ + + //Get LwpLayoutGutters + LwpLayoutGutters* pLayoutGutters = static_cast<LwpLayoutGutters*>(m_LayGutterStuff.obj()); + if(!pLayoutGutters) + { + return NULL; + } + + LwpBorderStuff* pBorderStuff = pLayoutGutters->GetBorderStuff(); + + if(pBorderStuff) + { + LwpBorderStuff::BorderType eType = LwpBorderStuff::LEFT; + LwpColor aColor = pBorderStuff->GetSideColor(eType); + double fWidth = pBorderStuff->GetSideWidth(eType); + //sal_uInt16 nType = pBorderStuff->GetSideType(eType); + + XFColumnSep* pColumnSep = new XFColumnSep(); + XFColor aXFColor(aColor.To24Color()); + pColumnSep->SetColor(aXFColor); + pColumnSep->SetWidth(fWidth); + pColumnSep->SetRelHeight(100); + pColumnSep->SetVerticalAlign(enumXFAlignTop); + + return pColumnSep; + } + return NULL; + +} + +/** +* @descr: Get use when type +* +*/ +LwpLayout::UseWhenType LwpLayout::GetUseWhenType() +{ + UseWhenType eType = StartWithinPage; + LwpUseWhen* pUseWhen = GetUseWhen(); + if(pUseWhen) + { + if(pUseWhen->IsStartOnThisHF()) + { + eType = StartWithinColume; + } + else if(pUseWhen->IsStartOnThisPage()) + { + eType = StartWithinPage; + } + else if(pUseWhen->IsStartOnNextPage()) + { + eType = StartOnNextPage; + } + else if(pUseWhen->IsStartOnNextOddPage()) + { + eType = StartOnOddPage; + } + else if(pUseWhen->IsStartOnNextEvenPage()) + { + eType = StartOnEvenPage; + } + + } + else + { + eType = StartOnNextPage; + } + return eType; +} + +/** +* @descr: Get use page +* +*/ +sal_uInt16 LwpLayout::GetUsePage() +{ + if(m_nOverrideFlag & OVER_PLACEMENT) + { + LwpUseWhen* pUseWhen = GetUseWhen(); + if(pUseWhen) + return pUseWhen->GetUsePage(); + else + return NULL; + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpLayout* pLay = static_cast<LwpLayout*> ( m_BasedOnStyle.obj() ); + return pLay->GetUsePage(); + } + return 0; +} + +/** +* @descr: Get usewhen pointer +* +*/ +LwpUseWhen* LwpLayout::VirtualGetUseWhen() +{ + if(m_nOverrideFlag & OVER_PLACEMENT) + { + return m_pUseWhen; + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpLayout* pLay = static_cast<LwpLayout*> ( m_BasedOnStyle.obj() ); + return pLay->VirtualGetUseWhen(); + } + return LwpVirtualLayout::VirtualGetUseWhen(); +} + +/** +* @descr: Whether it is use on all pages +* +*/ +sal_Bool LwpLayout::IsUseOnAllPages() +{ + if(m_nOverrideFlag & OVER_PLACEMENT) + { + LwpUseWhen* pUseWhen = GetUseWhen(); + if(pUseWhen) + return pUseWhen->IsUseOnAllPages(); + else + return NULL; + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpLayout* pLay = static_cast<LwpLayout*> ( m_BasedOnStyle.obj() ); + return pLay->IsUseOnAllPages(); + } + return LwpVirtualLayout::IsUseOnAllPages(); +} + +/** +* @descr: Whether it is use on all even pages +* +*/ +sal_Bool LwpLayout::IsUseOnAllEvenPages() +{ + if(m_nOverrideFlag & OVER_PLACEMENT) + { + LwpUseWhen* pUseWhen = GetUseWhen(); + if(pUseWhen) + return pUseWhen->IsUseOnAllEvenPages(); + else + return NULL; + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpLayout* pLay = static_cast<LwpLayout*> ( m_BasedOnStyle.obj() ); + return pLay->IsUseOnAllEvenPages(); + } + return LwpVirtualLayout::IsUseOnAllEvenPages(); +} + +/** +* @descr: Whether it is use on all odd pages +* +*/ +sal_Bool LwpLayout::IsUseOnAllOddPages() +{ + if(m_nOverrideFlag & OVER_PLACEMENT) + { + LwpUseWhen* pUseWhen = GetUseWhen(); + if(pUseWhen) + return pUseWhen->IsUseOnAllOddPages(); + else + return NULL; + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpLayout* pLay = static_cast<LwpLayout*> ( m_BasedOnStyle.obj() ); + return pLay->IsUseOnAllOddPages(); + } + return LwpVirtualLayout::IsUseOnAllOddPages(); +} + +/** +* @descr: Whether it is use on current page +* +*/ +sal_Bool LwpLayout::IsUseOnPage() +{ + if(m_nOverrideFlag & OVER_PLACEMENT) + { + LwpUseWhen* pUseWhen = GetUseWhen(); + if(pUseWhen) + return pUseWhen->IsUseOnPage(); + else + return NULL; + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpLayout* pLay = static_cast<LwpLayout*> ( m_BasedOnStyle.obj() ); + return pLay->IsUseOnPage(); + } + return LwpVirtualLayout::IsUseOnPage(); +} + +/** + * @descr: Get the LwpShadow object according to m_LayShadow id. + * @param: + * @param: + * @return: +*/ +LwpShadow* LwpLayout::GetShadow() +{ + if(m_nOverrideFlag & OVER_SHADOW) + { + LwpLayoutShadow* pLayoutShadow = static_cast<LwpLayoutShadow*>(m_LayShadow.obj()); + return pLayoutShadow->GetShadow(); + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpLayout* pLay = static_cast<LwpLayout*> ( m_BasedOnStyle.obj() ); + return pLay->GetShadow(); + } + return NULL; +} + +/** + * @descr: create xfshadow + * @param: + * @param: + * @return: +*/ +XFShadow* LwpLayout::GetXFShadow() +{ + LwpShadow* pShadow = GetShadow(); + if( pShadow ) + { + LwpColor color = pShadow->GetColor(); + double offsetX = pShadow->GetOffsetX(); + double offsetY = pShadow->GetOffsetY(); + + if( offsetX && offsetY && color.IsValidColor() ) + { + XFShadow* pXFShadow = new XFShadow(); + enumXFShadowPos eXFShadowPos = enumXFShadowLeftTop; + double fOffset = 0; + + sal_Bool left = sal_False; + sal_Bool top = sal_False; + if( offsetX < 0 ) + left = sal_True; + if( offsetY < 0 ) + top = sal_True; + if( left ) + { + fOffset = -offsetX; + if( top ) + eXFShadowPos = enumXFShadowLeftTop; + else + eXFShadowPos = enumXFShadowLeftBottom; + } + else + { + fOffset = offsetX; + if( top ) + eXFShadowPos = enumXFShadowRightTop; + else + eXFShadowPos = enumXFShadowRightBottom; + } + + pXFShadow->SetPosition(eXFShadowPos); + pXFShadow->SetOffset(fOffset); + pXFShadow->SetColor(XFColor(color.To24Color())); + + return pXFShadow; + } + } + return NULL; +} + +/** + * @descr get the layout that containers the current frame layout + * + */ +LwpVirtualLayout* LwpLayout::GetContainerLayout() +{ + if(IsRelativeAnchored()) + { + //get position + LwpPara* pPara = static_cast<LwpPara*>(GetPosition()->obj()); + if(pPara) + { + LwpStory* pStory = pPara->GetStory(); + return pStory->GetTabLayout(); + } + } + return GetParentLayout(); +} + +LwpPlacableLayout::LwpPlacableLayout( LwpObjectHeader &objHdr, LwpSvStream* pStrm ) + : LwpLayout(objHdr, pStrm),m_pFont(NULL) +{} + +LwpPlacableLayout::~LwpPlacableLayout() +{} + +void LwpPlacableLayout::Read() +{ + LwpObjectStream* pStrm = m_pObjStrm; + LwpLayout::Read(); + if(LwpFileHeader::m_nFileRevision < 0x000B) + { + assert(false); + } + else + { + sal_uInt16 simple; + pStrm->QuickRead(&simple, sizeof(simple)); + if(!simple) + { + pStrm->QuickRead(&m_nWrapType, sizeof(m_nWrapType)); + pStrm->QuickRead(&m_nBuoyancy, sizeof(m_nBuoyancy)); + pStrm->QuickRead(&m_nBaseLineOffset, sizeof(m_nBaseLineOffset)); + m_Script.Read( pStrm); + } + else + { + m_nWrapType = LAY_WRAP_AROUND; + m_nBuoyancy = LAY_BUOYNEUTRAL; + m_nBaseLineOffset = 0; + } + m_LayRelativity.ReadIndexed( pStrm); + if(pStrm->CheckExtra()) + { + sal_uInt16 count; + pStrm->QuickRead(&count, sizeof(count)); + if(count) + { + // temporily added by to avoid assertion + while (count) + { + LwpPoint aPoint; + aPoint.Read(pStrm); + count--; + } + // end added by + } + pStrm->SkipExtra(); + } + } +} +/** + * @descr: get wrap type + * @param: + * @param: + * @return: +*/ +sal_uInt8 LwpPlacableLayout::GetWrapType() +{ + if(m_nOverrideFlag & OVER_PLACEMENT) + { + return m_nWrapType; + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpPlacableLayout* pLay = static_cast<LwpPlacableLayout*> ( m_BasedOnStyle.obj() ); + return pLay->GetWrapType(); + } + return LAY_WRAP_AROUND; +} +/** + * @descr: get LayoutRelativity + * @param: + * @param: + * @return: +*/ +LwpLayoutRelativity* LwpPlacableLayout::GetRelativityPiece() +{ + if(!m_LayRelativity.IsNull()) + { + if(m_nOverrideFlag & OVER_PLACEMENT) + { + return static_cast<LwpLayoutRelativity*>(m_LayRelativity.obj()); + } + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpPlacableLayout* pLay = static_cast<LwpPlacableLayout*> ( m_BasedOnStyle.obj() ); + return pLay->GetRelativityPiece(); + } + return NULL; +} +/** +* @descr: Get relative type +* +*/ +sal_uInt8 LwpPlacableLayout::GetRelativeType() +{ + LwpLayoutRelativity* pLayRel = GetRelativityPiece(); + if(pLayRel) + { + return pLayRel->GetRelGuts()->GetRelativeType(); + } + return LwpVirtualLayout::GetRelativeType(); +} +/** +* @descr: Get relative from where type +* +*/ +sal_uInt8 LwpPlacableLayout::GetRelativeFromWhere() +{ + LwpLayoutRelativity* pLayRel = GetRelativityPiece(); + if(pLayRel) + { + return pLayRel->GetRelGuts()->GetRelativeFromWhere(); + } + return 0; +} +/** +* @descr: Get relative distance +* +*/ +LwpPoint LwpPlacableLayout::GetRelativeDistance() +{ + LwpPoint aPoint; + LwpLayoutRelativity* pLayRel = GetRelativityPiece(); + if(pLayRel) + { + aPoint = pLayRel->GetRelGuts()->GetRelativeDistance(); + } + return aPoint; +} +/** +* @descr: Get tether type +* +*/ +sal_uInt8 LwpPlacableLayout::GetTetherType() +{ + LwpLayoutRelativity* pLayRel = GetRelativityPiece(); + if(pLayRel) + { + return pLayRel->GetRelGuts()->GetTetherType(); + } + return 0; +} +/** +* @descr: Get tether where type +* +*/ +sal_uInt8 LwpPlacableLayout::GetTetherWhere() +{ + LwpLayoutRelativity* pLayRel = GetRelativityPiece(); + if(pLayRel) + { + return pLayRel->GetRelGuts()->GetTetherWhere(); + } + return 0; +} +/** +* @descr: Get offset from the baseline +* +*/ +sal_Int32 LwpPlacableLayout::GetBaseLineOffset() +{ + /* The baseline is only valid if this is flow-with-text */ + if(GetRelativeType()!=LwpLayoutRelativityGuts::LAY_INLINE) + { + return 0; + } + + // First, ask our content if it has a baseline, ignore now + /* + if (Content && Content->GetBaseLineOffset(&Baseline)) + return Baseline; + */ + + if(m_nOverrideFlag & OVER_PLACEMENT) + { + return m_nBaseLineOffset; + } + else if( !m_BasedOnStyle.IsNull() ) + { + LwpPlacableLayout* pLay = static_cast<LwpPlacableLayout*> ( m_BasedOnStyle.obj() ); + return pLay->GetBaseLineOffset(); + } + return 0; + + +} +/** +* @descr: whether the parent layout is page layout +* +*/ +sal_Bool LwpPlacableLayout::IsAnchorPage() +{ + if(IsRelativeAnchored()) + return sal_False; + + LwpVirtualLayout* pLayout = GetParentLayout(); + if(pLayout && (pLayout->IsPage() || pLayout->IsHeader() || pLayout->IsFooter())) + //if(pLayout && pLayout->IsPage()) + { + return sal_True; + } + return sal_False; +} +/** +* @descr: whether the parent layout is frame layout +* +*/ +sal_Bool LwpPlacableLayout::IsAnchorFrame() +{ + if(IsRelativeAnchored()) + return sal_False; + + LwpVirtualLayout* pLayout = GetParentLayout(); + if(pLayout && (pLayout->IsFrame()||pLayout->IsGroupHead())) + { + return sal_True; + } + return sal_False; +} +/** +* @descr: whether the parent layout is cell layout +* +*/ +sal_Bool LwpPlacableLayout::IsAnchorCell() +{ + if(IsRelativeAnchored()) + return sal_False; + + LwpVirtualLayout* pLayout = GetParentLayout(); + if(pLayout && pLayout->IsCell()) + { + return sal_True; + } + return sal_False; +} + +/** +* @descr: Get font style for setting position of frame +* +*/ +XFFont* LwpPlacableLayout::GetFont() +{ + return m_pFont; +} +/** +* @descr: Set font style for setting position of frame +* +*/ +void LwpPlacableLayout::SetFont(XFFont * pFont) +{ + m_pFont = pFont; +} diff --git a/lotuswordpro/source/filter/lwplayout.hxx b/lotuswordpro/source/filter/lwplayout.hxx new file mode 100644 index 000000000000..58eb7205e55c --- /dev/null +++ b/lotuswordpro/source/filter/lwplayout.hxx @@ -0,0 +1,458 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPLAYOUT_HXX +#define _LWPLAYOUT_HXX + +#include "lwpheader.hxx" +#include "lwpobj.hxx" +#include "lwpobjhdr.hxx" +#include "lwpobjstrm.hxx" +#include "lwpobjid.hxx" +#include "lwpdlvlist.hxx" +#include "lwpfilehdr.hxx" + +#include "lwplayoutdef.hxx" +#include "xfilter/xfdefs.hxx" +#include "xfilter/xfpagemaster.hxx" +#include "xfilter/xfcolumns.hxx" +#include "xfilter/xfborders.hxx" +#include "xfilter/xfframestyle.hxx" +#include "xfilter/xfframe.hxx" +#include "xfilter/xfbgimage.hxx" +#include "lwpusewhen.hxx" + +#define ANCHOR_HEIGHT 0x120000 +#define FIRST_LAYOUTPAGENO 0x0001 +#define LAST_LAYOUTPAGENO 0xffff + +#define LAY_BUOYFLOAT 0x01 +#define LAY_BUOYNEUTRAL 0x02 +#define LAY_BUOYSINK 0x03 +#define LAY_BUOYLAYER 0x80 + +class LwpPara; +class LwpVirtualLayout : public LwpDLNFPVList +{ +public: + LwpVirtualLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpVirtualLayout(){}; + virtual sal_Bool MarginsSameAsParent(); + inline virtual sal_uInt16 GetNumCols(){return 1;} + virtual double GetColWidth(sal_uInt16 nIndex); + virtual double GetColGap(sal_uInt16 nIndex); + virtual double GetMarginsValue(const sal_uInt8& nWhichSide){return 0;} + virtual double GetExtMarginsValue(const sal_uInt8& nWhichSide){return 0;} + virtual sal_Bool IsAutoGrow(){ return sal_False;} + virtual sal_Bool IsAutoGrowUp(){ return sal_False;} + virtual sal_Bool IsAutoGrowDown(){ return sal_False;} + virtual sal_Bool IsAutoGrowLeft(){ return sal_False;}; + virtual sal_Bool IsAutoGrowRight(){ return sal_False;}; + virtual sal_Bool IsFitGraphic(); + virtual sal_Bool IsAutoGrowWidth(); + virtual sal_Bool IsInlineToMargin(); + virtual sal_uInt8 GetContentOrientation(){ return TEXT_ORIENT_LRTB;} + virtual sal_Bool HonorProtection(); + virtual sal_Bool IsProtected(); + virtual sal_Bool HasProtection(); + virtual OUString GetStyleName(){ return m_StyleName;} + virtual sal_Bool IsComplex(); + virtual sal_Bool IsAnchorPage(){ return sal_False;} + virtual sal_Bool IsAnchorFrame(){ return sal_False;} + virtual sal_Bool IsAnchorCell(){ return sal_False;} + virtual sal_Bool IsPage(); + virtual sal_Bool IsHeader(); + virtual sal_Bool IsFooter(); + virtual sal_Bool IsFrame(); + virtual sal_Bool IsCell(); + virtual sal_Bool IsSuperTable(); + virtual sal_Bool IsGroupHead(); + virtual sal_uInt8 GetRelativeType(); + virtual sal_Bool IsRelativeAnchored(); + virtual LwpUseWhen* GetUseWhen(); + virtual LwpUseWhen* VirtualGetUseWhen(){ return NULL;} + virtual sal_Bool IsUseOnAllPages(){ return sal_False;} + virtual sal_Bool IsUseOnAllEvenPages(){ return sal_False;} + virtual sal_Bool IsUseOnAllOddPages(){ return sal_False;} + virtual sal_Bool IsUseOnPage(){ return sal_False;} + virtual sal_Int32 GetPageNumber(sal_uInt16 nLayoutNumber = 0){ return -1;} + virtual sal_Bool IsMinimumHeight(); + virtual sal_Bool IsForWaterMark(){ return sal_False;} + virtual LwpPara* GetLastParaOfPreviousStory() { return NULL; } + virtual LwpVirtualLayout* GetParentLayout(); + virtual LwpVirtualLayout* GetContainerLayout(){ return NULL;} + virtual void RegisterChildStyle(); + virtual sal_Bool NoContentReference(); + virtual sal_Bool IsStyleLayout(); + virtual enumXFAlignType GetVerticalAlignmentType() + { + if (m_nAttributes & STYLE_CENTEREDVERTICALLY) + { + return enumXFAlignMiddle; + } + else if (m_nAttributes & STYLE_BOTTOMALIGNED) + { + return enumXFAlignBottom; + } + return enumXFAlignTop; + }; + virtual void SetStyleName(const OUString & str){ m_StyleName = str;}; + virtual double GetWidth(){return -1;}; + + //Check whether there are contents in the layout + virtual sal_Bool HasContent(){return sal_False;} + //End by +protected: + void Read(); +protected: + sal_uInt32 m_nAttributes; + sal_uInt32 m_nAttributes2; + sal_uInt32 m_nAttributes3; + sal_uInt32 m_nOverrideFlag; + sal_uInt16 m_nDirection; + sal_uInt16 m_nEditorID; + LwpObjectID m_NextEnumerated; + LwpObjectID m_PreviousEnumerated; + OUString m_StyleName; + enum LWP_LAYOUT_TYPE + { + LWP_VIRTUAL_LAYOUT, + LWP_HEAD_LAYOUT, + LWP_PAGE_LAYOUT, + LWP_HEADER_LAYOUT, + LWP_FOOTER_LAYOUT, + LWP_FRAME_LAYOUT, + LWP_SUPERTABLE_LAYOUT, + LWP_TABLE_LAYOUT, + LWP_ROW_LAYOUT, + LWP_COLUMN_LAYOUT, + LWP_CELL_LAYOUT, + LWP_CONNECTED_CELL_LAYOUT, + LWP_HIDDEN_CELL_LAYOUT, + LWP_TABLE_HEADING_LAYOUT, + LWP_ROW_HEADING_LAYOUT, + LWP_DROPCAP_LAYOUT, + LWP_GROUP_LAYOUT, + LWP_TOC_SUPERTABLE_LAYOUT, + LWP_FOOTNOTE_LAYOUT, + LWP_FOOTNOTE_ROW_LAYOUT, + LWP_FOOTNOTE_CELL_LAYOUT, + LWP_ENDNOTE_LAYOUT, + LWP_ENDNOTE_SUPERTABLE_LAYOUT, + LWP_FOOTNOTE_SUPERTABLE_LAYOUT, + LWP_NOTE_LAYOUT, + LWP_NOTEHEADER_LAYOUT, + LWP_NOTETEXT_LAYOUT, + LWP_VIEWPORT_LAYOUT + }; + enum LayoutDirection + { + LAY_USEDIRECTION = 0x01, + LAY_AUTOGROW = 0x02, + LAY_AUTOSIZE = 0x04, + LAY_TOCONTAINER = 0x08, + LAY_DIRALLBITS = 0x0f + }; + enum {SHIFT_UP = 0, SHIFT_DOWN = 4, SHIFT_LEFT = 8, SHIFT_RIGHT =12}; +public: + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_VIRTUAL_LAYOUT;} + virtual LwpVirtualLayout* FindChildByType(LWP_LAYOUT_TYPE eType); +}; + +class LwpAssociatedLayouts +{ +public: + LwpAssociatedLayouts(){}; + //LwpAssociatedLayouts(LwpObjectStream* pStrm){Read(pStrm);}; +public: + void Read(LwpObjectStream* pStrm); + LwpObjectID* GetOnlyLayout(){return &m_OnlyLayout;} + LwpDLVListHeadTail* GetLayouts(){return &m_Layouts;} + LwpVirtualLayout* GetLayout(LwpVirtualLayout* pStartLayout); +protected: + LwpObjectID m_OnlyLayout; //LwpVirtualLayout + LwpDLVListHeadTail m_Layouts; +}; + +class LwpHeadLayout : public LwpVirtualLayout +{ +public: + LwpHeadLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpHeadLayout(){}; + void RegisterStyle(); + LwpVirtualLayout* FindEnSuperTableLayout(); +protected: + void Read(); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_HEAD_LAYOUT;} +}; + +//add by , 01/20/2005 +class LwpLayoutStyle +{ +public: + LwpLayoutStyle(); + virtual ~LwpLayoutStyle(); + void Read(LwpObjectStream* pStrm); +private: + sal_uInt32 m_nStyleDefinition; + LwpAtomHolder* m_pDescription; + sal_uInt16 m_nKey; +}; + +class LwpLayoutMisc +{ +public: + LwpLayoutMisc(); + virtual ~LwpLayoutMisc(); + void Read(LwpObjectStream* pStrm); +private: + sal_Int32 m_nGridDistance; + sal_uInt16 m_nGridType; + LwpAtomHolder* m_pContentStyle; +}; +//end add + +#include "lwplaypiece.hxx" + +class LwpMiddleLayout : public LwpVirtualLayout +{ +public: + LwpMiddleLayout( LwpObjectHeader &objHdr, LwpSvStream* pStrm ); + virtual ~LwpMiddleLayout(); + virtual BOOL MarginsSameAsParent(); + virtual double GetMarginsValue(const sal_uInt8& nWhichSide); + virtual double GetExtMarginsValue(const sal_uInt8& nWhichSide); + LwpLayoutGeometry* GetGeometry(); + double GetGeometryHeight(); + double GetGeometryWidth(); + LwpBorderStuff* GetBorderStuff(); + LwpBackgroundStuff* GetBackgroundStuff(); + enumXFTextDir GetTextDirection(); + XFBorders* GetXFBorders(); + LwpColor* GetBackColor(); + virtual sal_Bool IsAutoGrow(); + virtual sal_Bool IsAutoGrowUp(); + virtual sal_Bool IsAutoGrowDown(); + virtual sal_Bool IsAutoGrowLeft(); + virtual sal_Bool IsAutoGrowRight(); + virtual sal_uInt8 GetContentOrientation(); + virtual sal_Bool HonorProtection(); + virtual sal_Bool IsProtected(); + virtual LwpVirtualLayout* GetWaterMarkLayout(); + XFBGImage* GetXFBGImage(); + virtual sal_Bool GetUsePrinterSettings(); + + LwpLayoutScale* GetLayoutScale(){return static_cast<LwpLayoutScale*>(m_LayScale.obj());} + sal_uInt16 GetScaleMode(void); + void SetScaleMode(sal_uInt16 nVal); + sal_uInt16 GetScaleTile(void); + void SetScaleTile(sal_uInt16 nVal); + sal_uInt16 GetScaleCenter(void); + void SetScaleCenter(sal_uInt16 nVal); + sal_uInt32 GetScalePercentage(void); + void SetScalePercentage(sal_uInt32 nVal); + double GetScaleWidth(void); + void SetScaleWidth(double fVal); + double GetScaleHeight(void); + void SetScaleHeight(double fVal); + + sal_Bool CanSizeRight(void); + virtual double GetWidth(); + virtual sal_Int32 GetMinimumWidth(); + sal_Bool IsSizeRightToContent(void); + sal_Bool IsSizeRightToContainer(void); + sal_Int32 DetermineWidth(); + virtual double GetHeight(); + virtual LwpPoint GetOrigin(); + + // added by , 06/01/2004 + sal_Bool IsPatternFill(); + XFBGImage* GetFillPattern(); + // end add + + + //Check whether there are contents in the layout + virtual sal_Bool HasContent(); + //End by + +protected: + void Read(); +protected: + enum + { + DISK_GOT_STYLE_STUFF = 0x01, + DISK_GOT_MISC_STUFF = 0x02 + }; + + LwpObjectID m_Content; + LwpObjectID m_BasedOnStyle; + + // 01/20/2005 + LwpObjectID m_TabPiece; + LwpLayoutStyle* m_pStyleStuff; + LwpLayoutMisc* m_pMiscStuff; + LwpObjectID m_LayGeometry; + LwpObjectID m_LayScale; + LwpObjectID m_LayMargins; + LwpObjectID m_LayBorderStuff; + LwpObjectID m_LayBackgroundStuff; + LwpObjectID m_LayExtBorderStuff; + //end +public: + LwpObjectID* GetContent(){return &m_Content;} + LwpTabOverride* GetTabOverride(); +}; + +class LwpLayout : public LwpMiddleLayout +{ +public: + LwpLayout( LwpObjectHeader &objHdr, LwpSvStream* pStrm ); + virtual ~LwpLayout(); + XFColumns* GetXFColumns(); + XFColumnSep* GetColumnSep(); + LwpShadow* GetShadow(); + XFShadow* GetXFShadow(); +protected: + void Read(); +protected: + // 01/20/2005 + LwpUseWhen* m_pUseWhen; + LwpObjectID m_Positon; + LwpObjectID m_LayColumns; + LwpObjectID m_LayGutterStuff; + LwpObjectID m_LayJoinStuff; + LwpObjectID m_LayShadow; + LwpObjectID m_LayExtJoinStuff; + //end + +public: + LwpUseWhen* VirtualGetUseWhen(); + virtual sal_uInt16 GetNumCols(); + virtual double GetColWidth(sal_uInt16 nIndex); + virtual double GetColGap(sal_uInt16 nIndex); + virtual sal_uInt16 GetUsePage(); +public: + enum UseWhenType + { + StartWithinColume, + StartWithinPage, + StartOnNextPage, + StartOnOddPage, + StartOnEvenPage + }; +public: + virtual UseWhenType GetUseWhenType(); + virtual sal_Bool IsUseOnAllPages(); + virtual sal_Bool IsUseOnAllEvenPages(); + virtual sal_Bool IsUseOnAllOddPages(); + virtual sal_Bool IsUseOnPage(); + LwpObjectID* GetPosition(){ return &m_Positon;} + virtual LwpVirtualLayout* GetContainerLayout(); +}; + +class XFFont; +class LwpPlacableLayout : public LwpLayout +{ +public: + LwpPlacableLayout( LwpObjectHeader &objHdr, LwpSvStream* pStrm ); + virtual ~LwpPlacableLayout(); + virtual sal_uInt8 GetWrapType(); + virtual LwpLayoutRelativity* GetRelativityPiece(); + virtual sal_uInt8 GetRelativeType(); + sal_uInt8 GetRelativeFromWhere(); + LwpPoint GetRelativeDistance(); + sal_uInt8 GetTetherType(); + sal_uInt8 GetTetherWhere(); + virtual sal_Int32 GetBaseLineOffset(); + virtual sal_Bool IsAnchorPage(); + virtual sal_Bool IsAnchorFrame(); + virtual sal_Bool IsAnchorCell(); + virtual void XFConvertFrame(XFContentContainer* pCont, sal_Int32 nStart = 0, sal_Int32 nEnd = 0, sal_Bool bAll = sal_False){} + XFFont* GetFont(); + void SetFont(XFFont* pFont); + enum WrapType + { + LAY_WRAP_AROUND = 1, + LAY_NO_WRAP_BESIDE, + LAY_NO_WRAP_AROUND, + LAY_WRAP_LEFT, + LAY_WRAP_RIGHT, + //OLD_LAY_WRAP_RIGHT, + LAY_WRAP_BOTH, + LAY_WRAP_IRREG_BOTH, + LAY_WRAP_IRREG_LEFT, + LAY_WRAP_IRREG_RIGHT, + LAY_WRAP_IRREG_BIGGEST + }; +protected: + void Read(); +protected: + sal_uInt8 m_nWrapType; + sal_uInt8 m_nBuoyancy; + sal_Int32 m_nBaseLineOffset; + LwpAtomHolder m_Script; + LwpObjectID m_LayRelativity; + sal_uInt16 m_nPageNumber;//for frame anchored to page + XFFont* m_pFont;//for frame position +}; +#endif diff --git a/lotuswordpro/source/filter/lwplayoutdef.hxx b/lotuswordpro/source/filter/lwplayoutdef.hxx new file mode 100644 index 000000000000..d9e250425f3d --- /dev/null +++ b/lotuswordpro/source/filter/lwplayoutdef.hxx @@ -0,0 +1,170 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _LWPLAYOUTDEF_HXX +#define _LWPLAYOUTDEF_HXX + +#define STYLE_AUTOLINK 0x01UL /* content span's to next container */ +#define STYLE_SELECTABLE 0x02UL /* selectable container */ +#define STYLE_SHARED 0x04UL /* is this a global layout style */ +#define STYLE_PAINTMARGINSINCOLOR 0x8UL /* does this layout paint margins */ +#define STYLE_PROTECTED 0x10UL /* is this layout protected */ +#define STYLE_LOCAL 0x20UL /* is local layout */ +#define STYLE_NOERRORCHECK 0x40UL /* is error checking enabled */ +#define STYLE_HEADING 0x80UL /* heading */ +#define STYLE_MUTE 0x100UL /* gray modify menu */ +#define STYLE_SCRIPTING 0x200UL /* scripting enabled */ +#define STYLE_CONTENTREPLACEABLE 0x400UL /* contents can be replaced */ +#define STYLE_PRINTABLE 0x800UL /* contents can be printed */ +#define STYLE_COLUMNBALANCE 0x1000UL +#define STYLE_LANDSCAPE 0x2000UL +#define STYLE_COLLAPSIBLE 0x4000UL +#define STYLE_COLLAPSED 0x8000UL +#define STYLE_NOTCOPYABLE 0x10000UL +#define STYLE_PARENTSELECTABLE 0x20000UL +#define STYLE_CONNECTED 0x40000UL +#define STYLE_OVERRIDE 0x80000UL /* is layout an override */ +#define STYLE_SELECTED 0x100000UL +#define STYLE_CENTEREDHORIZONTALLY 0x200000UL +#define STYLE_CREATIONREVISION 0x400000UL +#define STYLE_DELETIONREVISION 0x800000UL +#define STYLE_PAGEBREAK 0x1000000UL +#define STYLE_MODIFIED 0x2000000UL +#define STYLE_INDIRECT 0x4000000UL /* double click required */ +#define STYLE_COMPLEX 0x8000000UL +#define STYLE_CENTEREDVERTICALLY 0x10000000UL +#define STYLE_BOTTOMALIGNED 0x20000000UL +#define STYLE_NOTGROUPABLE 0x40000000UL +#define STYLE_ABSOLUTE 0x80000000UL +// Don't assign these flags from one layout to another +#define STYLE_DONTASSIGN (STYLE_SHARED) + +#define STYLE2_VSCROLLABLE 0x1UL +#define STYLE2_HSCROLLABLE 0x2UL +#define STYLE2_SCROLLABLE 0x3UL +#define STYLE2_MIRROR 0x4UL +#define STYLE2_PRIVATE 0x8UL +#define STYLE2_PUBLIC 0x00UL +#define STYLE2_PRIVATE2 0x10UL +#define STYLE2_PROTECTED 0x20UL +#define STYLE2_ACCESSRIGHTS 0x30UL +#define STYLE2_HONORPROTECTION 0x40UL +#define STYLE2_CHILDSPANNABLE 0x80UL +#define STYLE2_DEACTIVATED 0x200UL +#define STYLE2_NOCONTENTREFERENCE 0x400UL +#define STYLE2_ADOPTED 0x800UL +#define STYLE2_NOTUSERDELETEABLE 0x1000UL +#define STYLE2_EXPANDRIGHT 0x2000UL +#define STYLE2_EXPANDLEFT 0x4000UL +#define STYLE2_EXPANDUP 0x8000UL +#define STYLE2_EXPANDDOWN 0x10000UL +#define STYLE2_NOTDIRTYABLE 0x20000UL +#define STYLE2_NONHIERARCHICAL 0x40000UL // Now not used +#define STYLE2_NOTSIZABLE 0x80000UL +#define STYLE2_MARGINSSAMEASPARENT 0x100000UL +#define STYLE2_DISPLAYANCHORPOINTS 0x200000UL +#define STYLE2_DISPLAYTETHERPOINTS 0x400000UL +#define STYLE2_SNAPTO 0x800000UL +#define STYLE2_NOINTERSECTSIBLINGS 0x1000000UL +#define STYLE2_LOCALCOLUMNINFO 0x2000000UL +#define STYLE2_INOVERRIDE 0x4000000UL +#define STYLE2_FROMSTYLE 0x8000000UL +#define STYLE2_CONTENTFROMSTYLE 0x10000000UL +#define STYLE2_TEMPORARY 0x20000000UL +#define STYLE2_JUSTIFIABLE 0x40000000UL +// Don't assign these flags from one layout to another +#define STYLE2_DONTASSIGN (STYLE2_DEACTIVATED | \ + STYLE2_NOCONTENTREFERENCE) + +#define STYLE3_ORIGINVALID 0x0001UL +#define STYLE3_WIDTHVALID 0x0002UL +#define STYLE3_MINHEIGHTVALID 0x0004UL +#define STYLE3_STYLELAYOUT 0x0008UL +#define STYLE3_LINELOCATION1 0x0010UL +#define STYLE3_LINELOCATION2 0x0020UL +#define STYLE3_OPENED 0x0040UL +#define STYLE3_ORIENTSWITHPARENT 0x0080UL +#define STYLE3_FROZEN 0x0100UL +#define STYLE3_VALUE_VALID 0x0200UL // moved from CLayout +#define STYLE3_USEPRINTERSETTINGS 0x0400UL // moved from CLayout +#define STYLE3_ISAMIPROTABLE 0x0800UL // wrap tables around frames + // like Ami Pro +#define STYLE3_INLINETOMARGIN 0x1000UL // for Croom + +#define OVER_PLACEMENT 0x01UL +#define OVER_SIZE 0x02UL +#define OVER_MARGINS 0x04UL +#define OVER_BORDERS 0x08UL +#define OVER_BACKGROUND 0x10UL +#define OVER_SHADOW 0x20UL +#define OVER_JOIN 0x40UL +#define OVER_COLUMNS 0x80UL +#define OVER_ROTATION 0x100UL +#define OVER_SCALING 0x200UL +#define OVER_NUMERICS 0x400UL +#define OVER_TABS 0x800UL +#define OVER_SCRIPT 0x1000UL +#define OVER_LEADERS 0x2000UL +#define OVER_ORIENTATION 0x4000UL +#define OVER_MISC 0x8000UL +#define OVER_INTERNAL 0x10000UL // User can't access these props. + +// the first 4 orientations are left-handed +// and are simply rotated forms of each other +#define TEXT_ORIENT_LRTB 0 // left to right, top to bottom +#define TEXT_ORIENT_TBRL 1 // top to bottom, right to left +#define TEXT_ORIENT_RLBT 2 // right to left, bottom to top +#define TEXT_ORIENT_BTLR 3 // bottom to top, left to right + +#endif diff --git a/lotuswordpro/source/filter/lwplaypiece.cxx b/lotuswordpro/source/filter/lwplaypiece.cxx new file mode 100644 index 000000000000..1575668b9d55 --- /dev/null +++ b/lotuswordpro/source/filter/lwplaypiece.cxx @@ -0,0 +1,464 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 28 2005 Created + ************************************************************************/ + +#include "lwplaypiece.hxx" + +#include "lwpfilehdr.hxx" +LwpRotor::LwpRotor() +{} + +LwpRotor::~LwpRotor() +{} + +void LwpRotor:: Read(LwpObjectStream *pStrm) +{ + m_nRotation = pStrm->QuickReadInt16(); +} + +LwpLayoutGeometry::LwpLayoutGeometry(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpVirtualPiece(objHdr, pStrm) +{} + +LwpLayoutGeometry::~LwpLayoutGeometry() +{} + +void LwpLayoutGeometry::Read() +{ + LwpVirtualPiece::Read(); + + if(LwpFileHeader::m_nFileRevision >= 0x000B) + { + m_nWidth = m_pObjStrm->QuickReadInt32(); + m_nHeight = m_pObjStrm->QuickReadInt32(); + m_Origin.Read(m_pObjStrm); + m_AbsoluteOrigin.Read(m_pObjStrm); + m_ContainerRotor.Read(m_pObjStrm); + m_ContentOrientation = m_pObjStrm->QuickReaduInt8(); + m_pObjStrm->SkipExtra(); + } +} +void LwpLayoutGeometry::Parse(IXFStream* pOutputStream) +{} + +LwpLayoutScale::LwpLayoutScale(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpVirtualPiece(objHdr, pStrm) +{} + +LwpLayoutScale::~LwpLayoutScale() +{} + +void LwpLayoutScale::Read() +{ + LwpVirtualPiece::Read(); + + if(LwpFileHeader::m_nFileRevision >= 0x000B) + { + m_nScaleMode = m_pObjStrm->QuickReaduInt16(); + m_nScalePercentage = m_pObjStrm->QuickReaduInt32(); + m_nScaleWidth = m_pObjStrm->QuickReadInt32(); + m_nScaleHeight = m_pObjStrm->QuickReadInt32(); + m_nContentRotation = m_pObjStrm->QuickReaduInt16(); + m_Offset.Read(m_pObjStrm); + + m_nPlacement = m_pObjStrm->QuickReaduInt16(); + m_pObjStrm->SkipExtra(); + } +} + +void LwpLayoutScale::Parse(IXFStream* pOutputStream) +{} + +LwpLayoutMargins::LwpLayoutMargins(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpVirtualPiece(objHdr, pStrm) +{} + +LwpLayoutMargins::~LwpLayoutMargins() +{} + +void LwpLayoutMargins::Read() +{ + LwpVirtualPiece::Read(); + + if( LwpFileHeader::m_nFileRevision >= 0x000B ) + { + m_Margins.Read(m_pObjStrm); + m_ExtMargins.Read(m_pObjStrm); + m_ExtraMargins.Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); + } +} + +void LwpLayoutMargins::Parse(IXFStream* pOutputStream) +{} + +LwpLayoutBorder::LwpLayoutBorder(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpVirtualPiece(objHdr, pStrm) +{} + +LwpLayoutBorder::~LwpLayoutBorder() +{} + +void LwpLayoutBorder::Read() +{ + LwpVirtualPiece::Read(); + + if( LwpFileHeader::m_nFileRevision >= 0x000B ) + { + m_BorderStuff.Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); + } +} + +void LwpLayoutBorder::Parse(IXFStream* pOutputStream) +{} + +LwpLayoutBackground::LwpLayoutBackground(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpVirtualPiece(objHdr, pStrm) +{} + +LwpLayoutBackground::~LwpLayoutBackground() +{} + +void LwpLayoutBackground::Read() +{ + LwpVirtualPiece::Read(); + + if( LwpFileHeader::m_nFileRevision >= 0x000B ) + { + m_BackgroundStuff.Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); + } +} + +void LwpLayoutBackground::Parse(IXFStream* pOutputStream) +{} + +LwpExternalBorder::LwpExternalBorder() +{} + +LwpExternalBorder::~LwpExternalBorder() +{} + +void LwpExternalBorder:: Read(LwpObjectStream *pStrm) +{ + if( LwpFileHeader::m_nFileRevision >= 0x000F ) + { + //enum {BORDER,JOIN}; + m_LeftName.Read(pStrm); + m_TopName.Read(pStrm); + m_RightName.Read(pStrm); + m_BottomName.Read(pStrm); + // TODO: Do not know what it is for + /*cLeftName = CStyleMgr::GetUniqueMetaFileName(cLeftName,BORDER); + cRightName = CStyleMgr::GetUniqueMetaFileName(cRightName,BORDER); + cTopName = CStyleMgr::GetUniqueMetaFileName(cTopName,BORDER); + cBottomName = CStyleMgr::GetUniqueMetaFileName(cBottomName,BORDER);*/ + pStrm->SkipExtra(); + } +} + +LwpLayoutExternalBorder::LwpLayoutExternalBorder(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpVirtualPiece(objHdr, pStrm) +{} + +LwpLayoutExternalBorder::~LwpLayoutExternalBorder() +{} + +void LwpLayoutExternalBorder::Read() +{ + LwpVirtualPiece::Read(); + + if( LwpFileHeader::m_nFileRevision >= 0x000B ) + { + m_ExtranalBorder.Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); + } +} + +void LwpLayoutExternalBorder::Parse(IXFStream* pOutputStream) +{} + +LwpColumnInfo::LwpColumnInfo() +{} + +LwpColumnInfo::~LwpColumnInfo() +{} + +void LwpColumnInfo:: Read(LwpObjectStream *pStrm) +{ + m_nWidth = pStrm->QuickReadInt32(); + m_nGap = pStrm->QuickReadInt32(); +} + +LwpLayoutColumns::LwpLayoutColumns(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpVirtualPiece(objHdr, pStrm),m_pColumns(NULL) +{} + +LwpLayoutColumns::~LwpLayoutColumns() +{ + if(m_pColumns) + { + delete[] m_pColumns; + m_pColumns = NULL; + } + +} + +void LwpLayoutColumns::Read() +{ + LwpVirtualPiece::Read(); + + if( LwpFileHeader::m_nFileRevision >= 0x000B ) + { + m_nNumCols = m_pObjStrm->QuickReaduInt16(); + m_pColumns = new LwpColumnInfo[m_nNumCols]; + for(int i=0; i<m_nNumCols; i++) + { + m_pColumns[i].Read(m_pObjStrm); + } + m_pObjStrm->SkipExtra(); + } +} + +double LwpLayoutColumns::GetColWidth(sal_uInt16 nIndex) +{ + if(nIndex >= m_nNumCols) + { + return 0; + } + return m_pColumns[nIndex].GetWidth(); +} + +double LwpLayoutColumns::GetColGap(sal_uInt16 nIndex) +{ + if(nIndex >= m_nNumCols) + { + return 0; + } + return m_pColumns[nIndex].GetGap(); +} + +void LwpLayoutColumns::Parse(IXFStream* pOutputStream) +{} + +LwpLayoutGutters::LwpLayoutGutters(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpVirtualPiece(objHdr, pStrm) +{} + +LwpLayoutGutters::~LwpLayoutGutters() +{} + +void LwpLayoutGutters::Read() +{ + LwpVirtualPiece::Read(); + + if( LwpFileHeader::m_nFileRevision >= 0x000B ) + { + m_BorderBuffer.Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); + } +} + + +void LwpLayoutGutters::Parse(IXFStream* pOutputStream) +{} + +LwpJoinStuff::LwpJoinStuff() +{} + +LwpJoinStuff::~LwpJoinStuff() +{} + +#include "lwpstyledef.hxx" +void LwpJoinStuff:: Read(LwpObjectStream *pStrm) +{ + m_nWidth = pStrm->QuickReadInt32(); + m_nHeight = pStrm->QuickReadInt32(); + m_nPercentage = pStrm->QuickReaduInt16(); + m_nID = pStrm->QuickReaduInt16(); + m_nCorners = pStrm->QuickReaduInt16(); + m_nScaling = pStrm->QuickReaduInt16(); + m_Color.Read(pStrm); + pStrm->SkipExtra(); + + // Bug fix: if reading in from something older than Release 9 + // then check for the external ID and change it to solid. + if (LwpFileHeader::m_nFileRevision < 0x0010) + { + if (m_nID & EXTERNAL_ID) + m_nID = MITRE; + } +} + +LwpLayoutJoins::LwpLayoutJoins(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpVirtualPiece(objHdr, pStrm) +{} + +LwpLayoutJoins::~LwpLayoutJoins() +{} + +void LwpLayoutJoins::Read() +{ + LwpVirtualPiece::Read(); + + if( LwpFileHeader::m_nFileRevision >= 0x000B ) + { + m_JoinStuff.Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); + } +} + +void LwpLayoutJoins::Parse(IXFStream* pOutputStream) +{} + +LwpLayoutShadow::LwpLayoutShadow(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpVirtualPiece(objHdr, pStrm) +{} + +LwpLayoutShadow::~LwpLayoutShadow() +{} + +void LwpLayoutShadow::Read() +{ + LwpVirtualPiece::Read(); + + if( LwpFileHeader::m_nFileRevision >= 0x000B ) + { + m_Shadow.Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); + } +} + +void LwpLayoutShadow::Parse(IXFStream* pOutputStream) +{} +/************************************************************************** + * @descr: Constructor + * @param: + * @param: + * @return: +**************************************************************************/ +LwpLayoutRelativityGuts::LwpLayoutRelativityGuts() +{ + m_nRelType = LAY_PARENT_RELATIVE; + m_nRelFromWhere = LAY_UPPERLEFT; + m_RelDistance.SetX(0); + m_RelDistance.SetY(0); + m_nTether = LAY_UPPERLEFT; + m_nTetherWhere = LAY_BORDER; + m_nFlags = 0; +} +/************************************************************************** + * @descr: Read LayoutRelativityGuts' infomation. + * @param: + * @param: + * @return: +**************************************************************************/ +void LwpLayoutRelativityGuts::Read(LwpObjectStream *pStrm) +{ + m_nRelType = pStrm->QuickReaduInt8(); + m_nRelFromWhere = pStrm->QuickReaduInt8(); + m_RelDistance.Read(pStrm); + m_nTether = pStrm->QuickReaduInt8(); + m_nTetherWhere = pStrm->QuickReaduInt8(); + if(LwpFileHeader::m_nFileRevision >= 0x000B) + { + m_nFlags = pStrm->QuickReaduInt8(); + } + else + { + m_nFlags = 0; + } +} +/************************************************************************** + * @descr: Constructor + * @param: + * @param: + * @return: +**************************************************************************/ +LwpLayoutRelativity::LwpLayoutRelativity(LwpObjectHeader &objHdr, LwpSvStream *pStrm) + : LwpVirtualPiece(objHdr, pStrm) +{ +} +/************************************************************************** + * @descr: destructor + * @param: + * @param: + * @return: +**************************************************************************/ +LwpLayoutRelativity::~LwpLayoutRelativity() +{ +} + +void LwpLayoutRelativity::Read() +{ + LwpVirtualPiece::Read(); + if(LwpFileHeader::m_nFileRevision >= 0x000B) + { + m_RelGuts.Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); + } +} + +void LwpLayoutRelativity::Parse(IXFStream *pOutputStream) +{ +} diff --git a/lotuswordpro/source/filter/lwplaypiece.hxx b/lotuswordpro/source/filter/lwplaypiece.hxx new file mode 100644 index 000000000000..7e5b827d9fa9 --- /dev/null +++ b/lotuswordpro/source/filter/lwplaypiece.hxx @@ -0,0 +1,392 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 28 2005 Created + ************************************************************************/ +#ifndef _LWPLAYOUTPIECE_HXX +#define _LWPLAYOUTPIECE_HXX + +#include "lwppiece.hxx" +#include "lwpbasetype.hxx" + +class LwpRotor +{ +public: + LwpRotor(); + ~LwpRotor(); + void Read(LwpObjectStream *pStrm); +private: + sal_Int16 m_nRotation; //angle + sal_uInt16 m_nSin; + sal_uInt16 m_nCos; +}; + +class LwpLayoutGeometry : public LwpVirtualPiece +{ +public: + LwpLayoutGeometry(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + virtual ~LwpLayoutGeometry(); + virtual void Parse(IXFStream* pOutputStream); + sal_Int32 GetWidth() { return m_nWidth; } + sal_Int32 GetHeight() { return m_nHeight; } + LwpPoint GetOrigin() { return m_Origin; } + LwpPoint GetAbsoluteOrigin() { return m_AbsoluteOrigin; } + sal_uInt8 GetContentOrientation(){ return m_ContentOrientation;} + +protected: + virtual void Read(); +protected: + sal_Int32 m_nWidth; + sal_Int32 m_nHeight; + LwpPoint m_Origin; + LwpPoint m_AbsoluteOrigin; + LwpRotor m_ContainerRotor; + sal_uInt8 m_ContentOrientation; +}; + +class LwpLayoutScale : public LwpVirtualPiece +{ +public: + enum {ORIGINAL_SIZE = 1, FIT_IN_FRAME = 2, PERCENTAGE = 4, + CUSTOM = 8, MAINTAIN_ASPECT_RATIO = 16}; + + enum {CENTERED = 1, TILED = 2}; + LwpLayoutScale(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + virtual ~LwpLayoutScale(); + virtual void Parse(IXFStream* pOutputStream); + sal_uInt16 GetScaleMode(){return m_nScaleMode;} + void SetScaleMode(sal_uInt16 nVal){m_nScaleMode = nVal;} + sal_uInt32 GetScalePercentage(){return m_nScalePercentage;} + void SetScalePercentage(sal_uInt32 nVal){m_nScalePercentage = nVal;} + sal_Int32 GetScaleWidth(){return m_nScaleWidth;} + void SetScaleWidth(sal_Int32 nVal){m_nScaleWidth = nVal;} + sal_Int32 GetScaleHeight(){return m_nScaleHeight;} + void SetScaleHeight(sal_Int32 nVal){m_nScaleHeight = nVal;} + sal_uInt16 GetContentRotation(){return m_nContentRotation;} + void SetContentRotation(sal_uInt16 nVal){m_nContentRotation = nVal;} + sal_uInt16 GetPlacement(){return m_nPlacement;} + void SetPlacement(sal_uInt16 nVal){m_nPlacement = nVal;} + // add by , 04/05/2005 + inline LwpPoint* GetOffset() {return &m_Offset;}; + // end add +protected: + virtual void Read(); +protected: + sal_uInt16 m_nScaleMode; + sal_uInt32 m_nScalePercentage; + sal_Int32 m_nScaleWidth; + sal_Int32 m_nScaleHeight; + sal_uInt16 m_nContentRotation; + LwpPoint m_Offset; + sal_uInt16 m_nPlacement; +}; + +#include "lwpmargins.hxx" + +class LwpLayoutMargins : public LwpVirtualPiece +{ +public: + LwpLayoutMargins(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + virtual ~LwpLayoutMargins(); + virtual void Parse(IXFStream* pOutputStream); + LwpMargins* GetMargins() { return &m_Margins; } + LwpMargins* GetExtMargins(){ return &m_ExtMargins;} +protected: + virtual void Read(); +protected: + LwpMargins m_Margins; + LwpMargins m_ExtMargins; + LwpMargins m_ExtraMargins; +}; + +#include "lwpborderstuff.hxx" +class LwpLayoutBorder : public LwpVirtualPiece +{ +public: + LwpLayoutBorder(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + virtual ~LwpLayoutBorder(); + virtual void Parse(IXFStream* pOutputStream); + LwpBorderStuff* GetBorderStuff(){ return &m_BorderStuff;} +protected: + virtual void Read(); +protected: + LwpBorderStuff m_BorderStuff; +}; + +class LwpLayoutBackground : public LwpVirtualPiece +{ +public: + LwpLayoutBackground(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + virtual ~LwpLayoutBackground(); + virtual void Parse(IXFStream* pOutputStream); + LwpBackgroundStuff* GetBackgoudStuff(){return &m_BackgroundStuff;} +protected: + virtual void Read(); +protected: + LwpBackgroundStuff m_BackgroundStuff; +}; + +class LwpExternalBorder +{ +public: + LwpExternalBorder(); + ~LwpExternalBorder(); + void Read(LwpObjectStream *pStrm); +private: + LwpAtomHolder m_LeftName; + LwpAtomHolder m_TopName; + LwpAtomHolder m_RightName; + LwpAtomHolder m_BottomName; +}; + +//It seems that this class is used for designer border. Only read now. +class LwpLayoutExternalBorder : public LwpVirtualPiece +{ +public: + LwpLayoutExternalBorder(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + virtual ~LwpLayoutExternalBorder(); + virtual void Parse(IXFStream* pOutputStream); +protected: + virtual void Read(); +protected: + LwpExternalBorder m_ExtranalBorder; +}; + +class LwpColumnInfo +{ +public: + LwpColumnInfo(); + ~LwpColumnInfo(); + void Read(LwpObjectStream *pStrm); + inline double GetWidth(){return LwpTools::ConvertFromUnitsToMetric(m_nWidth);} + inline void SetWidth(sal_Int32 w){m_nWidth = w;} + inline double GetGap(){return LwpTools::ConvertFromUnitsToMetric(m_nGap);} + inline void SetGap(sal_Int32 g){m_nGap = g;} +private: + sal_Int32 m_nWidth; + sal_Int32 m_nGap; +}; + +class LwpLayoutColumns : public LwpVirtualPiece +{ +public: + LwpLayoutColumns(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + virtual ~LwpLayoutColumns(); + virtual void Parse(IXFStream* pOutputStream); + inline sal_uInt16 GetNumCols(){return m_nNumCols;}; + double GetColWidth(sal_uInt16 nIndex); + double GetColGap(sal_uInt16 nIndex); +protected: + virtual void Read(); +protected: + sal_uInt16 m_nNumCols; + LwpColumnInfo* m_pColumns; +}; + +class LwpLayoutGutters : public LwpVirtualPiece +{ +public: + LwpLayoutGutters(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + virtual ~LwpLayoutGutters(); + virtual void Parse(IXFStream* pOutputStream); + inline virtual LwpBorderStuff* GetBorderStuff(){return &m_BorderBuffer;} +protected: + virtual void Read(); +protected: + LwpBorderStuff m_BorderBuffer; +}; + +class LwpJoinStuff +{ +public: + LwpJoinStuff(); + ~LwpJoinStuff(); + void Read(LwpObjectStream *pStrm); +private: + sal_uInt16 m_nPercentage; + sal_uInt16 m_nCorners; + sal_Int32 m_nWidth; + sal_Int32 m_nHeight; + + enum JoinType + { + MITRE = 1, + NEGATE = 2, + ROUNDED = 3, + RECTANGLE = 4, + SPECIAL = 5, + DIAGONAL = 6, + NEGATE_NO_CROSS = 7, + DOG_EAR_PAGE = 8, + DESKTOP = 9, + BOX_HIGHLIGHT = 10, +//#ifdef BORDER_BMP + STAR = 11, + ROPE = 12, + DECO1 = 13, + DECO2 = 14, + RAIN = 15, + PIN = 16, + ROSE = 17, + SUNF = 18, + DECO3 = 19, +//#endif //BORDER_BMP + WARNING = 20, + BUBBLE = 21, + GIRDER = 22, + SMILE = 23, + ARROW = 24, + MAXJOIN = 24 + }; + + sal_uInt16 m_nID;//JoinType + sal_uInt16 m_nScaling; + LwpColor m_Color; +}; + +class LwpLayoutJoins : public LwpVirtualPiece +{ +public: + LwpLayoutJoins(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + virtual ~LwpLayoutJoins(); + virtual void Parse(IXFStream* pOutputStream); +protected: + virtual void Read(); +protected: + LwpJoinStuff m_JoinStuff; +}; + +#include "lwpshadow.hxx" + +class LwpLayoutShadow : public LwpVirtualPiece +{ +public: + LwpLayoutShadow(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + virtual ~LwpLayoutShadow(); + virtual void Parse(IXFStream* pOutputStream); + LwpShadow* GetShadow(){return &m_Shadow;} +protected: + virtual void Read(); +protected: + LwpShadow m_Shadow; +}; + +/*class LwpLayoutRelativityGuts*/ +class LwpLayoutRelativityGuts +{ +public: + LwpLayoutRelativityGuts(); + void Read(LwpObjectStream *pStrm); + sal_uInt8 GetRelativeType(){ return m_nRelType;} + sal_uInt8 GetRelativeFromWhere(){ return m_nRelFromWhere;} + LwpPoint GetRelativeDistance(){ return m_RelDistance;} + sal_uInt8 GetTetherType(){ return m_nTether;} + sal_uInt8 GetTetherWhere(){ return m_nTetherWhere;} +public: + enum RelativeType + { + LAY_PARENT_RELATIVE = 1, + LAY_PARA_RELATIVE, + LAY_INLINE, + LAY_INLINE_NEWLINE, + LAY_CONTENT_RELATIVE, + LAY_INLINE_VERTICAL + }; + enum WhereType + { + LAY_UPPERLEFT = 1, + LAY_MIDDLETOP, + LAY_UPPERRIGHT, + LAY_MIDDLELEFT, + LAY_MIDDLERIGHT, + LAY_LOWERLEFT, + LAY_MIDDLEBOTTOM, + LAY_LOWERRIGHT, + LAY_MIDDLE + }; + enum TetherWhereType + { + LAY_INTERNAL = 1, + LAY_EXTERNAL, + LAY_BORDER + }; +private: + sal_uInt8 m_nRelType; + sal_uInt8 m_nRelFromWhere; + LwpPoint m_RelDistance; + sal_uInt8 m_nTether; + sal_uInt8 m_nTetherWhere; + sal_uInt8 m_nFlags; +}; + +class LwpLayoutRelativity: public LwpVirtualPiece +{ +public: + LwpLayoutRelativity(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + virtual ~LwpLayoutRelativity(); + virtual void Parse(IXFStream* pOutputStream); + LwpLayoutRelativityGuts* GetRelGuts(){return &m_RelGuts;} +protected: + virtual void Read(); +protected: + LwpLayoutRelativityGuts m_RelGuts; +}; + +#endif diff --git a/lotuswordpro/source/filter/lwplnopts.cxx b/lotuswordpro/source/filter/lwplnopts.cxx new file mode 100644 index 000000000000..8b48871628e9 --- /dev/null +++ b/lotuswordpro/source/filter/lwplnopts.cxx @@ -0,0 +1,96 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "lwpglobalmgr.hxx" +#include "lwplnopts.hxx" + +LwpLineNumberOptions::LwpLineNumberOptions(LwpObjectStream* pStrm) +{ + Read(pStrm); +} +/** + * @descr Read LwpLineNumberOptions from object stream + */ +void LwpLineNumberOptions::Read(LwpObjectStream *pStrm) +{ + pStrm->QuickRead(&m_nType, sizeof(m_nType)); + pStrm->QuickRead(&m_nFlags, sizeof(m_nFlags)); + pStrm->QuickRead(&m_nSeparator, sizeof(m_nSeparator)); + pStrm->QuickRead(&m_nSpacing, sizeof(m_nSpacing)); + pStrm->QuickRead(&m_nDistance, sizeof(m_nDistance)); + pStrm->SkipExtra(); +} +/** + * @descr set XFLineNumberConfig + */ +void LwpLineNumberOptions::RegisterStyle() +{ + if (m_nType == NUMBER_NONE) + return; + XFLineNumberConfig* pLineNumber = new XFLineNumberConfig; + pLineNumber->SetNumberPosition(enumXFLineNumberLeft); + pLineNumber->SetNumberOffset(LwpTools::ConvertFromUnitsToMetric(m_nDistance)); + pLineNumber->SetNumberIncrement(m_nSeparator); + if (m_nFlags & LN_RESETEACHPAGE) + pLineNumber->SetRestartOnPage(sal_True); + else + pLineNumber->SetRestartOnPage(sal_False); + if (m_nFlags & LN_COUNTBLANKLINES) + pLineNumber->SetCountEmptyLines(sal_True); + else + pLineNumber->SetCountEmptyLines(sal_False); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + pXFStyleManager->SetLineNumberConfig(pLineNumber); +} diff --git a/lotuswordpro/source/filter/lwplnopts.hxx b/lotuswordpro/source/filter/lwplnopts.hxx new file mode 100644 index 000000000000..d257ad08ba63 --- /dev/null +++ b/lotuswordpro/source/filter/lwplnopts.hxx @@ -0,0 +1,98 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPLINENUMBEROPTIONS_HXX +#define _LWPLINENUMBEROPTIONS_HXX + +#include "lwpobjstrm.hxx" +#include "lwptools.hxx" +#include "xfilter/xflinenumberconfig.hxx" +#include "xfilter/xfstylemanager.hxx" +/** + * @brief line number options +*/ +class LwpLineNumberOptions +{ +public: + LwpLineNumberOptions(LwpObjectStream* pStrm); + ~LwpLineNumberOptions(){}; +protected: + sal_uInt16 m_nType; + sal_uInt16 m_nFlags; + sal_uInt16 m_nSeparator; + sal_uInt32 m_nSpacing; + sal_uInt32 m_nDistance; +public: + enum + { + NUMBER_NONE, NUMBER_LINES, NUMBER_TEXTLINESONLY + }; + enum + { + LN_RESETEACHPAGE = 0x01, + LN_COUNTBLANKLINES = 0x02 + }; + void Read(LwpObjectStream *pStrm); + void RegisterStyle(); +}; +#endif diff --git a/lotuswordpro/source/filter/lwpmargins.hxx b/lotuswordpro/source/filter/lwpmargins.hxx new file mode 100644 index 000000000000..b42deca94f32 --- /dev/null +++ b/lotuswordpro/source/filter/lwpmargins.hxx @@ -0,0 +1,117 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +// +#ifndef _LWPMARGINS_HXX +#define _LWPMARGINS_HXX + +#include "lwpobjstrm.hxx" +#include "lwptools.hxx" + +const sal_uInt8 MARGIN_LEFT = 0; +const sal_uInt8 MARGIN_RIGHT = 1; +const sal_uInt8 MARGIN_TOP = 2; +const sal_uInt8 MARGIN_BOTTOM = 3; + +class LwpMargins +{ +public: + LwpMargins():m_nLeft(0),m_nTop(0),m_nRight(0),m_nBottom(0){} +public: + void Read(LwpObjectStream *pStrm) + { + pStrm->QuickRead(&m_nLeft, 4); + pStrm->QuickRead(&m_nTop, 4); + pStrm->QuickRead(&m_nRight, 4); + pStrm->QuickRead(&m_nBottom, 4); + pStrm->SkipExtra(); + } + //add by , 01/26/2004 + inline void operator = (const LwpMargins& rOther); + inline double GetMarginsValue(const sal_uInt8& nWhichSide); + //end add +private: + sal_Int32 m_nLeft; + sal_Int32 m_nTop; + sal_Int32 m_nRight; + sal_Int32 m_nBottom; +}; + +inline void LwpMargins::operator = (const LwpMargins& rOther) +{ + m_nLeft = rOther.m_nLeft; + m_nTop = rOther.m_nTop; + m_nRight = rOther.m_nRight; + m_nBottom = rOther.m_nBottom; +} + +inline double LwpMargins::GetMarginsValue(const sal_uInt8& nWhichSide) +{ + switch (nWhichSide) + { + case MARGIN_LEFT://left + return LwpTools::ConvertFromUnitsToMetric(m_nLeft); + break; + case MARGIN_RIGHT://right + return LwpTools::ConvertFromUnitsToMetric(m_nRight); + break; + case MARGIN_TOP://top + return LwpTools::ConvertFromUnitsToMetric(m_nTop); + break; + case MARGIN_BOTTOM://bottom + return LwpTools::ConvertFromUnitsToMetric(m_nBottom); + break; + } +} +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwpmarker.cxx b/lotuswordpro/source/filter/lwpmarker.cxx new file mode 100644 index 000000000000..a31b369dc8bc --- /dev/null +++ b/lotuswordpro/source/filter/lwpmarker.cxx @@ -0,0 +1,572 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ +#include "lwpfoundry.hxx" +#include "lwpfilehdr.hxx" +#include "lwpstory.hxx" +#include "lwpmarker.hxx" +#include "lwpproplist.hxx" +#include "lwpglobalmgr.hxx" +#include "xfilter/xfplaceholder.hxx" +#include "xfilter/xfinputlist.hxx" + +LwpMarker::LwpMarker(LwpObjectHeader &objHdr, LwpSvStream *pStrm):LwpDLNFPVList(objHdr,pStrm) +{ +} + +void LwpMarker::Read() +{ + LwpDLNFPVList::Read(); + m_objContent.ReadIndexed(m_pObjStrm); + m_objLayout.ReadIndexed(m_pObjStrm); + m_objMarkerList.ReadIndexed(m_pObjStrm); + m_nNeedUpdate = m_pObjStrm->QuickReaduInt16(); + m_nFlag = m_pObjStrm->QuickReaduInt16(); + m_nPageNumber = m_pObjStrm->QuickReaduInt16(); + + m_pObjStrm->SkipExtra(); +} + +OUString LwpMarker::GetNamedProperty(OUString name) +{ + LwpPropList* pProp = GetPropList(); + if (pProp) + return pProp->GetNamedProperty(name); + else + return OUString(A2OUSTR("")); +} + +LwpStoryMarker::LwpStoryMarker(LwpObjectHeader &objHdr, LwpSvStream *pStrm):LwpMarker(objHdr,pStrm) +{ +} + +void LwpStoryMarker::Read() +{ + LwpMarker::Read(); + m_nFlag = m_pObjStrm->QuickReaduInt16(); + m_Range.Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); +} + +void LwpFribRange::Read(LwpObjectStream* pObjStrm) +{ + m_StartPara.ReadIndexed(pObjStrm); + m_EndPara.ReadIndexed(pObjStrm); +} + +LwpCHBlkMarker::LwpCHBlkMarker(LwpObjectHeader &objHdr, LwpSvStream *pStrm):LwpStoryMarker(objHdr,pStrm) +{ +} + +void LwpCHBlkMarker::Read() +{ + LwpStoryMarker::Read(); + m_objPromptStory.ReadIndexed(m_pObjStrm); + m_Help.Read(m_pObjStrm); + m_nAction = m_pObjStrm->QuickReaduInt16(); + m_nTab = m_pObjStrm->QuickReaduInt32(); + m_nFlag = m_pObjStrm->QuickReaduInt16(); + if(m_pObjStrm->CheckExtra()) + { + m_Mirror.Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); + } +} + +OUString LwpCHBlkMarker::GetPromptText() +{ + LwpStory* pStory = NULL; + if (m_objPromptStory.obj()) + pStory = static_cast<LwpStory*>(m_objPromptStory.obj()); + if (pStory) + return pStory->GetContentText(); + return A2OUSTR(""); +} + +void LwpCHBlkMarker::ConvertCHBlock(XFContentContainer* pXFPara, sal_uInt8 nType) +{ + sal_uInt16 nAction = GetAction(); + + switch(nAction) + { + case CLICKHERE_CHBEHAVIORTEXT: + case CLICKHERE_CHBEHAVIORTABLE: + case CLICKHERE_CHBEHAVIORPICTURE: + case CLICKHERE_CHBEHAVIOROLEOBJECT: + ProcessPlaceHolder(pXFPara,nAction,nType); + break; + case CLICKHERE_CHBEHAVIORCHART: + case CLICKHERE_CHBEHAVIORDRAWING: + case CLICKHERE_CHBEHAVIORGLOSSARY: + case CLICKHERE_CHBEHAVIOREQUATION: + case CLICKHERE_CHBEHAVIORSYMBOL: + case CLICKHERE_CHBEHAVIORPAGENUM: + case CLICKHERE_CHBEHAVIORDOCFIELD: + case CLICKHERE_CHBEHAVIORDATETIME: + ProcessOtherCHB(pXFPara,nType); + break; +// ProcessPageNumber(pXFPara,nType); +// break; + case CLICKHERE_CHBEHAVIORSTRINGLIST: + ProcessKeylist(pXFPara,nType); + break; + default: + break; + } +} + +void LwpCHBlkMarker::ProcessPlaceHolder(XFContentContainer* pXFPara,sal_uInt16 nAction, + sal_uInt8 nType) +{ + sal_Bool bFillFlag = IsHasFilled(); + sal_Bool bHelpFlag = IsBubbleHelp(); + + if ( bFillFlag ) + return; + if (nType == MARKER_START) + { + XFHolderStart* pHolder= new XFHolderStart; + switch(nAction) + { + case CLICKHERE_CHBEHAVIORTEXT: + pHolder->SetType(A2OUSTR("text")); + break; + case CLICKHERE_CHBEHAVIORTABLE: + pHolder->SetType(A2OUSTR("table")); + break; + case CLICKHERE_CHBEHAVIORPICTURE: + pHolder->SetType(A2OUSTR("image")); + break; + case CLICKHERE_CHBEHAVIOROLEOBJECT: + pHolder->SetType(A2OUSTR("object")); + break; + default: + break; + } + + if (bHelpFlag) + pHolder->SetDesc(m_Help.str()); + pHolder->SetPrompt(GetPromptText()); + pXFPara->Add(pHolder); + } + else if (nType == MARKER_END) + { + XFHolderEnd* pHolder = new XFHolderEnd; + pXFPara->Add(pHolder); + } +} + +void LwpCHBlkMarker::ProcessOtherCHB(XFContentContainer* pXFPara,sal_uInt8 nType) +{ + sal_Bool bFillFlag = IsHasFilled(); + sal_Bool bHelpFlag = IsBubbleHelp(); + + if ( bFillFlag ) + return; + if (nType == MARKER_START) + { + XFHolderStart* pHolder= new XFHolderStart; + pHolder->SetType(A2OUSTR("text")); + if (bHelpFlag) + pHolder->SetDesc(m_Help.str()); + pHolder->SetPrompt(GetPromptText()); + pXFPara->Add(pHolder); + } + else if (nType == MARKER_END) + { + XFHolderEnd* pHolder = new XFHolderEnd; + pXFPara->Add(pHolder); + } + +} + +void LwpCHBlkMarker::ProcessPageNumber(XFContentContainer* pXFPara,sal_uInt8 nType) +{ + sal_Bool bFillFlag = IsHasFilled(); + sal_Bool bHelpFlag = IsBubbleHelp(); + + if ( bFillFlag ) + return; + if (nType == MARKER_START) + { + XFHolderStart* pHolder= new XFHolderStart; + pHolder->SetType(A2OUSTR("text")); + if (bHelpFlag) + pHolder->SetDesc(m_Help.str()); + pHolder->SetPrompt(GetPromptText()); + pXFPara->Add(pHolder); + } + else if (nType == MARKER_END) + { + XFHolderEnd* pHolder = new XFHolderEnd; + pXFPara->Add(pHolder); + } + +} + +//note: there will be a blank to mark the list +//all input content of key list processed as normal text +void LwpCHBlkMarker::ProcessKeylist(XFContentContainer* pXFPara,sal_uInt8 nType) +{ + sal_Bool bFillFlag = IsHasFilled(); + + if ( bFillFlag ) + { + if (nType == MARKER_START) + { + EnumAllKeywords();//traverse the proplist to find all keywords + XFInputList* pList = new XFInputList; + pList->SetName(LwpDLNFPVList::m_Name.str()); + pList->SetLabels(m_Keylist); + pXFPara->Add(pList); + } + else if (nType == MARKER_END)//skip + { + } + } + else + { + if (nType == MARKER_START) + { + EnumAllKeywords(); + XFInputList* pList = new XFInputList; + pList->SetName(LwpDLNFPVList::m_Name.str()); + pList->SetLabels(m_Keylist); + pXFPara->Add(pList); + + XFHolderStart* pHolder= new XFHolderStart; + pHolder->SetType(A2OUSTR("text")); + pHolder->SetPrompt(GetPromptText()); + pXFPara->Add(pHolder); + } + else if (nType == MARKER_END) + { + XFHolderEnd* pHolder = new XFHolderEnd; + pXFPara->Add(pHolder); + } + } +} + +sal_Bool LwpCHBlkMarker::IsHasFilled() +{ + if (CHB_PROMPT & m_nFlag) + return sal_False; + return sal_True; +} + +sal_Bool LwpCHBlkMarker::IsBubbleHelp() +{ + return (CHB_HELP & m_nFlag); +} + +void LwpCHBlkMarker::EnumAllKeywords() +{ + OUString name1(A2OUSTR("")); + OUString value1(A2OUSTR("")); + OUString name2(A2OUSTR("start")); + LwpPropList* pProp = GetPropList(); + if (!pProp) + return; + while(name2.getLength()>0) + { + name2 = pProp->EnumNamedProperty(name1,value1); + if ( name1.match(A2OUSTR("LIST"),0) ) + { + m_Keylist.push_back(value1); + } + name1 = name2; + } +} + + +LwpBookMark::LwpBookMark(LwpObjectHeader &objHdr, LwpSvStream *pStrm) + : LwpDLNFVList(objHdr,pStrm) +{ +} + +void LwpBookMark::Read() +{ + LwpDLNFVList::Read(); + m_objMarker.ReadIndexed(m_pObjStrm); + if (LwpFileHeader::m_nFileRevision < 0x0008) + { + if (m_pObjStrm->QuickReadBool()) + m_nFlag |= BKMK_NOTESFX; + } + else + m_nFlag = m_pObjStrm->QuickReaduInt16(); + m_pObjStrm->SkipExtra(); +} + +sal_Bool LwpBookMark::IsRightMarker(LwpObjectID objMarker) +{ + if (objMarker == m_objMarker) + return sal_True; + return sal_False; +} + +OUString LwpBookMark::GetName() +{ + if (LwpDLNFVList::GetName()) + return LwpDLNFVList::GetName()->str(); + else + return OUString(A2OUSTR("")); +} + +sal_Bool LwpBookMark::IsRightName(OUString sName) +{ + return sName.equals(GetName()); +} + +LwpFieldMark::LwpFieldMark(LwpObjectHeader &objHdr, LwpSvStream *pStrm):LwpStoryMarker(objHdr,pStrm), + m_bHasStyle(sal_False),m_bHasStart(sal_False),m_bRevisionFlag(sal_False),m_pFrib(NULL) +{ +} + +void LwpFieldMark::Read() +{ + LwpStoryMarker::Read(); + m_Formula.Read(m_pObjStrm); + m_objFormulaStory.ReadIndexed(m_pObjStrm); + if (LwpFileHeader::m_nFileRevision < 0x000B) + return; + m_objResultContent.ReadIndexed(m_pObjStrm); + m_nFlag = m_pObjStrm->QuickReaduInt16(); + m_nFieldType = m_pObjStrm->QuickReaduInt16(); + m_pObjStrm->SkipExtra(); +} + +void LwpFieldMark::ParseIndex(OUString& sKey1,OUString& sKey2) +{ + OUString sFormula = m_Formula.str(); + sal_Int32 index[4]; + sal_Unicode ch(0x0022);//" + index[0] = sFormula.indexOf(ch,0); + index[1] = sFormula.indexOf(ch,index[0]+1); + + index[2] = sFormula.indexOf(ch,index[1]+1); + index[3] = sFormula.indexOf(ch,index[2]+1); + if (index[0]>=0 && index[1]>=0) + sKey1 = sFormula.copy(index[0]+1,index[1]-index[0]-1); + else + sKey1 = A2OUSTR(""); + if (index[2]>=0 && index[3]>=0) + sKey2 = sFormula.copy(index[2]+1,index[3]-index[2]-1); + else + sKey2 = A2OUSTR(""); +} + +void LwpFieldMark::ParseTOC(OUString& sLevel,OUString& sText) +{ + OUString sFormula = m_Formula.str(); + sal_Int32 index[4]; + sal_Unicode ch1(0x0020);//space + sal_Unicode ch2(0x0022);//" + + index[0] = sFormula.indexOf(ch1,0); + index[1] = sFormula.indexOf(ch1,index[0]+1); + + index[2] = sFormula.indexOf(ch2,index[1]+1); + index[3] = sFormula.indexOf(ch2,index[2]+1); + if (index[0]>=0 && index[1]>=0) + sLevel = sFormula.copy(index[0]+1,index[1]-index[0]-1); + else + sLevel = A2OUSTR(""); + if (index[2]>=0 && index[3]>=0) + sText = sFormula.copy(index[2]+1,index[3]-index[2]-1); + else + sText = A2OUSTR(""); +} + +sal_Bool LwpFieldMark::IsFormulaInsert() +{ + if (m_nFlag & FF_FORMULAINSERTED) + return sal_True; + return sal_False; +} + +sal_Bool LwpFieldMark::IsDateTimeField(sal_uInt8& type,OUString& formula) +{ + OUString sFormula = m_Formula.str(); + sal_Int32 index; + sal_Unicode ch1(0x0020);//space + OUString tag; + + index = sFormula.indexOf(ch1,0); + if (index < 0) + { + if (sFormula == A2OUSTR("TotalEditingTime")) + { + type = DATETIME_TOTALTIME; + return sal_True; + } + return sal_False; + } + + tag = sFormula.copy(0,index); + if (tag == A2OUSTR("Now()")) + { + type = DATETIME_NOW; + formula = sFormula.copy(index+1,sFormula.getLength()-index-1); + return sal_True; + } + else if (tag == A2OUSTR("CreateDate")) + { + type = DATETIME_CREATE; + formula = sFormula.copy(index+1,sFormula.getLength()-index-1); + return sal_True; + } + else if (tag == A2OUSTR("EditDate")) + { + type = DATETIME_LASTEDIT; + formula = sFormula.copy(index+1,sFormula.getLength()-index-1); + return sal_True; + } + else if (tag == A2OUSTR("YesterdaysDate") || tag == A2OUSTR("TomorrowsDate") + || tag == A2OUSTR("TodaysDate")) + { + type = DATETIME_SKIP; + return sal_True; + } + else + return sal_False; +} + +sal_Bool LwpFieldMark::IsCrossRefField(sal_uInt8& nType, OUString& sMarkName) +{ + OUString sFormula = m_Formula.str(); + sal_Int32 index; + sal_Unicode ch1(0x0020);//space + OUString tag; + + index = sFormula.indexOf(ch1,0); + if (index < 0) + { + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + LwpBookmarkMgr* pMarkMgr = pGlobal->GetLwpBookmarkMgr(); + if (pMarkMgr->FindBookmark(sFormula)) + { + sMarkName = sFormula; + nType = CROSSREF_TEXT; + return sal_True; + } + else + return sal_False; + } + + tag = sFormula.copy(0,index); + if (tag == A2OUSTR("PageRef")) + { + sMarkName = sFormula.copy(index+1,sFormula.getLength()-index-1); + nType = CROSSREF_PAGE; + return sal_True; + } + else if (tag == A2OUSTR("ParaRef")) + { + sMarkName = sFormula.copy(index+1,sFormula.getLength()-index-1); + nType = CROSSREF_PARANUMBER; + return sal_True; + } + else + return sal_False; +} + +sal_Bool LwpFieldMark::IsDocPowerField(sal_uInt8& nType,OUString& sFormula) +{ + sFormula = m_Formula.str(); + + if (sFormula == A2OUSTR("Description")) + { + nType = DOC_DESCRIPTION; + return sal_True; + } + else if (sFormula == A2OUSTR("NumPages")) + { + nType = DOC_NUMPAGES; + return sal_True; + } + else if (sFormula == A2OUSTR("NumChars")) + { + nType = DOC_NUMCHARS; + return sal_True; + } + else if (sFormula == A2OUSTR("NumWords")) + { + nType = DOC_NUMWORDS; + return sal_True; + } + else + { + return sal_False; + } +} + +LwpRubyMarker::LwpRubyMarker(LwpObjectHeader &objHdr, LwpSvStream *pStrm):LwpStoryMarker(objHdr,pStrm) +{ +} + +void LwpRubyMarker::Read() +{ + LwpStoryMarker::Read(); + m_objLayout.ReadIndexed(m_pObjStrm); + m_pObjStrm->SkipExtra(); +} diff --git a/lotuswordpro/source/filter/lwpmarker.hxx b/lotuswordpro/source/filter/lwpmarker.hxx new file mode 100644 index 000000000000..15c156ee952f --- /dev/null +++ b/lotuswordpro/source/filter/lwpmarker.hxx @@ -0,0 +1,281 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ + + +#ifndef _LWPMARKER_HXX_ +#define _LWPMARKER_HXX_ + +#include "lwpobj.hxx" +#include "lwpobjid.hxx" +#include "lwpdlvlist.hxx" +#include "lwpfrib.hxx" +#include "xfilter/xftextspan.hxx" + +class LwpMarker : public LwpDLNFPVList +{ +public: + LwpMarker(LwpObjectHeader &objHdr, LwpSvStream *pStrm); + ~LwpMarker(){}; + void Read(); + OUString GetNamedProperty(OUString name); +protected: + enum{ + MARKER_START=1, + MARKER_END=2 + }; +private: + sal_uInt16 m_nFlag; + sal_uInt16 m_nPageNumber; + sal_uInt16 m_nNeedUpdate; + LwpObjectID m_objLayout; + LwpObjectID m_objMarkerList; + LwpObjectID m_objContent; + +}; + +class LwpFribRange +{ +public: + LwpFribRange(){}; + ~LwpFribRange(){}; + void Read(LwpObjectStream* pObjStrm); +private: + LwpObjectID m_StartPara; + LwpObjectID m_EndPara; +}; + +class LwpStoryMarker : public LwpMarker +{ +public: + LwpStoryMarker(LwpObjectHeader &objHdr, LwpSvStream *pStrm); + ~LwpStoryMarker(){}; + void Read(); +private: + LwpFribRange m_Range; + sal_uInt16 m_nFlag; +}; + +class LwpCHBlkMarker : public LwpStoryMarker +{ +public: + LwpCHBlkMarker(LwpObjectHeader &objHdr, LwpSvStream *pStrm); + ~LwpCHBlkMarker(){}; + void Read(); + sal_uInt16 GetAction(){return m_nAction;} + void ConvertCHBlock(XFContentContainer* pXFPara,sal_uInt8 nType); + enum{ + CLICKHERE_CHBEHAVIORTEXT=1, + CLICKHERE_CHBEHAVIORTABLE=2, + CLICKHERE_CHBEHAVIORPICTURE=3, + CLICKHERE_CHBEHAVIOROLEOBJECT=4, + CLICKHERE_CHBEHAVIORCHART=5, + CLICKHERE_CHBEHAVIORDRAWING=6, + CLICKHERE_CHBEHAVIORFILE=7, + CLICKHERE_CHBEHAVIORGLOSSARY=8, + CLICKHERE_CHBEHAVIOREQUATION=9, + CLICKHERE_CHBEHAVIORINTERNETLINK=10, + CLICKHERE_CHBEHAVIORSTRINGLIST=11, + CLICKHERE_CHBEHAVIORDATETIME=12, + CLICKHERE_CHBEHAVIORSYMBOL=13, + CLICKHERE_CHBEHAVIORDOCFIELD=14, + CLICKHERE_CHBEHAVIORPAGENUM=15 + }; +private: + void ProcessPlaceHolder(XFContentContainer* pXFPara,sal_uInt16 nAction,sal_uInt8 nType); + void ProcessOtherCHB(XFContentContainer* pXFPara,sal_uInt8 nType); + void ProcessPageNumber(XFContentContainer* pXFPara,sal_uInt8 nType); + void ProcessKeylist(XFContentContainer* pXFPara,sal_uInt8 nType); + sal_Bool IsHasFilled(); + sal_Bool IsBubbleHelp(); + OUString GetPromptText(); + void EnumAllKeywords(); +private: + enum{ + CHB_PROMPT = 0x01, + CHB_EDIT = 0x02, + CHB_HELP = 0x04, + CHB_TAB = 0x08, + CHB_HIDDEN = 0x10, + CHB_ALLOWVALUESNOTINLIST = 0x20, + CHB_ALLOWMULTIVALUES = 0x40, + CHB_RETURN = 0x80, + CHB_NOEARS = 0x100, + CHB_MAGNETIC = 0x200, + CHB_PERSISTENT = (CHB_PROMPT+CHB_HELP+CHB_TAB+CHB_HIDDEN + +CHB_ALLOWVALUESNOTINLIST+CHB_ALLOWMULTIVALUES + +CHB_RETURN+CHB_NOEARS+CHB_MAGNETIC) + }; + LwpObjectID m_objPromptStory; + sal_uInt32 m_nTab; + sal_uInt16 m_nFlag; + sal_uInt16 m_nAction; + LwpAtomHolder m_Help; + LwpAtomHolder m_Mirror; + std::vector<OUString> m_Keylist; +}; + +class LwpBookMark : public LwpDLNFVList +{ +public: + LwpBookMark(LwpObjectHeader &objHdr, LwpSvStream *pStrm); + ~LwpBookMark(){}; +protected: + void Read(); +public: + sal_Bool IsRightMarker(LwpObjectID objMarker); + OUString GetName(); + sal_Bool IsRightName(OUString sName); +private: + enum { BKMK_NOTESFX = 0x0001, + BKMK_OLDNOTESFX = 0x0002 + }; + LwpObjectID m_objMarker; + sal_Bool m_bHint; + sal_uInt16 m_nFlag; +}; + +class LwpFieldMark : public LwpStoryMarker +{ +public: + LwpFieldMark(LwpObjectHeader &objHdr, LwpSvStream *pStrm); + ~LwpFieldMark(){}; + void Read(); + void ParseIndex(OUString& sKey1,OUString& sKey2); + void ParseTOC(OUString& sLevel,OUString& sText); +// sal_uInt8 ParseCrossRef(OUString& sMarkName); + sal_uInt16 GetFieldType(){return m_nFieldType;} + sal_Bool IsFormulaInsert(); + sal_Bool IsDateTimeField(sal_uInt8& type,OUString& formula); + sal_Bool IsCrossRefField(sal_uInt8& nType, OUString& sMarkName); + sal_Bool IsDocPowerField(sal_uInt8& nType,OUString& sFormula); + OUString GetFormula(){return m_Formula.str();} + void SetStyleFlag(sal_Bool bFalg){m_bHasStyle = bFalg;} + sal_Bool GetStyleFlag(){return m_bHasStyle;} + sal_Bool GetStart(){return m_bHasStart;} + void SetStart(sal_Bool bFlag){m_bHasStart = bFlag;} + LwpFrib* GetStartFrib(){return m_pFrib;} + void SetStartFrib(LwpFrib* pFrib){m_pFrib = pFrib;} + sal_Bool GetRevisionFlag(){return m_bRevisionFlag;} + void SetRevisionFlag(sal_Bool bFlag){m_bRevisionFlag = bFlag;} + + enum{ + FLD_FIELD = 0x0003, + FLD_INDEX = 0x0008, + FLD_TOC = 0x000B + }; + enum{ + FF_FORMULAINSERTED = 0X0008, + }; + enum{ + CROSSREF_INVALID = 0, + CROSSREF_TEXT = 1, + CROSSREF_PAGE = 2, + CROSSREF_PARANUMBER = 3 + }; + enum{ + DATETIME_SKIP = 0, + DATETIME_NOW = 1, + DATETIME_CREATE = 2, + DATETIME_LASTEDIT = 3, + DATETIME_TOTALTIME = 4 + }; + enum{ + DOC_DESCRIPTION = 1, + DOC_NUMPAGES = 2, + DOC_NUMWORDS = 3, + DOC_NUMCHARS = 4, + }; +private: + LwpObjectID m_objFormulaStory; + LwpObjectID m_objResultContent; + sal_uInt8* m_nExtra; + sal_uInt16 m_nFlag; + sal_uInt16 m_nFieldType; + LwpAtomHolder m_Formula; + + sal_Bool m_bHasStyle; + sal_Bool m_bHasStart; + + LwpFrib* m_pFrib; + sal_Bool m_bRevisionFlag; +}; + +class LwpRubyMarker : public LwpStoryMarker +{ +public: + LwpRubyMarker(LwpObjectHeader &objHdr, LwpSvStream *pStrm); + ~LwpRubyMarker(){}; + void Read(); + OUString GetRubyText(){return m_strRubyText;} + void SetRubyText(OUString sText){m_strRubyText = sText;} + OUString GetTextStyleName(){return m_TextStye;} + void SetTextStyleName(OUString sName){m_TextStye = sName;} + OUString GetRubyStyleName(){return m_RubyStyle;} + void SetRubyStyleName(OUString sName){m_RubyStyle = sName;} +private: + LwpObjectID m_objLayout; + OUString m_strRubyText; + OUString m_RubyStyle; + OUString m_TextStye; +}; +#endif diff --git a/lotuswordpro/source/filter/lwpnotes.cxx b/lotuswordpro/source/filter/lwpnotes.cxx new file mode 100644 index 000000000000..bb1abdc340d6 --- /dev/null +++ b/lotuswordpro/source/filter/lwpnotes.cxx @@ -0,0 +1,326 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - notes + */ +/************************************************************************* + * Change History + May 2005 Created + ************************************************************************/ +#include "lwpnotes.hxx" +#include "lwppara.hxx" +#include "xfilter/xfannotation.hxx" +#include "xfilter/xftextspan.hxx" +#include "localtime.hxx" +#include "lwptools.hxx" + + LwpFribNote::LwpFribNote(LwpPara* pPara ):LwpFrib(pPara) +{ +} + +/** + * @descr read frib information + */ +void LwpFribNote::Read(LwpObjectStream *pObjStrm, sal_uInt16 len) +{ + m_Layout.ReadIndexed(pObjStrm); +} + +/** + * @descr Register style + */ +void LwpFribNote::RegisterStyle() +{ + LwpObject* pLayout = m_Layout.obj(); + if(pLayout) + { + //register font style + LwpFrib::RegisterStyle(m_pPara->GetFoundry()); + //register foonote style + pLayout->SetFoundry(m_pPara->GetFoundry()); + pLayout->RegisterStyle(); + } +} + +/** + * @descr convert note + */ +void LwpFribNote::XFConvert(XFContentContainer* pCont) +{ + LwpNoteLayout* pLayout =static_cast<LwpNoteLayout*>(m_Layout.obj()); + if(pLayout) + { + XFAnnotation* pXFNote = new XFAnnotation; + pXFNote->SetAuthor(pLayout->GetAuthor()); + LtTm aTm; + long nTime = pLayout->GetTime(); + if(LtgLocalTime(nTime, aTm)) + { + pXFNote->SetDate(LwpTools::DateTimeToOUString(aTm)); + } + + pLayout->XFConvert(pXFNote); + if(m_pModifiers) + { + XFTextSpan *pSpan = new XFTextSpan(); + pSpan->SetStyleName(GetStyleName()); + pSpan->Add(pXFNote); + pCont->Add(pSpan); + } + else + { + pCont->Add(pXFNote); + } + } + +} + + +LwpNoteLayout::LwpNoteLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpFrameLayout(objHdr, pStrm) +{ + +} + +LwpNoteLayout::~LwpNoteLayout() +{ + +} + +/** + * @descr read note layout object + * + */ +void LwpNoteLayout::Read() +{ + LwpFrameLayout::Read(); + + m_pObjStrm->QuickRead(&m_nTime, sizeof(m_nTime)); + m_UserName.Read(m_pObjStrm); + + LwpAtomHolder aUserInitials; + aUserInitials.Read(m_pObjStrm); + + LwpColor aColor; + aColor.Read(m_pObjStrm); + + // vacant note sequence + m_pObjStrm->QuickReadInt32(); + + m_pObjStrm->SkipExtra(); +} + +/** + * @descr Register style + */ +void LwpNoteLayout::RegisterStyle() +{ + LwpVirtualLayout* pTextLayout = GetTextLayout(); + if(pTextLayout) + { + pTextLayout->SetFoundry(GetFoundry()); + pTextLayout->RegisterStyle(); + } +} + +/** + * @descr convert note + */ +void LwpNoteLayout::XFConvert(XFContentContainer * pCont) +{ + LwpVirtualLayout* pTextLayout = GetTextLayout(); + if(pTextLayout) + { + pTextLayout->XFConvert(pCont); + } +} + +/** + * @descr Get layout that contains note text. + */ +LwpVirtualLayout* LwpNoteLayout::GetTextLayout() +{ + LwpVirtualLayout* pLayout = FindChildByType(LWP_VIEWPORT_LAYOUT); + if(pLayout) + { + return pLayout->FindChildByType(LWP_NOTETEXT_LAYOUT); + } + + return NULL; +} +/** + * @descr Get author. + */ +OUString LwpNoteLayout::GetAuthor() +{ + if(m_UserName.HasValue()) + { + if(m_UserName.str() != A2OUSTR(" ")) + { + return m_UserName.str(); + } + } + //if username is null or writerspace, get username from noteheaderlayout + LwpNoteHeaderLayout* pTextLayout = static_cast<LwpNoteHeaderLayout*>(FindChildByType(LWP_NOTEHEADER_LAYOUT)); + if(pTextLayout) + { + LwpStory* pStory = static_cast<LwpStory*>(pTextLayout->GetContent()->obj()); + if(pStory) + { + LwpPara* pFirst = static_cast<LwpPara*>(pStory->GetFirstPara()->obj()); + if(pFirst) + return pFirst->GetContentText(sal_True); + } + } + + return m_UserName.str(); +} + +LwpNoteHeaderLayout::LwpNoteHeaderLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpFrameLayout(objHdr, pStrm) +{ +} + +LwpNoteHeaderLayout::~LwpNoteHeaderLayout() +{ +} + +/** + * @descr read note layout object + * + */ +void LwpNoteHeaderLayout::Read() +{ + LwpFrameLayout::Read(); + m_pObjStrm->SkipExtra(); +} + +void LwpNoteHeaderLayout::RegisterStyle() +{ +} + +void LwpNoteHeaderLayout::XFConvert(XFContentContainer * pCont) +{ +} + +LwpNoteTextLayout::LwpNoteTextLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpFrameLayout(objHdr, pStrm) +{ +} + +LwpNoteTextLayout::~LwpNoteTextLayout() +{ +} + +/** + * @descr read note layout object + * + */ +void LwpNoteTextLayout::Read() +{ + LwpFrameLayout::Read(); + m_pObjStrm->SkipExtra(); +} + +/** + * @descr Register style, SODC doesn't support text style in note + */ +void LwpNoteTextLayout::RegisterStyle() +{ + LwpObject* pContent = m_Content.obj(); + if(pContent) + { + pContent->SetFoundry(GetFoundry()); + pContent->RegisterStyle(); + } +} + +void LwpNoteTextLayout::XFConvert(XFContentContainer * pCont) +{ + LwpObject* pContent = m_Content.obj(); + if(pContent) + { + pContent->XFConvert(pCont); + } +} + + +LwpViewportLayout::LwpViewportLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpPlacableLayout(objHdr, pStrm) +{ +} + +LwpViewportLayout::~LwpViewportLayout() +{ +} + +/** + * @descr read note layout object + * + */ +void LwpViewportLayout::Read() +{ + LwpPlacableLayout::Read(); + m_pObjStrm->SkipExtra(); +} + +void LwpViewportLayout::RegisterStyle() +{ +} + +void LwpViewportLayout::XFConvert(XFContentContainer * pCont) +{ +} diff --git a/lotuswordpro/source/filter/lwpnotes.hxx b/lotuswordpro/source/filter/lwpnotes.hxx new file mode 100644 index 000000000000..c0419ca6e23d --- /dev/null +++ b/lotuswordpro/source/filter/lwpnotes.hxx @@ -0,0 +1,161 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - notes + */ +/************************************************************************* + * Change History + May 2005 Created + ************************************************************************/ +#ifndef _LWPNOTES_HXX_ +#define _LWPNOTES_HXX_ + +#include "lwpfrib.hxx" +#include "lwpframelayout.hxx" + +/** + * @brief TAG_NOTE_FRIB object + * + */ +class LwpFribNote: public LwpFrib +{ +public: + LwpFribNote(LwpPara* pPara ); + ~LwpFribNote(){}; + void Read(LwpObjectStream* pObjStrm, sal_uInt16 len); + void RegisterStyle(); + void XFConvert(XFContentContainer* pCont); +private: + LwpObjectID m_Layout; +}; + +/** + * @brief VO_NOTELAYOUT object + * + */ +class LwpNoteLayout: public LwpFrameLayout +{ +public: + LwpNoteLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpNoteLayout(); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_NOTE_LAYOUT;} + virtual void RegisterStyle(); + virtual void XFConvert(XFContentContainer* pCont); + sal_uInt32 GetTime(){ return m_nTime;}; + OUString GetAuthor(); + +protected: + void Read(); + LwpVirtualLayout* GetTextLayout(); + +private: + sal_uInt32 m_nTime; + LwpAtomHolder m_UserName; +}; + + +/** + * @brief VO_NOTEHEADERLAYOUT object + * + */ +class LwpNoteHeaderLayout: public LwpFrameLayout +{ +public: + LwpNoteHeaderLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpNoteHeaderLayout(); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_NOTEHEADER_LAYOUT;} + virtual void RegisterStyle(); + virtual void XFConvert(XFContentContainer* pCont); + +protected: + void Read(); +}; + +/** + * @brief VO_NOTETEXTLAYOUT object + * + */ +class LwpNoteTextLayout: public LwpFrameLayout +{ +public: + LwpNoteTextLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpNoteTextLayout(); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_NOTETEXT_LAYOUT;} + virtual void RegisterStyle(); + virtual void XFConvert(XFContentContainer* pCont); + +protected: + void Read(); +}; + +/** + * @brief VO_VPLAYOUT object + * + */ +class LwpViewportLayout: public LwpPlacableLayout +{ +public: + LwpViewportLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpViewportLayout(); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_VIEWPORT_LAYOUT;} + virtual void RegisterStyle(); + virtual void XFConvert(XFContentContainer* pCont); + +protected: + void Read(); +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwpnumberingoverride.cxx b/lotuswordpro/source/filter/lwpnumberingoverride.cxx new file mode 100644 index 000000000000..35077e5158d2 --- /dev/null +++ b/lotuswordpro/source/filter/lwpnumberingoverride.cxx @@ -0,0 +1,180 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* +* @file +* Numbering override of Wordpro. +************************************************************************/ +/************************************************************************* +* Change History +* 2005-01-12 Create and implement. +************************************************************************/ + +#include "lwpnumberingoverride.hxx" +#include "lwpobjstrm.hxx" + +LwpNumberingOverride::LwpNumberingOverride() +{ + m_nLevel = 0; + m_nPosition = 0; +} + +void LwpNumberingOverride::Read(LwpObjectStream *pStrm) +{ + if (pStrm->QuickReadBool()) + { + ReadCommon(pStrm); + + pStrm->QuickRead(&m_nLevel, sizeof(m_nLevel)); + pStrm->QuickRead(&m_nPosition, sizeof(m_nPosition)); + } + + pStrm->SkipExtra(); +} +//add by , 02/03/2005 +void LwpNumberingOverride::Override(LwpNumberingOverride* pOther) +{ + if (m_nApply & NO_LEVEL) + { + if (IsLevelOverridden()) + { + pOther->OverrideLevel(m_nLevel); + } + else + { + pOther->RevertLevel(); + } + } + + if (m_nApply & NO_POSITION) + { + if (IsPositionOverridden()) + { + pOther->OverridePosition(m_nPosition); + } + else + { + pOther->RevertPosition(); + } + } + + if (m_nApply & HEADING) + { + if (IsHeadingOverridden()) + { + pOther->OverrideHeading(IsHeading()); + } + else + { + pOther->RevertHeading(); + } + } + + if (m_nApply & SMARTLEVEL) + { + if (IsSmartLevelOverridden()) + { + pOther->OverrideSmartLevel(IsSmartLevel()); + } + else + { + pOther->RevertSmartLevel(); + } + } +} + +void LwpNumberingOverride::operator=(const LwpOverride& rOther) +{ + LwpOverride::operator=(rOther); + + const LwpNumberingOverride* pOther = + static_cast<LwpNumberingOverride*>((LwpOverride*)&rOther); + + m_nLevel = pOther->m_nLevel; + m_nPosition = pOther->m_nPosition; +} + +void LwpNumberingOverride::OverrideLevel(sal_uInt16 nNewLv) +{ + m_nLevel = nNewLv; + LwpOverride::Override(NO_LEVEL, STATE_ON); +} +void LwpNumberingOverride::OverridePosition(sal_uInt16 nNewPos) +{ + m_nPosition = nNewPos; + LwpOverride::Override(NO_POSITION, STATE_ON); +} +void LwpNumberingOverride::OverrideHeading(sal_Bool bVal) +{ + if (bVal) + { + LwpOverride::Override(HEADING, STATE_ON); + } + else + { + LwpOverride::Override(HEADING, STATE_OFF); + } +} +void LwpNumberingOverride::OverrideSmartLevel(sal_Bool bVal) +{ + if (bVal) + { + LwpOverride::Override(SMARTLEVEL, STATE_ON); + } + else + { + LwpOverride::Override(SMARTLEVEL, STATE_OFF); + } +} +//end add diff --git a/lotuswordpro/source/filter/lwpnumberingoverride.hxx b/lotuswordpro/source/filter/lwpnumberingoverride.hxx new file mode 100644 index 000000000000..f131d51591fd --- /dev/null +++ b/lotuswordpro/source/filter/lwpnumberingoverride.hxx @@ -0,0 +1,170 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* +* @file +* Numbering override of Wordpro. +************************************************************************/ +/************************************************************************* +* Change History +* 2005-01-12 Create and implement. +************************************************************************/ + +#ifndef _LWPNUMBERINGOVERRIDE_HXX +#define _LWPNUMBERINGOVERRIDE_HXX + +#include "lwpoverride.hxx" + +class LwpObjectStream; +class LwpNumberingOverride : public LwpOverride +{ +public: + LwpNumberingOverride(); + virtual ~LwpNumberingOverride(){} + + enum + { + NO_LEVEL = 0x0001, + NO_POSITION = 0x0002, + HEADING = 0x0004, + SMARTLEVEL = 0x0008 + }; +public: + virtual void Read(LwpObjectStream *pStrm); + + //add by , 02/03/2005 + void Override(LwpNumberingOverride* pOther); + void operator=(const LwpOverride& rOther); + + inline sal_uInt16 GetLevel() const; + inline sal_uInt16 GetPosition() const; + + inline sal_Bool IsLevelOverridden(); + inline sal_Bool IsPositionOverridden(); + inline sal_Bool IsHeadingOverridden(); + inline sal_Bool IsSmartLevelOverridden(); + inline sal_Bool IsHeading(); + inline sal_Bool IsSmartLevel(); + + void OverrideLevel(sal_uInt16 nNewLv); + void OverridePosition(sal_uInt16 nNewPos); + void OverrideHeading(sal_Bool bVal); + void OverrideSmartLevel(sal_Bool bVal); + + inline void RevertLevel(); + inline void RevertPosition(); + inline void RevertHeading(); + inline void RevertSmartLevel(); + //end add +private: + sal_uInt16 m_nLevel; + sal_uInt16 m_nPosition; +}; + +inline sal_uInt16 LwpNumberingOverride::GetLevel() const +{ + return m_nLevel; +} + +inline sal_uInt16 LwpNumberingOverride::GetPosition() const +{ + return m_nPosition; +} + +//add by , 02/03/2005 +inline sal_Bool LwpNumberingOverride::IsLevelOverridden() +{ + return (sal_Bool)((m_nOverride & NO_LEVEL) != 0); +} +inline sal_Bool LwpNumberingOverride::IsPositionOverridden() +{ + return (sal_Bool)((m_nOverride & NO_POSITION) != 0); +} +inline sal_Bool LwpNumberingOverride::IsHeadingOverridden() +{ + return (sal_Bool)((m_nOverride & HEADING) != 0); +} +inline sal_Bool LwpNumberingOverride::IsSmartLevelOverridden() +{ + return (sal_Bool)((m_nOverride & SMARTLEVEL) != 0); +} +inline sal_Bool LwpNumberingOverride::IsHeading() +{ + return (m_nValues & HEADING) != 0; +} +inline sal_Bool LwpNumberingOverride::IsSmartLevel() +{ + return (m_nValues & SMARTLEVEL) != 0; +} + +inline void LwpNumberingOverride::RevertLevel() +{ + LwpOverride::Override(NO_LEVEL, STATE_STYLE); +} +inline void LwpNumberingOverride::RevertPosition() +{ + LwpOverride::Override(NO_POSITION, STATE_STYLE); +} +inline void LwpNumberingOverride::RevertHeading() +{ + LwpOverride::Override(HEADING, STATE_STYLE); +} +inline void LwpNumberingOverride::RevertSmartLevel() +{ + LwpOverride::Override(SMARTLEVEL, STATE_STYLE); +} + +//end add + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwpnumericfmt.cxx b/lotuswordpro/source/filter/lwpnumericfmt.cxx new file mode 100644 index 000000000000..c5df6754b1c8 --- /dev/null +++ b/lotuswordpro/source/filter/lwpnumericfmt.cxx @@ -0,0 +1,566 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - table cell numerics format + */ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ + +#include "lwpnumericfmt.hxx" + +/////////////////////////////////////////////////////////////////// +LwpCurrencyPool LwpNumericFormat::m_aCurrencyInfo; + +/** +* +* @date 03/26/2005 +* @param +* @param +* @return +*/ +String LwpCurrencyPool::GetCurrencySymbol(sal_uInt16 nFormat) +{ + return m_aCurrencyInfo[nFormat].sSymbol; +} + +/** +* +* @date 03/26/2005 +* @param +* @param +* @return sal_Bool. +*/ +sal_Bool LwpCurrencyPool::IsSymbolPost(sal_uInt16 nFormat) +{ + return m_aCurrencyInfo[nFormat].bPost;; +} + +/** +* +* @date 03/26/2005 +* @param +* @param +* @return sal_Bool. +*/ +sal_Bool LwpCurrencyPool::IsShowSpace(sal_uInt16 nFormat) +{ + return m_aCurrencyInfo[nFormat].bShowSpace; +} +////////////////////////////////////////////////////////////////////// +/** +* +* @date 03/26/2005 +* @param +* @param +* @return +*/ +XFStyle* LwpLayoutNumerics::Convert() +{ + return cNumerics.Convert(); +} + +/** +* +* @date 03/26/2005 +* @param +* @param +* @return sal_Bool. +*/ +void LwpLayoutNumerics::Read() +{ + LwpVirtualPiece::Read(); + + if(LwpFileHeader::m_nFileRevision >= 0x000b) + { + cNumerics.Read(); + m_pObjStrm->SkipExtra(); + } +} +/////////////////////////////////////////////////////////////////// + +/** +* +* @date 03/26/2005 +* @param +* @param +* @return sal_Bool. +*/ +void LwpNumericFormatSubset::QuickRead(LwpObjectStream* pStrm) +{ + cColor.Read(pStrm); + cPrefix.Read(pStrm); + cSuffix.Read(pStrm); + cSubFlags = pStrm->QuickReaduInt16(); + + pStrm->SkipExtra(); +} +/** +* +* @date 03/26/2005 +* @param +* @param +* @return. +*/ +LwpColor LwpNumericFormatSubset::GetColor() +{ + if (cSubFlags&0x04) + { + return cColor; + } + else + { + return LwpColor(); + } +} +LwpNumericFormatSubset::LwpNumericFormatSubset():cSubFlags(0) +{ +} +LwpNumericFormatSubset::~LwpNumericFormatSubset() +{ +} + +/////////////////////////////////////////////////////////////////////////////////// +LwpNumericFormat::LwpNumericFormat(LwpObjectStream * pStrm):cDecimalPlaces(0),cFormat(FMT_DEFAULT) +{ + assert(pStrm); + m_pObjStrm = pStrm; +} +/** +* Read number format from wordpro file +* @date 03/26/2005 +* @param +* @param +* @return +*/ +void LwpNumericFormat::Read() +{ + LwpObjectStream* pStrm = m_pObjStrm; + + if(LwpFileHeader::m_nFileRevision >= 0x000b) + { + cFlags = pStrm->QuickReaduInt16(); + cDecimalPlaces = pStrm->QuickReaduInt16(); + cFormat = pStrm->QuickReaduInt16(); + + cAnyNumber.QuickRead(pStrm); + cZero.QuickRead(pStrm); + cNegative.QuickRead(pStrm); + + pStrm->SkipExtra(); + } +} +/** +* +* @date 03/26/2005 +* @param +* @param +* @return sal_Bool. +*/ +sal_Bool +LwpNumericFormat::IsCurrencyFormat(USHORT Format) +{ + switch (Format) + { + case FMT_ARGENTINEANPESO: + case FMT_AUSTRALIANDOLLAR: + case FMT_AUSTRIANSCHILLING: + case FMT_BELGIANFRANC: + case FMT_BRAZILIANCRUZEIRO: + case FMT_BRITISHPOUND: + case FMT_CANADIANDOLLAR: + case FMT_CHINESEYUAN: + case FMT_CZECHKORUNA: + case FMT_DANISHKRONE: + case FMT_ECU: + case FMT_FINNISHMARKKA: + case FMT_FRENCHFRANC: + case FMT_GREEKDRACHMA: + case FMT_HONGKONGDOLLAR: + case FMT_HUNGARIANFORINT: + case FMT_INDIANRUPEE: + case FMT_INDONESIANRUPIAH: + case FMT_IRISHPUNT: + case FMT_LUXEMBOURGFRANC: + case FMT_MALAYSIANRINGGIT: + case FMT_MEXICANPESO: + case FMT_NETHERLANDSGUILDER: + case FMT_NEWZEALANDDOLLAR: + case FMT_NORWEGIANKRONE: + case FMT_POLISHZLOTY: + case FMT_PORTUGUESEESCUDO: + case FMT_ROMANIANLEI: + case FMT_RUSSIANRUBLE: + case FMT_SINGAPOREDOLLAR: + case FMT_SLOVAKIANKORUNA: + case FMT_SLOVENIANTHOLAR: + case FMT_SOUTHAFRICANRAND: + case FMT_SOUTHKOREANWON: + case FMT_SWEDISHKRONA: + case FMT_SWISSFRANC: + case FMT_TAIWANDOLLAR: + case FMT_THAIBAHT: + case FMT_USDOLLAR: + case FMT_OTHERCURRENCY: + case FMT_GERMANMARK: + case FMT_ITALIANLIRA: + case FMT_JAPANESEYEN: + case FMT_SPANISHPESETA: + case FMT_EURO: + return sal_True; + + default: + return sal_False; + } +} +/** +* +* @date 03/26/2005 +* @param +* @param +* @return. +*/ +USHORT +LwpNumericFormat::GetDecimalPlaces(void) +{ + if (IsDecimalPlacesOverridden()) + return cDecimalPlaces; + return GetDefaultDecimalPlaces(cFormat); +} +/** +* Make the currency string. +* @date 03/26/2005 +* @param +* @param +* @return +*/ +void LwpNumericFormat::GetCurrencyStr(LwpNumericFormatSubset aNumber, String& aPrefix, String& aSuffix, sal_Bool bNegtive) +{ + aPrefix = aNumber.GetPrefix(); + aSuffix = aNumber.GetSuffix(); + + //Make the default prefix and suffix + String aSymbol = m_aCurrencyInfo.GetCurrencySymbol(cFormat); + sal_Bool bPost = m_aCurrencyInfo.IsSymbolPost(cFormat); + sal_Bool bShowSpace = m_aCurrencyInfo.IsShowSpace(cFormat); + if ( aNumber.IsDefaultPrefix()) + { + if (bNegtive) + { + aPrefix = String::CreateFromAscii("("); + } + if (!bPost) + { + aPrefix += aSymbol; + if (bShowSpace) + { + aPrefix +=String::CreateFromAscii(" "); + } + } + } + if ( aNumber.IsDefaultSuffix()) + { + if (bPost) + { + aSuffix = aSymbol; + if (bShowSpace) + { + aSuffix.Insert(String::CreateFromAscii(" "),0); + } + + } + + if (bNegtive) + { + aSuffix += String::CreateFromAscii(")"); + } + } +} +/** +* +* @date 03/26/2005 +* @param +* @param +* @return +*/ +void LwpNumericFormat::SetNumberType(XFNumberStyle* pStyle) +{ + switch(cFormat) + { + case FMT_PERCENT: + { + pStyle->SetNumberType(enumXFNumberPercent); + } + break; + + case FMT_COMMA: + { + pStyle->SetNumberType(enumXFNumberNumber); + pStyle->SetGroup(); + } + break; + case FMT_SCIENTIFIC: + { + pStyle->SetNumberType(enumXFNumberScientific); + } + break; + case FMT_FIXED: + case FMT_GENERAL: + { + pStyle->SetNumberType(enumXFNumberNumber); + } + break; + default://including text type, which is not a style of number format in SODC + { + pStyle->SetNumberType(enumXFText); + } + break; + } +} +/** +* Make the xml content of number format +* @date 03/26/2005 +* @param +* @param +* @return XFStyle* +*/ +XFStyle* LwpNumericFormat::Convert() +{ + XFNumberStyle* pStyle = new XFNumberStyle; + String aPrefix, aSuffix,aNegPrefix,aNegSuffix; + LwpColor aColor, aNegativeColor; + + if (IsCurrencyFormat(cFormat)) + { + pStyle->SetNumberType(enuMXFNumberCurrency); + pStyle->SetGroup(); + GetCurrencyStr(cAnyNumber, aPrefix, aSuffix); + GetCurrencyStr(cNegative, aNegPrefix, aNegSuffix,sal_True); + } + else + { + SetNumberType(pStyle); + {//Anynumber + aPrefix = cAnyNumber.GetPrefix(); + //Set suffix + aSuffix = cAnyNumber.GetSuffix(); + //Set color + aColor = cAnyNumber.GetColor(); + } + + if (!IsNegativeOverridden()) + { + aNegPrefix = aPrefix; + aNegSuffix = aSuffix; + aNegativeColor = aColor; + } + else + {//negative + aNegPrefix = cNegative.GetPrefix(); + aNegSuffix = cNegative.GetSuffix(); + aNegativeColor = cNegative.GetColor(); + } + if (FMT_COMMA==cFormat) + { + if (cNegative.IsDefaultPrefix() && aNegPrefix.Len() == 0) + { + aNegPrefix = String::CreateFromAscii("("); + } + if (cNegative.IsDefaultSuffix() && aNegSuffix.Len() == 0) + { + aNegSuffix = String::CreateFromAscii(")"); + } + } + + } + + pStyle->SetDecimalDigits(GetDecimalPlaces()); + + aPrefix = reencode(aPrefix); + aSuffix = reencode(aSuffix); + aNegPrefix = reencode(aNegPrefix); + aNegSuffix = reencode(aNegSuffix); + + {//Anynumber + //Set prefix + pStyle->SetPrefix(aPrefix); + //Set suffix + pStyle->SetSurfix(aSuffix); + pStyle->SetColor( XFColor( (sal_uInt8)aColor.GetRed(), + (sal_uInt8)aColor.GetGreen(), + (sal_uInt8)aColor.GetBlue()) ); + } + {//Negtive + pStyle->SetNegativeStyle( aNegPrefix, aNegSuffix, XFColor((sal_uInt8)aNegativeColor.GetRed(), + (sal_uInt8)aNegativeColor.GetGreen(), + (sal_uInt8)aNegativeColor.GetBlue()) ); + } + + return pStyle; +} +/** +* +* @descrption for SODC_2754 +* @date 04/04/2006 +* @param +* @param +* @return fix wrong encoding of POUND symbol +*/ +OUString LwpNumericFormat::reencode(OUString sCode) +{ + const sal_Unicode * pString = sCode.getStr(); + sal_uInt16 nLen = sCode.getLength(); + sal_Bool bFound = sal_False; + sal_uInt16 i; + sal_Unicode *pBuff = new sal_Unicode[sCode.getLength()]; + + for (i=0; i< sCode.getLength() - 1; i++) + { + if ( (pString[i] == 0x00a1) && (pString[i+1] == 0x00ea)) + { + bFound = sal_True; + break; + } + pBuff[i] = pString[i]; + } + if (bFound) + { + pBuff[i] = 0xffe1; + for (sal_uInt32 j=i+1; j < sCode.getLength() - 1; j++) + { + pBuff[j] = pString[j+1]; + } + OUString sRet(pBuff, nLen - 1); + delete [] pBuff; + return sRet; + } + + delete [] pBuff; + return sCode; +} + +/** +* +* @date 03/26/2005 +* @param +* @param +* @return +*/ +USHORT +LwpNumericFormat::GetDefaultDecimalPlaces(USHORT Format) +{ + switch (Format) + { + case FMT_ARGENTINEANPESO: + case FMT_AUSTRALIANDOLLAR: + case FMT_AUSTRIANSCHILLING: + case FMT_BELGIANFRANC: + case FMT_BRAZILIANCRUZEIRO: + case FMT_BRITISHPOUND: + case FMT_CANADIANDOLLAR: + case FMT_CHINESEYUAN: + case FMT_CZECHKORUNA: + case FMT_DANISHKRONE: + case FMT_ECU: + case FMT_FINNISHMARKKA: + case FMT_FRENCHFRANC: + case FMT_GERMANMARK: + case FMT_HONGKONGDOLLAR: + case FMT_HUNGARIANFORINT: + case FMT_INDIANRUPEE: + case FMT_INDONESIANRUPIAH: + case FMT_IRISHPUNT: + case FMT_LUXEMBOURGFRANC: + case FMT_MALAYSIANRINGGIT: + case FMT_MEXICANPESO: + case FMT_NETHERLANDSGUILDER: + case FMT_NEWZEALANDDOLLAR: + case FMT_NORWEGIANKRONE: + case FMT_POLISHZLOTY: + case FMT_PORTUGUESEESCUDO: + case FMT_ROMANIANLEI: + case FMT_RUSSIANRUBLE: + case FMT_SINGAPOREDOLLAR: + case FMT_SLOVAKIANKORUNA: + case FMT_SLOVENIANTHOLAR: + case FMT_SOUTHAFRICANRAND: + case FMT_SOUTHKOREANWON: + case FMT_SWEDISHKRONA: + case FMT_SWISSFRANC: + case FMT_TAIWANDOLLAR: + case FMT_THAIBAHT: + case FMT_USDOLLAR: + case FMT_OTHERCURRENCY: + case FMT_EURO: + return 2; + + case FMT_GREEKDRACHMA: + case FMT_ITALIANLIRA: + case FMT_JAPANESEYEN: + case FMT_SPANISHPESETA: + return 0; + + case FMT_DEFAULT: + case FMT_GENERAL: + case FMT_FIXED: + case FMT_COMMA: + case FMT_PERCENT: + case FMT_SCIENTIFIC: + default: + return 2; + } +} diff --git a/lotuswordpro/source/filter/lwpnumericfmt.hxx b/lotuswordpro/source/filter/lwpnumericfmt.hxx new file mode 100644 index 000000000000..79be18ebf329 --- /dev/null +++ b/lotuswordpro/source/filter/lwpnumericfmt.hxx @@ -0,0 +1,312 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - table object + */ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ +#ifndef _LWPNUMBERICFMT_HXX +#define _LWPNUMBERICFMT_HXX + +#include "lwpatomholder.hxx" +#include "lwptblcell.hxx" +#include "lwpcolor.hxx" + +//For converting to xml +#include "xfilter/xfnumberstyle.hxx" + +class LwpObjectStream; + +class LwpNumericFormatSubset +{ +public: + LwpNumericFormatSubset(); + ~LwpNumericFormatSubset(); + void QuickRead(LwpObjectStream* pStrm); + String GetPrefix(){ return cPrefix.str();} + String GetSuffix(){ return cSuffix.str();} + sal_Bool IsBlack(){ return (cColor.GetBlue()==0 && cColor.GetGreen()==0 && cColor.GetRed()==0);} + sal_Bool IsDefaultPrefix(){ return !(cSubFlags&SF_OVER_PREFIX); } + sal_Bool IsDefaultSuffix(){ return !(cSubFlags&SF_OVER_SUFFIX); } + LwpColor GetColor(); +protected: + LwpColor cColor; + LwpAtomHolder cPrefix; + LwpAtomHolder cSuffix; + sal_uInt16 cSubFlags; + enum // for cSubFlags + { + SF_OVER_PREFIX = 0x0001, + SF_OVER_SUFFIX = 0x0002, + SF_OVER_COLOR = 0x0004 + }; +}; + +struct LwpCurrencyInfo +{ + String sSymbol; + sal_Bool bPost; + sal_Bool bShowSpace; + LwpCurrencyInfo(String sSym) + { + sSymbol = sSym; + bPost = sal_False; + bShowSpace = sal_False; + } + LwpCurrencyInfo() + { + bPost = sal_False; + bShowSpace = sal_False; + } + LwpCurrencyInfo(String sSym,sal_Bool bPost, sal_Bool bShowSpace) + { + this->sSymbol = sSym; + this->bPost = bPost; + this->bShowSpace = bShowSpace; + } +}; + +enum +{ + /* These are types of formats. They are mutually exclusive. + */ + FMT_NONE = 0, + FMT_ARGENTINEANPESO = 1, + FMT_AUSTRALIANDOLLAR = 2, + FMT_AUSTRIANSCHILLING = 3, + FMT_BELGIANFRANC = 4, + FMT_BRAZILIANCRUZEIRO = 5, + FMT_BRITISHPOUND = 6, + FMT_CANADIANDOLLAR = 7, + FMT_CHINESEYUAN = 8, + FMT_CZECHKORUNA = 9, + FMT_DANISHKRONE = 10, + FMT_ECU = 11, + FMT_FINNISHMARKKA = 12, + FMT_FRENCHFRANC = 13, + FMT_GERMANMARK = 14, + FMT_GREEKDRACHMA = 15, + FMT_HONGKONGDOLLAR = 16, + FMT_HUNGARIANFORINT = 17, + FMT_INDIANRUPEE = 18, + FMT_INDONESIANRUPIAH = 19, + FMT_IRISHPUNT = 20, + FMT_ITALIANLIRA = 21, + FMT_JAPANESEYEN = 22, + FMT_LUXEMBOURGFRANC = 23, + FMT_MALAYSIANRINGGIT = 24, + FMT_MEXICANPESO = 25, + FMT_NETHERLANDSGUILDER = 26, + FMT_NEWZEALANDDOLLAR = 27, + FMT_NORWEGIANKRONE = 28, + FMT_POLISHZLOTY = 29, + FMT_PORTUGUESEESCUDO = 30, + FMT_ROMANIANLEI = 31, + FMT_RUSSIANRUBLE = 32, + FMT_SINGAPOREDOLLAR = 33, + FMT_SLOVAKIANKORUNA = 34, + FMT_SLOVENIANTHOLAR = 35, + FMT_SOUTHAFRICANRAND = 36, + FMT_SOUTHKOREANWON = 37, + FMT_SPANISHPESETA = 38, + FMT_SWEDISHKRONA = 39, + FMT_SWISSFRANC = 40, + FMT_TAIWANDOLLAR = 41, + FMT_THAIBAHT = 42, + FMT_USDOLLAR = 43, + FMT_OTHERCURRENCY = 44, + FMT_DEFAULT = 45, + FMT_GENERAL = 46, + FMT_FIXED = 47, + FMT_COMMA = 48, + FMT_PERCENT = 49, + FMT_SCIENTIFIC = 50, + FMT_LABEL = 51, + FMT_EURO = 52 +}; + +class LwpCurrencyPool +{ +public: + LwpCurrencyPool(){InitCurrencySymbol();} + String GetCurrencySymbol(sal_uInt16 nFormat); + sal_Bool IsShowSpace(sal_uInt16 nFormat); + sal_Bool IsSymbolPost(sal_uInt16 nFormat); +private: + std::map<sal_uInt16,LwpCurrencyInfo> m_aCurrencyInfo; + void InitCurrencySymbol() + { + USHORT nC=FMT_ARGENTINEANPESO; + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("A")); //FMT_ARGENTINEANPESO = 1, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("A$")); //FMT_AUSTRALIANDOLLAR = 2, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("oS"),sal_True, sal_True);//FMT_AUSTRIANSCHILLING = 3, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("BF"),sal_True, sal_True);//FMT_BELGIANFRANC = 4, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("R$"),sal_False, sal_True);//FMT_BRAZILIANCRUZEIRO = 5, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String("£",RTL_TEXTENCODING_UTF8)); //FMT_BRITISHPOUND = 6, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("C$")); //FMT_CANADIANDOLLAR = 7, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String("PRC¥",RTL_TEXTENCODING_UTF8),sal_False,sal_True); //FMT_CHINESEYUAN = 8, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("Kc"),sal_True, sal_True);//FMT_CZECHKORUNA = 9, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("Dkr"),sal_False, sal_True);//FMT_DANISHKRONE = 10, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("ECU"),sal_True, sal_True);//FMT_ECU = 11, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("mk"),sal_True, sal_True);//FMT_FINNISHMARKKA = 12, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("F"),sal_True, sal_True);//FMT_FRENCHFRANC = 13, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("DM"),sal_True, sal_True);//FMT_GERMANMARK = 14, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("Dr"),sal_True, sal_True);//FMT_GREEKDRACHMA = 15, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("HK$")); //FMT_HONGKONGDOLLAR = 16, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("Ft"),sal_True, sal_True);//FMT_HUNGARIANFORINT = 17, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("Rs"),sal_False, sal_True);//FMT_INDIANRUPEE = 18, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("Rp"),sal_False, sal_True);//FMT_INDONESIANRUPIAH = 19, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String("IR£",RTL_TEXTENCODING_UTF8)); //FMT_IRISHPUNT = 20, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("L."),sal_False, sal_True);//FMT_ITALIANLIRA = 21, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String("¥",RTL_TEXTENCODING_UTF8)); //FMT_JAPANESEYEN = 22, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("LF"),sal_True, sal_True);//FMT_LUXEMBOURGFRANC = 23, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("Rm"),sal_False, sal_True);//FMT_MALAYSIANRINGGIT = 24, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("Mex$")); //FMT_MEXICANPESO = 25, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("F"),sal_False, sal_True);//FMT_NETHERLANDSGUILDER = 26, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("NZ$")); //FMT_NEWZEALANDDOLLAR = 27, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("Nkr"),sal_False, sal_True);//FMT_NORWEGIANKRONE = 28, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("Zl"),sal_True, sal_True);//FMT_POLISHZLOTY = 29, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("Esc."),sal_True, sal_True);//FMT_PORTUGUESEESCUDO = 30, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("Leu"),sal_True, sal_True);//FMT_ROMANIANLEI = 31, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("R"),sal_True, sal_True);//FMT_RUSSIANRUBLE = 32, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("S$")); //FMT_SINGAPOREDOLLAR = 33, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("Sk"),sal_True, sal_True);//FMT_SLOVAKIANKORUNA = 34, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("SIT"),sal_False, sal_True);//FMT_SLOVENIANTHOLAR = 35, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("R")); //FMT_SOUTHAFRICANRAND = 36, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("W")); //FMT_SOUTHKOREANWON = 37, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("Pts"),sal_True, sal_True);//FMT_SPANISHPESETA = 38, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("Skr"),sal_True, sal_True);//FMT_SWEDISHKRONA = 39, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("SFr"),sal_False, sal_True);//FMT_SWISSFRANC = 40, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("NT$")); //FMT_TAIWANDOLLAR = 41, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("Bt"),sal_True, sal_True);//FMT_THAIBAHT = 42, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("$")); //FMT_USDOLLAR = 43, + m_aCurrencyInfo[nC++]=LwpCurrencyInfo(String::CreateFromAscii("OTH"),sal_False, sal_True);//FMT_OTHERCURRENCY = 44, + + m_aCurrencyInfo[FMT_EURO]=LwpCurrencyInfo(String("€",RTL_TEXTENCODING_UTF8)); //FMT_EURO = 52 + } +}; + +class LwpNumericFormat +{ +public: + LwpNumericFormat(LwpObjectStream * pStrm); + ~LwpNumericFormat(){}; + void Read(); + static sal_Bool IsCurrencyFormat(USHORT Format); + USHORT GetDecimalPlaces(void); + sal_Bool IsDecimalPlacesOverridden(void); + sal_Bool IsNegativeOverridden(void); + sal_Bool IsZeroOverridden(void); + XFStyle* Convert(); +private: + LwpObjectStream * m_pObjStrm; + + sal_uInt16 cFlags; + enum // for cFlags + { + NF_OVER_ZERO = 0x0001, + NF_OVER_NEGATIVE = 0x0002, + NF_OVER_DECIMAL_PLACES = 0x0004 + }; + + sal_uInt16 cFormat; + + LwpNumericFormatSubset cAnyNumber; + LwpNumericFormatSubset cZero; + LwpNumericFormatSubset cNegative; + + sal_uInt16 cDecimalPlaces; + + static USHORT GetDefaultDecimalPlaces(USHORT Format); + static LwpCurrencyPool m_aCurrencyInfo; + + void GetCurrencyStr(LwpNumericFormatSubset aNumber, String& aPrefix, String& aSuffix, sal_Bool bNegtive=sal_False); + void SetNumberType(XFNumberStyle* pStyle); + OUString reencode(OUString sCode); +}; + +inline sal_Bool +LwpNumericFormat::IsDecimalPlacesOverridden(void) +{ + return (cFlags & NF_OVER_DECIMAL_PLACES) != 0; +} +inline sal_Bool +LwpNumericFormat::IsNegativeOverridden(void) +{ + return (cFlags & NF_OVER_NEGATIVE) != 0; +} +inline sal_Bool +LwpNumericFormat::IsZeroOverridden(void) +{ + return (cFlags & NF_OVER_ZERO) != 0; +} + +#include "lwppiece.hxx" +class LwpLayoutNumerics : public LwpVirtualPiece +{ +public: + LwpLayoutNumerics(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + :LwpVirtualPiece(objHdr, pStrm),cNumerics(m_pObjStrm){}; + ~LwpLayoutNumerics(){}; + XFStyle* Convert(); + virtual void Read(); +protected: + LwpNumericFormat cNumerics; +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpobj.cxx b/lotuswordpro/source/filter/lwpobj.cxx new file mode 100644 index 000000000000..db7e5c4e0714 --- /dev/null +++ b/lotuswordpro/source/filter/lwpobj.cxx @@ -0,0 +1,120 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpobj.hxx" + +/** + * @descr private contor to ensure only object constructed from stream + */ +LwpObject::LwpObject() + : m_pObjStrm(NULL), m_pFoundry(NULL), m_pStrm(NULL) +{} +/** + * @descr construct lwpobject from stream + */ +LwpObject::LwpObject(LwpObjectHeader objHdr, LwpSvStream* pStrm) + : m_ObjHdr(objHdr), m_pStrm(pStrm), m_pObjStrm(NULL), m_pFoundry(NULL) +{ + m_pObjStrm = new LwpObjectStream(pStrm, m_ObjHdr.IsCompressed(), + static_cast<sal_uInt16>(m_ObjHdr.GetSize()) ); +} +/** + * @descr dtor() +*/ +LwpObject::~LwpObject() +{ + if(m_pObjStrm) + delete m_pObjStrm; + +} +/** + * @descr QuickRead template + */ +void LwpObject::QuickRead() +{ + Read(); + m_pObjStrm->ReadComplete(); + if(m_pObjStrm) + { + delete m_pObjStrm; + m_pObjStrm = NULL; + } +} +/** + * @descr default read function + */ +void LwpObject::Read() +{} +/** + * @descr default parse function + */ +void LwpObject::Parse(IXFStream* pOutputStream) +{} +/** + * @descr default register style function + */ +void LwpObject::RegisterStyle() +{} + +/** + * @descr default XFConvert function + * pCont is the XFContentContainer for the object conversion + */ +void LwpObject::XFConvert(XFContentContainer* pCont) +{} diff --git a/lotuswordpro/source/filter/lwpobj.hxx b/lotuswordpro/source/filter/lwpobj.hxx new file mode 100644 index 000000000000..f2d24397d16e --- /dev/null +++ b/lotuswordpro/source/filter/lwpobj.hxx @@ -0,0 +1,105 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + /** + * @file + * Base class of all Lwp VO objects + */ + +#ifndef _LWPOBJ_HXX_ +#define _LWPOBJ_HXX_ + +#include "lwpheader.hxx" + +#include "lwpobjhdr.hxx" +#include "lwpobjstrm.hxx" +#include "lwpunoheader.hxx" +#include "xfilter/ixfstream.hxx" +#include "xfilter/xfcontentcontainer.hxx" + +class LwpFoundry; +/** + * @brief Base class of all Lwp VO objects +*/ +class LwpObject +{ +private: + LwpObject();//Don't permit to create an object without header +public: + LwpObject(LwpObjectHeader objHdr, LwpSvStream* pStrm); + virtual ~LwpObject(); +protected: + LwpObjectHeader m_ObjHdr; + LwpObjectStream* m_pObjStrm; + LwpFoundry* m_pFoundry; + LwpSvStream* m_pStrm; +protected: + virtual void Read(); +public: + void QuickRead(); + virtual void RegisterStyle(); + virtual void Parse(IXFStream* pOutputStream); + virtual void XFConvert(XFContentContainer* pCont); + + LwpFoundry* GetFoundry(){return m_pFoundry;} + void SetFoundry(LwpFoundry* pFoundry){m_pFoundry = pFoundry;} + LwpObjectID* GetObjectID(){ return m_ObjHdr.GetID();} + sal_uInt32 GetTag() { return m_ObjHdr.GetTag();} + LwpSvStream* GetStream() { return m_pStrm; } +}; +#endif diff --git a/lotuswordpro/source/filter/lwpobjfactory.cxx b/lotuswordpro/source/filter/lwpobjfactory.cxx new file mode 100644 index 000000000000..8850ff2a321c --- /dev/null +++ b/lotuswordpro/source/filter/lwpobjfactory.cxx @@ -0,0 +1,781 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpobjfactory.hxx" + +#ifndef _LWPDEFS_HXX +#include "lwpdefs.hxx" +#endif + +#include "lwpdoc.hxx" +#include "lwpdefobj.hxx" +#include "lwptemp.hxx" +#include "lwpstory.hxx" +#include "lwplayout.hxx" +#include "lwppara.hxx" +#include "lwpparastyle.hxx" +#include "lwpcharacterstyle.hxx" +#include "lwppiece.hxx" +#include "lwptabrack.hxx" +#include "lwpsilverbullet.hxx" +#include "lwpdivinfo.hxx" +#include "lwpholder.hxx" +#include "lwpdivopts.hxx" +#include "lwplaypiece.hxx" +#include "lwpsection.hxx" +#include "lwppagehint.hxx" +#include "lwpoleobject.hxx" +#include "lwpgrfobj.hxx" +#include "lwptable.hxx" +#include "lwptblcell.hxx" +#include "lwpmarker.hxx" +#include "lwpproplist.hxx" +#include <new> +#include "lwpframelayout.hxx" +#include "lwptablelayout.hxx" +#include "lwppagelayout.hxx" +#include "lwptblformula.hxx" +#include "lwpvpointer.hxx" +#include "lwpfootnote.hxx" +#include "lwpnumericfmt.hxx" +#include "lwpfnlayout.hxx" +#include "lwptoc.hxx" +#include "lwpdocdata.hxx" +#include "lwpnotes.hxx" +#include "lwpverdocument.hxx" + +//LwpObjectFactory* LwpObjectFactory::m_pMgr = NULL; + +LwpObjectFactory::LwpObjectFactory(LwpSvStream* pSvStream) + : m_pSvStream(pSvStream), m_nNumObjs(0) +{ + m_ObjList.clear(); +} + +LwpObjectFactory::~LwpObjectFactory() +{ +// m_pMgr = NULL; + if(!m_ObjList.empty()) + ClearObjectMap(); +} + +/** + * @descr create the single object factory +*/ +/* +LwpObjectFactory* LwpObjectFactory::Instance(LwpSvStream* pStream) +{ + if(m_pMgr == NULL) + { + if(pStream) + { + m_pMgr = new LwpObjectFactory(pStream); + } + } + return(m_pMgr); +}*/ +/** + * @descr clear object map and delete all objects +*/ +void LwpObjectFactory::ClearObjectMap() +{ + LwpObjMap::iterator it = m_ObjList.begin(); + while( it!=m_ObjList.end() ) + { + delete (*it).second; + (*it).second = NULL; + it++; + } + m_ObjList.clear(); +} +/** + * @descr read the index manager +*/ +void LwpObjectFactory::ReadIndex(LwpSvStream* pStrm) +{ + m_IndexMgr.Read(pStrm); +} + +/** + * @descr create all kinds of objects except lwp7 +*/ +LwpObject* LwpObjectFactory::CreateObject(sal_uInt32 type, LwpObjectHeader &objHdr) +{ + LwpObject* newObj = NULL; + m_nNumObjs++; + assert(type<300); + switch(type) + { + case VO_DOCUMENT: + { + newObj = new LwpDocument(objHdr, m_pSvStream); + break; + } + case VO_DOCSOCK: + { + newObj = new LwpDocSock(objHdr, m_pSvStream); + break; + } + case VO_DIVISIONINFO: + { + newObj = new LwpDivInfo(objHdr, m_pSvStream); + break; + } + case VO_DIVOPTS: + { + newObj = new LwpDivisionOptions(objHdr, m_pSvStream); + break; + } + case VO_HEADCONTENT: + { + newObj = new LwpHeadContent(objHdr, m_pSvStream); + break; + } + case VO_HEADLAYOUT: + { + newObj = new LwpHeadLayout(objHdr, m_pSvStream); + break; + } + case VO_PAGELAYOUT: + { + newObj = new LwpPageLayout(objHdr, m_pSvStream); + break; + } + case VO_STORY: + { + newObj = new LwpStory(objHdr, m_pSvStream); + break; + } + case VO_PARA: + { + newObj = new LwpPara(objHdr, m_pSvStream); + break; + } + case VO_HEADERLAYOUT: + { + newObj = new LwpHeaderLayout(objHdr, m_pSvStream); + break; + } + case VO_FOOTERLAYOUT: + { + newObj = new LwpFooterLayout(objHdr, m_pSvStream); + break; + } + case VO_FRAMELAYOUT: + { + newObj = new LwpFrameLayout(objHdr, m_pSvStream); + break; + } + case VO_LAYOUTGEOMETRY: + { + newObj = new LwpLayoutGeometry(objHdr, m_pSvStream); + break; + } + case VO_LAYOUTSCALE: + { + newObj = new LwpLayoutScale(objHdr, m_pSvStream); + break; + } + case VO_LAYOUTMARGINS: + { + newObj = new LwpLayoutMargins(objHdr, m_pSvStream); + break; + } + case VO_LAYOUTBORDERSTUFF: + { + newObj = new LwpLayoutBorder(objHdr, m_pSvStream); + break; + } + case VO_LAYOUTBACKGROUNDSTUFF: + { + newObj = new LwpLayoutBackground(objHdr, m_pSvStream); + break; + } + case VO_LAYOUTEXTERNALBORDERSTUFF: + { + newObj = new LwpLayoutExternalBorder(objHdr, m_pSvStream); + break; + } + case VO_LAYOUTCOLUMNS: + { + newObj = new LwpLayoutColumns(objHdr, m_pSvStream); + break; + } + case VO_LAYOUTGUTTERSTUFF: + { + newObj = new LwpLayoutGutters(objHdr, m_pSvStream); + break; + } + case VO_LAYOUTJOINSTUFF: + { + newObj = new LwpLayoutJoins(objHdr, m_pSvStream); + break; + } + case VO_LAYOUTSHADOW: + { + newObj = new LwpLayoutShadow(objHdr, m_pSvStream); + break; + } + // 01/12/2005 + case VO_PARASTYLE: + { + newObj = new LwpParaStyle(objHdr, m_pSvStream); + break; + } + case VO_CHARACTERSTYLE: + { + newObj = new LwpCharacterStyle(objHdr, m_pSvStream); + break; + } + case VO_SILVERBULLET: + { + newObj = new LwpSilverBullet(objHdr, m_pSvStream); + break; + } + case VO_ALIGNMENTPIECE: + { + newObj = new LwpAlignmentPiece(objHdr, m_pSvStream); + break; + } + case VO_INDENTPIECE: + { + newObj = new LwpIndentPiece(objHdr, m_pSvStream); + break; + } + case VO_SPACINGPIECE: + { + newObj = new LwpSpacingPiece(objHdr, m_pSvStream); + break; + } + case VO_CHARBORDERPIECE: + { + newObj = new LwpCharacterBorderPiece(objHdr, m_pSvStream); + break; + } + case VO_AMIKAKEPIECE: + { + newObj = new LwpAmikakePiece(objHdr, m_pSvStream); + break; + } + // end + + case VO_HEADHOLDER: + { + newObj = new LwpDLVListHeadHolder(objHdr, m_pSvStream); + break; + } + + // start + case VO_PARABORDERPIECE: + { + newObj = new LwpParaBorderPiece(objHdr, m_pSvStream); + break; + } + case VO_BREAKSPIECE: + { + newObj = new LwpBreaksPiece(objHdr, m_pSvStream); + break; + } + case VO_NUMBERINGPIECE: + { + newObj = new LwpNumberingPiece(objHdr, m_pSvStream); + break; + } + case VO_TABRACK: + { + newObj = new LwpTabRack(objHdr, m_pSvStream); + break; + } + case VO_TABPIECE: + { + newObj = new LwpTabPiece(objHdr, m_pSvStream); + break; + } + case VO_PARABACKGROUNDPIECE: //perhaps wrong. + { + newObj = new LwpBackgroundPiece(objHdr, m_pSvStream); + break; + } + // end. + case VO_SECTION: + { + newObj = new LwpSection(objHdr, m_pSvStream); + break; + } + case VO_INDEXSECTION: + { + newObj = new LwpIndexSection(objHdr, m_pSvStream); + break; + } + case VO_HEADTAILHOLDER: + { + newObj = new LwpDLVListHeadTailHolder(objHdr, m_pSvStream); + break; + } + case VO_PAGEHINT: + { + newObj = new LwpPageHint(objHdr, m_pSvStream); + break; + } + case VO_OLEOBJECT: + { + newObj = new LwpOleObject(objHdr, m_pSvStream); + break; + } + // + case VO_GRAPHIC: + { + newObj = new LwpGraphicObject(objHdr, m_pSvStream); + break; + } + case VO_DOCDATA: + { + newObj = new LwpDocData(objHdr, m_pSvStream); + break; + } + // + case VO_DROPCAPLAYOUT: + { + newObj = new LwpDropcapLayout(objHdr, m_pSvStream); + break; + } + case VO_LAYOUTRELATIVITY: + { + newObj = new LwpLayoutRelativity(objHdr, m_pSvStream); + break; + } + // for table + case VO_TABLE: + { + newObj = new LwpTable(objHdr, m_pSvStream); + break; + } + case VO_TABLELAYOUT: + { + newObj = new LwpTableLayout(objHdr, m_pSvStream); + break; + } + case VO_SUPERTABLE: + { + newObj = new LwpSuperTable(objHdr, m_pSvStream); + break; + } + case VO_SUPERTABLELAYOUT: + { + newObj = new LwpSuperTableLayout(objHdr, m_pSvStream); + break; + } + case VO_CELLLAYOUT: + { + newObj = new LwpCellLayout(objHdr, m_pSvStream); + break; + } + case VO_ROWLAYOUT: + { + newObj = new LwpRowLayout(objHdr, m_pSvStream); + break; + } + case VO_LAYOUTNUMERICS: + { + newObj = new LwpLayoutNumerics(objHdr, m_pSvStream); + break; + } + case VO_NUMERICVALUE: + { + newObj = new LwpNumericValue(objHdr, m_pSvStream); + break; + } + case VO_FORMULAINFO: + { + newObj = new LwpFormulaInfo(objHdr, m_pSvStream); + break; + } + case VO_COLUMNLAYOUT: + { + newObj = new LwpColumnLayout(objHdr, m_pSvStream); + break; + } + case VO_ROWLIST: + { + newObj = new LwpRowList(objHdr, m_pSvStream); + break; + } + case VO_CELLLIST: + { + newObj = new LwpCellList(objHdr, m_pSvStream); + break; + } + case VO_TABLERANGE: + { + newObj = new LwpTableRange(objHdr, m_pSvStream); + break; + } + case VO_CELLRANGE: + { + newObj = new LwpCellRange(objHdr, m_pSvStream); + break; + } + case VO_FOLDER: + { + newObj = new LwpFolder(objHdr, m_pSvStream); + break; + } + case VO_DEPENDENT: + { + newObj = new LwpDependent(objHdr, m_pSvStream); + break; + } + case VO_CONNECTEDCELLLAYOUT: + { + newObj = new LwpConnectedCellLayout(objHdr, m_pSvStream); + break; + } + case VO_HIDDENCELLLAYOUT: + { + newObj = new LwpHiddenCellLayout(objHdr, m_pSvStream); + break; + } + case VO_TABLEHEADINGLAYOUT: + { + newObj = new LwpTableHeadingLayout(objHdr, m_pSvStream); + break; + } + case VO_ROWHEADINGLAYOUT: + { + newObj = new LwpRowHeadingLayout(objHdr, m_pSvStream); + break; + } + case VO_TABLEHEADING: + { + newObj = new LwpTableHeading(objHdr, m_pSvStream); + break; + } + /* some member variables can't be read until now + case VO_TABLEHINT: + { + newObj = new LwpTableHint(objHdr, m_pSvStream); + break; + } + */ + // end table + //add by + case VO_CHBLKMARKER: + { + newObj = new LwpCHBlkMarker(objHdr, m_pSvStream); + break; + } + case VO_PROPLIST: + { + newObj = new LwpPropListElement(objHdr, m_pSvStream); + break; + } + case VO_BOOKMARK: + { + newObj = new LwpBookMark(objHdr, m_pSvStream); + break; + } + case VO_FIELDMARKER: + { + newObj = new LwpFieldMark(objHdr, m_pSvStream); + break; + } + case VO_OBJECTHOLDER: + { + newObj = new LwpObjectHolder(objHdr, m_pSvStream); + break; + } + case VO_POBJECTHOLDER: + { + newObj = new LwpObjectHolder(objHdr, m_pSvStream); + break; + } + case VO_VERGTR: //fall through + case VO_VERQTR: + { + newObj = new LwpVersionedPointer(objHdr, m_pSvStream); + break; + } + case VO_FOOTNOTE: + { + newObj = new LwpFootnote(objHdr, m_pSvStream); + break; + } + case VO_FOOTNOTETABLE: + { + newObj = new LwpFootnoteTable(objHdr, m_pSvStream); + break; + } + case VO_FOOTNOTEOPTS: + { + newObj = new LwpFootnoteOptions(objHdr, m_pSvStream); + break; + } + case VO_FOOTNOTELAYOUT: + { + newObj = new LwpFootnoteLayout(objHdr, m_pSvStream); + break; + } + case VO_FNROWLAYOUT: + { + newObj = new LwpFnRowLayout(objHdr, m_pSvStream); + break; + } + case VO_FNCELLLAYOUT: + { + newObj = new LwpFnCellLayout(objHdr, m_pSvStream); + break; + } + case VO_ENDNOTELAYOUT: + { + newObj = new LwpEndnoteLayout(objHdr, m_pSvStream); + break; + } + case VO_ENSUPERTABLELAYOUT: + { + newObj = new LwpEnSuperTableLayout(objHdr, m_pSvStream); + break; + } + case VO_FNSUPERTABLELAYOUT: + { + newObj = new LwpFnSuperTableLayout(objHdr, m_pSvStream); + break; + } + case VO_CONTONLAYOUT: + { + newObj = new LwpContOnLayout(objHdr, m_pSvStream); + break; + } + case VO_CONTFROMLAYOUT: + { + newObj = new LwpContFromLayout(objHdr, m_pSvStream); + break; + } + case VO_GROUPLAYOUT: + { + newObj = new LwpGroupLayout(objHdr, m_pSvStream); + break; + } + case VO_GROUPFRAME: + { + newObj = new LwpGroupFrame(objHdr, m_pSvStream); + break; + } + case VO_TOCSUPERTABLELAYOUT: + { + newObj = new LwpTocSuperLayout(objHdr, m_pSvStream); + break; + } + case VO_LISTLIST: + { + newObj = new LwpListList(objHdr, m_pSvStream); + break; + } + case VO_TOCLEVELDATA: + { + newObj = new LwpTocLevelData(objHdr, m_pSvStream); + break; + } + case VO_NOTELAYOUT: + { + newObj = new LwpNoteLayout(objHdr, m_pSvStream); + break; + } + case VO_NOTEHEADERLAYOUT: + { + newObj = new LwpNoteHeaderLayout(objHdr, m_pSvStream); + break; + } + case VO_NOTETEXTLAYOUT: + { + newObj = new LwpNoteTextLayout(objHdr, m_pSvStream); + break; + } + case VO_VPLAYOUT: + { + newObj = new LwpViewportLayout(objHdr, m_pSvStream); + break; + } + case VO_PCOLBLOCK: + { + newObj = new LwpParallelColumnsBlock(objHdr, m_pSvStream); + break; + } + case VO_SUPERPARALLELCOLUMNLAYOUT: + { + newObj = new LwpSuperParallelColumnLayout(objHdr, m_pSvStream); + break; + } + case VO_PCOLLAYOUT: + { + newObj = new LwpParallelColumnsLayout(objHdr, m_pSvStream); + break; + } + case VO_PARALLELCOLUMNS: + { + newObj = new LwpParallelColumns(objHdr, m_pSvStream); + break; + } + case VO_RUBYMARKER: + { + newObj = new LwpRubyMarker(objHdr, m_pSvStream); + break; + } + case VO_RUBYLAYOUT: + { + newObj = new LwpRubyLayout(objHdr, m_pSvStream); + break; + } + case VO_GLOSSARY: + { + newObj = new LwpGlossary(objHdr, m_pSvStream); + break; + } + case VO_SUPERGLOSSARYLAYOUT: + { + newObj = new LwpSuperGlossaryLayout(objHdr, m_pSvStream); + break; + } + case VO_VERDOCUMENT: + { + newObj = new LwpVerDocument(objHdr, m_pSvStream); + break; + } + default: + { + //Unknown object type + assert(false); + newObj = NULL; + //newObj = new LwpDefaultObject(objHdr, m_pSvStream); + break; + } + } + if(newObj) + { + newObj->QuickRead(); + m_ObjList.insert(LwpObjMap::value_type(*objHdr.GetID(), newObj)); + } + + return(newObj); +} +/** + * @descr query object by object id + * object is created if not in the factory +*/ +LwpObject* LwpObjectFactory::QueryObject(const LwpObjectID &objID) +{ + LwpObject* obj = FindObject( objID ); + if(!obj) + { + //Read the object from file + sal_uInt32 nStreamOffset = m_IndexMgr.GetObjOffset(objID); + if(nStreamOffset == BAD_OFFSET) //does not find the offset in index manager + { + return NULL; + } + m_pSvStream->Seek( nStreamOffset + LwpSvStream::LWP_STREAM_BASE ); + LwpObjectHeader objHdr; + objHdr.Read(*m_pSvStream); + obj = CreateObject(objHdr.GetTag(), objHdr); + } + return obj; +} +#if 0 +#ifdef WIN32 +void LwpObjectFactory::SetOleObjInfo(SvStorageRef& objStor) +{ + m_objStor = objStor; + m_objStor->FillInfoList(&m_infoList); //Fill all objects into a list from then storage. +} + +void LwpObjectFactory::GetOleObjInfo(SvStorageRef & objStor, SvStorageInfoList ** ppInfoList) +{ + objStor = m_objStor; + *ppInfoList = &m_infoList; +} +#endif +#endif + +/** + * @descr find object in the factory per the object id +*/ +LwpObject* LwpObjectFactory::FindObject(const LwpObjectID &objID) +{ + LwpObjMap::const_iterator it = m_ObjList.find(objID); + if (it != m_ObjList.end()) { + return((*it).second); + } + else + { + return NULL; + } +} +/** + * @descr release object in the factory per the object id +*/ +void LwpObjectFactory::ReleaseObject(const LwpObjectID &objID) +{ + LwpObject* obj = FindObject( objID ); + m_ObjList.erase(objID); + if( obj ) + delete obj; +} diff --git a/lotuswordpro/source/filter/lwpobjfactory.hxx b/lotuswordpro/source/filter/lwpobjfactory.hxx new file mode 100644 index 000000000000..9d7640f2ef48 --- /dev/null +++ b/lotuswordpro/source/filter/lwpobjfactory.hxx @@ -0,0 +1,140 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef LWPOBJFACTORY_HXX_ +#define LWPOBJFACTORY_HXX_ + +#include "lwpheader.hxx" +#include "lwpobjid.hxx" +#include "lwpobj.hxx" +#include "lwpobjhdr.hxx" +#include "lwpidxmgr.hxx" +#if 0 +#ifdef WIN32 +#include <so3/svstor.hxx> +#include <so3/outplace.hxx> +#include <so3/ipobj.hxx> +#include <so3/factory.hxx> +#include <svx/svdoole2.hxx> +#include <svx/svdpage.hxx> +#include <sfx2/objsh.hxx> +#include <sot/storinfo.hxx> +#endif //WIN32 +#endif +/** + * @brief object factory used for lwp object creation and maintenance +*/ +class LwpObjectFactory +{ +public: + LwpObjectFactory(LwpSvStream* pSvStream); +public: +// static LwpObjectFactory* Instance(LwpSvStream* pSvStream=NULL); + ~LwpObjectFactory(); + +//For object Factory and object manager +private: +// static LwpObjectFactory *m_pMgr; + sal_uInt32 m_nNumObjs; + LwpSvStream* m_pSvStream; + struct hashFunc + { + size_t operator()( const LwpObjectID& rName ) const + { + return rName.HashCode(); + } + }; + struct eqFunc + { + bool operator()( const LwpObjectID& rKey1, const LwpObjectID& rKey2 ) const + { + return(rKey1==rKey2); + } + }; + typedef std::hash_map<LwpObjectID, LwpObject *, hashFunc, eqFunc> LwpObjMap; + LwpObjMap m_ObjList; + LwpIndexManager m_IndexMgr; + void ClearObjectMap(); + +protected: + LwpObject* FindObject(const LwpObjectID &objID); +public: + LwpObject* CreateObject(sal_uInt32 type, LwpObjectHeader &objHdr); + LwpObject* QueryObject(const LwpObjectID &objID); + void ReleaseObject(const LwpObjectID &objID); + void ReadIndex(LwpSvStream* pStrm); + LwpIndexManager* GetIndexManager(){return &m_IndexMgr;} +#if 0 +// for OLE objects in current wordpro file +#ifdef WIN32 +private: + SvStorageRef m_objStor; + SvStorageInfoList m_infoList; +public: + void SetOleObjInfo(SvStorageRef & objStor); + void GetOleObjInfo(SvStorageRef & objStor, SvStorageInfoList ** ppInfoList); +#endif +#endif +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpobjhdr.cxx b/lotuswordpro/source/filter/lwpobjhdr.cxx new file mode 100644 index 000000000000..d0fdb4a59839 --- /dev/null +++ b/lotuswordpro/source/filter/lwpobjhdr.cxx @@ -0,0 +1,198 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpobjhdr.hxx" +#include "lwpdefs.hxx" +#include "lwpfilehdr.hxx" + +LwpObjectHeader::LwpObjectHeader() + : m_nTag(0), m_ID(), m_nSize(0), m_bCompressed(sal_False) + // m_nHeaderSize(0), m_nVersionID(0), m_nRefCount(0), m_nFlagBits(0), + //m_nNextVersionOffset(0), m_nNextVersionID(0), +{}; +/** + * @descr read header from stream + */ +void LwpObjectHeader::Read(LwpSvStream &rStrm) +{ + + sal_uInt8 nFlagBits = 0; + sal_uInt32 nVersionID = 0; + sal_uInt32 nRefCount = 0; + sal_uInt32 nNextVersionOffset = 0; + sal_uInt32 nNextVersionID = 0; + sal_uInt32 nHeaderSize = 0; + + if ( LwpFileHeader::m_nFileRevision < 0x000B) + { + rStrm.Read(&m_nTag, sizeof(m_nTag)); + m_ID.Read(&rStrm); + rStrm.Read(&nVersionID, sizeof(nVersionID)); + rStrm.Read(&nRefCount, sizeof(nRefCount)); + rStrm.Read(&nNextVersionOffset, sizeof(nNextVersionOffset)); + + nHeaderSize = sizeof(m_nTag) + m_ID.DiskSize() + + sizeof(nVersionID) + + sizeof(nRefCount) + + sizeof(nNextVersionOffset) + + sizeof(m_nSize); + + if ((m_nTag == TAG_AMI) || ( LwpFileHeader::m_nFileRevision < 0x0006)) + { + rStrm.Read(&nNextVersionID, sizeof(nNextVersionID)); + nHeaderSize += sizeof(nNextVersionID); + } + rStrm.Read(&m_nSize, sizeof(m_nSize)); + } + else + { + sal_uInt16 VOType = 0; + rStrm.Read(&VOType, sizeof(VOType)); + rStrm.Read(&nFlagBits, sizeof(nFlagBits)); + + m_nTag = static_cast<sal_uInt32>(VOType); + m_ID.ReadIndexed(&rStrm); + nHeaderSize = sizeof(VOType) + sizeof(nFlagBits) + m_ID.DiskSizeIndexed(); + + sal_uInt8 tmpByte; + sal_uInt16 tmpShort; + switch (nFlagBits & VERSION_BITS) + { + case ONE_BYTE_VERSION: + rStrm.Read(&tmpByte, sizeof(tmpByte)); + nVersionID = static_cast<sal_uInt32>( tmpByte ); + nHeaderSize++; + break; + + case TWO_BYTE_VERSION: + rStrm.Read(&tmpShort, sizeof(tmpShort)); + nVersionID = static_cast<sal_uInt32>( tmpShort ); + nHeaderSize += 2; + break; + + case FOUR_BYTE_VERSION: + rStrm.Read(&nVersionID, sizeof(nVersionID)); + nHeaderSize += 4; + break; + case DEFAULT_VERSION: //fall through + default: + nVersionID = 2; + break; // nothing + } + + switch (nFlagBits & REFCOUNT_BITS) + { + case ONE_BYTE_REFCOUNT: + rStrm.Read(&tmpByte, sizeof(tmpByte)); + nRefCount = static_cast<sal_uInt32>( tmpByte ); + nHeaderSize++; + break; + + case TWO_BYTE_REFCOUNT: + rStrm.Read(&tmpShort, sizeof(tmpShort)); + nRefCount = static_cast<sal_uInt32>( tmpShort ); + nHeaderSize += 2; + break; + + case FOUR_BYTE_REFCOUNT: //through + default: + rStrm.Read(&nRefCount, sizeof(nRefCount)); + nHeaderSize += 4; + break; + } + + if (nFlagBits & HAS_PREVOFFSET) + { + rStrm.Read(&nNextVersionOffset, sizeof(nNextVersionOffset)); + nHeaderSize += 4; + } + else + nNextVersionOffset = BAD_OFFSET; + + switch (nFlagBits & SIZE_BITS) + { + case ONE_BYTE_SIZE: + rStrm.Read(&tmpByte, sizeof(tmpByte)); + m_nSize = static_cast<sal_uInt32>( tmpByte ); + nHeaderSize++; + break; + + case TWO_BYTE_SIZE: + rStrm.Read(&tmpShort, sizeof(tmpShort)); + m_nSize = static_cast<sal_uInt32>(tmpShort); + nHeaderSize += 2; + break; + + case FOUR_BYTE_SIZE: //go through + default: + rStrm.Read(&m_nSize, sizeof(m_nSize)); + nHeaderSize += 4; + break; + } + + if (nFlagBits & DATA_COMPRESSED) + { + m_bCompressed = sal_True; + } + } +} diff --git a/lotuswordpro/source/filter/lwpobjhdr.hxx b/lotuswordpro/source/filter/lwpobjhdr.hxx new file mode 100644 index 000000000000..0877ea927020 --- /dev/null +++ b/lotuswordpro/source/filter/lwpobjhdr.hxx @@ -0,0 +1,137 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + + +#ifndef _LWPOBJECTHEADER_HXX +#define _LWPOBJECTHEADER_HXX + +#include "lwpobjid.hxx" +#include "lwpobjtags.hxx" +/** + * @brief Base class of all Lwp VO objects +*/ +class LwpObjectHeader +{ +public: + LwpObjectHeader(); +private: + sal_uInt32 m_nTag; + LwpObjectID m_ID; + sal_uInt32 m_nSize; //Data size + sal_Bool m_bCompressed; + + //localize the following memebers to save memory + //sal_uInt8 m_nFlagBits; + //sal_uInt32 m_nVersionID; + //sal_uInt32 m_nRefCount; + //sal_uInt32 m_nNextVersionOffset; + //sal_uInt32 m_nNextVersionID; + //sal_uInt32 m_nHeaderSize; + + enum + { + VERSION_BITS = 0x03, + DEFAULT_VERSION = 0x00, + ONE_BYTE_VERSION = 0x01, + TWO_BYTE_VERSION = 0x02, + FOUR_BYTE_VERSION = 0x03, + + REFCOUNT_BITS = 0x0C, + ONE_BYTE_REFCOUNT = 0x04, + TWO_BYTE_REFCOUNT = 0x08, + FOUR_BYTE_REFCOUNT = 0x0C, + + SIZE_BITS = 0x30, + ONE_BYTE_SIZE = 0x10, + TWO_BYTE_SIZE = 0x20, + FOUR_BYTE_SIZE = 0x30, + + HAS_PREVOFFSET = 0x40, + DATA_COMPRESSED = 0x80 + }; + +public: + void Read(LwpSvStream &pStrm); + inline sal_uInt32 GetTag(); + inline sal_uInt32 GetSize(); + inline LwpObjectID* GetID(); + inline sal_Bool IsCompressed(); +}; + +inline sal_uInt32 LwpObjectHeader::GetTag() +{ + return m_nTag; +} +inline sal_uInt32 LwpObjectHeader::GetSize() +{ + return m_nSize; +} +inline LwpObjectID* LwpObjectHeader::GetID() +{ + return &m_ID; +} +inline sal_Bool LwpObjectHeader::IsCompressed() +{ + return m_bCompressed; +} +#endif diff --git a/lotuswordpro/source/filter/lwpobjid.cxx b/lotuswordpro/source/filter/lwpobjid.cxx new file mode 100644 index 000000000000..ba042f720d6b --- /dev/null +++ b/lotuswordpro/source/filter/lwpobjid.cxx @@ -0,0 +1,256 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + + +#ifndef _LWPOBJECTID_HXX +#include "lwpobjid.hxx" +#endif + +#include "lwpfilehdr.hxx" +#include "lwpobjfactory.hxx" +#include "lwpglobalmgr.hxx" + +LwpObjectID::LwpObjectID(sal_uInt32 low, sal_uInt16 high) + :m_nLow(low), m_nHigh(high), m_bIsCompressed(sal_False), m_nIndex(0) +{ +} +/** + * @descr Read object id with format: low(4bytes)+high(2bytes) from stream + * for LWP7 record +*/ +sal_uInt32 LwpObjectID::Read(LwpSvStream *pStrm) +{ + pStrm->Read(&m_nLow, sizeof(m_nLow)); + pStrm->Read(&m_nHigh, sizeof(m_nHigh)); + return DiskSize(); +} +/** + * @descr Read object id with format: low(4bytes)+high(2bytes) from object stream +*/ +sal_uInt32 LwpObjectID::Read(LwpObjectStream *pObj) +{ + pObj->QuickRead(&m_nLow, sizeof(m_nLow)); + pObj->QuickRead(&m_nHigh, sizeof(m_nHigh)); + return DiskSize(); +} +/** + * @descr Read object id with indexed format from stream + * if index>0, lowid is get from time table per the index +* else index+lowid+highid +*/ +sal_uInt32 LwpObjectID::ReadIndexed(LwpSvStream *pStrm) +{ +//note the m_nLow store the index instead of time from the timetable as in LWP + m_bIsCompressed = sal_False; + if( LwpFileHeader::m_nFileRevision < 0x000B) + { + return Read(pStrm); + } + + pStrm->Read(&m_nIndex, sizeof(m_nIndex)); + + if (m_nIndex) + { + m_bIsCompressed = sal_True; + //m_nLow = index; //note the m_nLow stores the index instead of the actual time id + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + LwpObjectFactory* pFactory = pGlobal->GetLwpObjFactory(); + LwpIndexManager* pIdxMgr = pFactory->GetIndexManager(); + m_nLow = pIdxMgr->GetObjTime( (sal_uInt16)m_nIndex); + } + else + { + pStrm->Read(&m_nLow, sizeof(m_nLow)); + } + pStrm->Read(&m_nHigh, sizeof(m_nHigh)); + return DiskSizeIndexed(); +} + +/** + * @descr Read object id with indexed format from object stream + * if index>0, lowid is get from time table per the index +* else index+lowid+highid +*/ +sal_uInt32 LwpObjectID::ReadIndexed(LwpObjectStream *pStrm) +{ + m_bIsCompressed = sal_False; + if(LwpFileHeader::m_nFileRevision < 0x000B) + { + return Read(pStrm); + } + + pStrm->QuickRead(&m_nIndex, sizeof(m_nIndex)); + if (m_nIndex) + { + m_bIsCompressed = sal_True; + //m_nLow = index; //note the m_nLow stores the index instead of the actual time id + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + LwpObjectFactory* pFactory = pGlobal->GetLwpObjFactory(); + LwpIndexManager* pIdxMgr = pFactory->GetIndexManager(); + m_nLow = pIdxMgr->GetObjTime( (sal_uInt16)m_nIndex); + } + else + { + pStrm->QuickRead(&m_nLow, sizeof(m_nLow)); + } + pStrm->QuickRead(&m_nHigh, sizeof(m_nHigh)); + return DiskSizeIndexed(); +} +/** + * @descr Read object id with compressed format from stream + * if diff == 255: 255+lowid+highid + * else lowid equals to the lowid of previous low id + * and high id = the high id of previous id + diff +1 +*/ +sal_uInt32 LwpObjectID::ReadCompressed( LwpSvStream* pStrm, LwpObjectID &prev ) +{ + sal_uInt32 len=0; + sal_uInt8 diff; + + len = pStrm->Read( &diff, sizeof(diff)); + if (diff == 255) + { + len += Read(pStrm); + } + else + { + m_nLow = prev.GetLow(); + m_nHigh = prev.GetHigh() + diff +1; + } + return len; +} +/** + * @descr Read object id with compressed format from object stream + * if diff == 255: 255+lowid+highid + * else lowid equals to the lowid of previous low id + * and high id = the high id of previous id + diff +1 +*/ +sal_uInt32 LwpObjectID::ReadCompressed( LwpObjectStream* pObj, LwpObjectID &prev ) +{ + + sal_uInt32 len=0; + sal_uInt8 diff; + + len += pObj->QuickRead( &diff, sizeof(diff)); + + if (diff == 255) + { + len += Read(pObj); + } + else + { + m_nLow = prev.GetLow(); + m_nHigh = prev.GetHigh() + diff +1; + } + return len; +} +/** + * @descr return the size of indexed object id +*/ +sal_uInt32 LwpObjectID::DiskSizeIndexed() const +{ + return sizeof(sal_uInt8) + + (((0 < m_nIndex) && (m_nIndex <= 255)) ? 0 : sizeof(m_nLow)) + + sizeof(m_nHigh); +} +/** + * @descr return the size of object id with format: low(4bytes)+high(2bytes) +*/ +sal_uInt32 LwpObjectID::DiskSize() const +{ + return sizeof(m_nLow) + sizeof(m_nHigh); +} +/** + * @descr get object from object factory per the object id +*/ +LwpObject* LwpObjectID::obj(VO_TYPE tag) const +{ + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + LwpObjectFactory* pObjMgr = pGlobal->GetLwpObjFactory(); + if(IsNull()) + { + return NULL; + } + LwpObject* pObj = pObjMgr->QueryObject(*this); + if( tag!=VO_INVALID && (pObj) ) + { + if(tag!=pObj->GetTag()) + { + pObj=NULL; + } + } + return(pObj); +} +/** + * @descr returns a buffer that contains the highid + lowid + */ +sal_Char* LwpObjectID::GetBuffer(sal_Char *buf) +{ + buf[0] = m_nHigh && 0xFF00; + buf[1] = m_nHigh && 0x00FF; + buf[2] = m_nLow && 0xFF000000; + buf[3] = m_nLow && 0x00FF0000; + buf[4] = m_nLow && 0x0000FF00; + buf[5] = m_nLow && 0x000000FF; + return buf; +} diff --git a/lotuswordpro/source/filter/lwpobjid.hxx b/lotuswordpro/source/filter/lwpobjid.hxx new file mode 100644 index 000000000000..006e93a21f4e --- /dev/null +++ b/lotuswordpro/source/filter/lwpobjid.hxx @@ -0,0 +1,159 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPOBJECTID_HXX +#define _LWPOBJECTID_HXX + +#include "lwpheader.hxx" +#include "lwpobjstrm.hxx" +#include "lwpdefs.hxx" + +class LwpObject; + +/** + * @brief object id class +*/ +class LwpObjectID +{ +public: + LwpObjectID(sal_uInt32 low=0, sal_uInt16 high=0); +private: + sal_uInt32 m_nLow; + sal_uInt16 m_nHigh; + sal_uInt8 m_nIndex; + sal_Bool m_bIsCompressed; +public: + sal_uInt32 Read( LwpSvStream *pStrm ); + sal_uInt32 Read( LwpObjectStream *pStrm ); + sal_uInt32 ReadIndexed( LwpSvStream* pStrm ); + sal_uInt32 ReadIndexed( LwpObjectStream *pStrm ); + sal_uInt32 ReadCompressed( LwpSvStream* pStrm, LwpObjectID &prev ); + sal_uInt32 ReadCompressed( LwpObjectStream* pObj, LwpObjectID& prev ); + + sal_uInt32 DiskSize() const; + sal_uInt32 DiskSizeIndexed() const; + BOOL IsNull() const; + sal_Bool IsCompressed(); + + sal_uInt32 GetLow() const ; + sal_uInt16 GetHigh() const ; + void SetLow(sal_uInt32 nl); + void SetHigh(sal_uInt16 nh); + + BOOL operator == (const LwpObjectID &Other) const; + BOOL operator != (const LwpObjectID &Other) const; + sal_Char* GetBuffer(sal_Char* buf); + LwpObject* obj(VO_TYPE tag=VO_INVALID) const; + size_t HashCode() const; +}; + +inline BOOL LwpObjectID::IsNull() const +{ + return (m_nLow == 0) && (m_nHigh == 0); +} + +inline BOOL LwpObjectID::operator == (const LwpObjectID &Other) const +{ + return (m_nHigh == Other.m_nHigh) && (m_nLow == Other.m_nLow); +} + +inline BOOL LwpObjectID::operator != (const LwpObjectID &Other) const +{ + return (m_nHigh != Other.m_nHigh) || (m_nLow != Other.m_nLow); +} + +inline sal_Bool LwpObjectID::IsCompressed() +{ + return m_bIsCompressed; +} +inline sal_uInt32 LwpObjectID::GetLow() const +{ + return m_nLow; +} +inline sal_uInt16 LwpObjectID::GetHigh() const +{ + return m_nHigh; +} +inline void LwpObjectID::SetLow(sal_uInt32 nl) +{ + m_nLow=nl; +} +inline void LwpObjectID::SetHigh(sal_uInt16 nh) +{ + m_nHigh = nh; +} +inline size_t LwpObjectID::HashCode() const +{ + rtl::OUString str; + if(m_nIndex) + { + str = rtl::OUString(m_nIndex) + rtl::OUString(m_nHigh); + } + else + { + str = rtl::OUString(m_nLow) + rtl::OUString(m_nHigh); + } + return str.hashCode(); +} + +#endif diff --git a/lotuswordpro/source/filter/lwpobjstrm.cxx b/lotuswordpro/source/filter/lwpobjstrm.cxx new file mode 100644 index 000000000000..044ae3969bf1 --- /dev/null +++ b/lotuswordpro/source/filter/lwpobjstrm.cxx @@ -0,0 +1,371 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpobjstrm.hxx" +#include "lwptools.hxx" + +/** + * @descr ctor() from LwpSvStream + */ +LwpObjectStream::LwpObjectStream(LwpSvStream *pStrm, BOOL isCompressed, sal_uInt16 size) + :m_pContentBuf(NULL), m_nBufSize(size), m_nReadPos(0), + m_pStrm(pStrm), m_bCompressed(isCompressed) +{ + assert(size<IO_BUFFERSIZE); + ReadStream(); +} +/** + * @descr read object data from stream + */ +void LwpObjectStream::ReadStream() +{ + if(m_nBufSize == 0) + { + m_pContentBuf = NULL; + } + else + { + Read2Buffer(); + } +} +/** + * @descr read object data from stream to buffer + */ +void LwpObjectStream::Read2Buffer() +{ + if( m_pContentBuf ) + { + ReleaseBuffer(); + } + + m_nReadPos = 0; + + if( m_bCompressed ) + { + sal_uInt8* pCompressBuffer = new sal_uInt8[m_nBufSize]; + m_pStrm->Read(pCompressBuffer, m_nBufSize); + + sal_uInt8 pTempDst[IO_BUFFERSIZE]; + m_nBufSize = DecompressBuffer(pTempDst, pCompressBuffer, m_nBufSize); + assert( m_nBufSize < IO_BUFFERSIZE); + delete [] pCompressBuffer; + pCompressBuffer = NULL; + + m_pContentBuf = AllocBuffer(m_nBufSize); + memcpy(m_pContentBuf, pTempDst, m_nBufSize); + //delete [] pTempDst; + + } + else + { + m_pContentBuf = AllocBuffer(m_nBufSize); + m_pStrm->Read(m_pContentBuf, m_nBufSize); + } +} +/** + * @descr alloc size of buffer + */ +sal_uInt8* LwpObjectStream::AllocBuffer(sal_uInt16 size) +{ + if(size<=100) + { + return(m_SmallBuffer); + } + else + { + return (new sal_uInt8[size]); + } +} +/** + * @descr signal complete to release object buffer + */ +void LwpObjectStream::ReadComplete() +{ + ReleaseBuffer(); +} + +LwpObjectStream::~LwpObjectStream() +{ + ReleaseBuffer(); +} +/** + * @descr release object buffer + */ +void LwpObjectStream::ReleaseBuffer() +{ + + if(m_nBufSize>100) + { + if(m_pContentBuf) + { + delete [] m_pContentBuf; + m_pContentBuf = NULL; + } + } +} +/** + * @descr read len bytes from object stream to buffer + */ +sal_uInt16 LwpObjectStream::QuickRead(void* buf, sal_uInt16 len) +{ + if( len > m_nBufSize - m_nReadPos ) + { + assert(false); + len = m_nBufSize - m_nReadPos; + } + if( m_pContentBuf && len) + { + memcpy(buf, m_pContentBuf+m_nReadPos, len); + m_nReadPos += len; + } + return len; +} +/** + * @descr SeekRel pos in object stream/buffer + */ +void LwpObjectStream::SeekRel(sal_uInt16 pos) +{ + if( pos > m_nBufSize - m_nReadPos) + pos = m_nBufSize - m_nReadPos; + m_nReadPos +=pos; +} +/** + * @descr Seek to pos in object buffer/buffer + */ +BOOL LwpObjectStream::Seek( sal_uInt16 pos) +{ + if(pos>=0 && pos<m_nBufSize) + { + m_nReadPos = pos; + return TRUE; + } + return FALSE; +} + +/** + * @descr Quick read sal_Bool + */ +sal_Bool LwpObjectStream::QuickReadBool() +{ + sal_uInt16 nValue; + QuickRead(&nValue, 2); + return (sal_Bool)(nValue != 0); +} +/** + * @descr Quick read sal_uInt32 + */ +sal_uInt32 LwpObjectStream::QuickReaduInt32() +{ + sal_uInt32 nValue; + QuickRead(&nValue, sizeof(nValue)); + return nValue; +} +/** + * @descr Quick read sal_uInt32 + */ +sal_uInt16 LwpObjectStream::QuickReaduInt16() +{ + sal_uInt16 nValue; + QuickRead(&nValue, sizeof(nValue)); + return nValue; +} +/** + * @descr Quick read sal_Int32 + */ +sal_Int32 LwpObjectStream::QuickReadInt32() +{ + sal_Int32 nValue; + QuickRead(&nValue, sizeof(nValue)); + return nValue; +} +/** + * @descr Quick read sal_Int16 + */ +sal_Int16 LwpObjectStream::QuickReadInt16() +{ + sal_Int16 nValue; + QuickRead(&nValue, sizeof(nValue)); + return nValue; +} +/** + * @descr Quick read sal_Int8 + */ +sal_Int8 LwpObjectStream::QuickReadInt8() +{ + sal_Int8 nValue; + QuickRead(&nValue, sizeof(nValue)); + return nValue; +} +/** + * @descr Quick read sal_uInt8 + */ +sal_uInt8 LwpObjectStream::QuickReaduInt8() +{ + sal_uInt8 nValue; + QuickRead(&nValue, sizeof(nValue)); + return nValue; +} +/** + * @descr skip extra bytes + */ +void LwpObjectStream::SkipExtra() +{ + sal_uInt16 extra; + + QuickRead(&extra, sizeof(extra)); + while (extra != 0) + { + assert(false); + QuickRead(&extra, sizeof(extra)); + } +} +/** + * @descr check if extra bytes + */ +sal_uInt16 LwpObjectStream::CheckExtra() +{ + sal_uInt16 extra; + QuickRead(&extra, sizeof(extra)); + return extra; +} +/** + * @descr decompress data buffer from pSrc to pDst + * Refer to the CAmiPro40File::DecompressObject(~) in LWP + */ +sal_uInt16 LwpObjectStream::DecompressBuffer(sal_uInt8* pDst, sal_uInt8* pSrc, sal_uInt16 Size) +{ + sal_uInt16 Cnt; + sal_uInt32 DstSize = 0; + + while (Size) + { + switch (*pSrc & 0xC0) + { + case 0x00: + // 1 - 64 bytes of 0 + // Code 00zzzzzz + // where zzzzzz is the count - 1 of compressed 0 bytes + + Cnt = (*pSrc++ & 0x3F) + 1; + memset(pDst, 0, Cnt); + pDst += Cnt; + DstSize += Cnt; + Size--; + break; + + case 0x40: + // 1 - 8 zeros followed by 1 - 8 non-zero + // Code 01zzznnn binary + // where zzz is the count - 1 of compressed zero bytes + // and nnn is the count - 1 of following non-zero bytes + + Cnt = ((*pSrc & 0x38) >> 3) + 1; + memset(pDst, 0, Cnt); + pDst += Cnt; + DstSize += Cnt; + Cnt = (*pSrc++ & 0x07) + 1; + memcpy(pDst, pSrc, Cnt); + pDst += Cnt; + DstSize += Cnt; + pSrc += Cnt; + Size -= Cnt + 1; + break; + + case 0x80: + // 1 0 followed by 1 - 64 bytes of non-zero + // Code 0x80 (or 0x40 if 8 or less non-zero) + // Code 10nnnnnn binary + // where nnnnnn is the count - 1 of following non-zero bytes + + *pDst++ = 0; + DstSize++; + // fall thru into next case! + + case 0xC0: + // 1 - 64 bytes of non-zero + // Code = 11nnnnnn binary + // nnnnnn is the count less 1 of following non-zero bytes + + Cnt = (*pSrc++ & 0x3F) + 1; + memcpy(pDst, pSrc, Cnt); + pDst += Cnt; + DstSize += Cnt; + pSrc += Cnt; + Size -= Cnt + 1; + break; + } + assert(DstSize < IO_BUFFERSIZE); + } + return(static_cast<sal_uInt16>(DstSize)); +} +/** + * @descr quick read string with 1252 + */ +OUString LwpObjectStream::QuickReadStringPtr(void) +{ + sal_uInt16 len, diskSize; + + diskSize = QuickReaduInt16(); + len = QuickReaduInt16(); + + OUString str; + rtl_TextEncoding rEncode = RTL_TEXTENCODING_MS_1252; + LwpTools::QuickReadUnicode(this, str, diskSize-sizeof(diskSize), rEncode); + return str; +} diff --git a/lotuswordpro/source/filter/lwpobjstrm.hxx b/lotuswordpro/source/filter/lwpobjstrm.hxx new file mode 100644 index 000000000000..afb1a55d2bb4 --- /dev/null +++ b/lotuswordpro/source/filter/lwpobjstrm.hxx @@ -0,0 +1,127 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * object stream header file + * stream for one LwpObject body data + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPOBJECTSTREAM_HXX +#define _LWPOBJECTSTREAM_HXX + +#include "lwpheader.hxx" +#include "lwpsvstream.hxx" +/** + * @brief stream class for LwpObject body data + * provide stream like interface to read object data +*/ +class LwpObjectStream +{ +public: + LwpObjectStream(LwpSvStream *pStrm, BOOL isCompressed, sal_uInt16 size); + ~LwpObjectStream(); +private: + sal_uInt8* m_pContentBuf; //The content buffer of the object + sal_uInt8 m_SmallBuffer[100]; //To avoid frequent new + enum + { + IO_BUFFERSIZE = 0xFF00 //Refer to LWP, not sure if it is enough + }; + sal_uInt16 m_nBufSize; //The total size of m_pContentBuf + sal_uInt16 m_nReadPos; //The position of the quick read + LwpSvStream* m_pStrm; + BOOL m_bCompressed; +public: + sal_uInt16 QuickRead(void* buf, sal_uInt16 len); + sal_uInt16 GetPos() { return m_nReadPos; } + void SeekRel(sal_uInt16 pos); + BOOL Seek( sal_uInt16 pos); + void SkipExtra(); + sal_uInt16 CheckExtra(); + + //01/14/2005 + sal_Bool QuickReadBool(); + sal_uInt32 QuickReaduInt32(); + sal_uInt16 QuickReaduInt16(); + sal_uInt8 QuickReaduInt8(); + sal_Int32 QuickReadInt32(); + sal_Int16 QuickReadInt16(); + sal_Int8 QuickReadInt8(); + //end + + OUString QuickReadStringPtr(void); + //void QuickReadString(unsigned char *pString, sal_uInt16 len); + void QuickReadStringWithMax(unsigned char * pString, sal_uInt16 MaxLen); + +public: + void ReadComplete(); + LwpSvStream *GetStream(); +private: + void ReadStream(); + void Read2Buffer(); + sal_uInt8* AllocBuffer(sal_uInt16 size); + sal_uInt16 DecompressBuffer(sal_uInt8* pDst, sal_uInt8* pSrc, sal_uInt16 Size); + void ReleaseBuffer(); +}; + +inline LwpSvStream *LwpObjectStream::GetStream() +{ + return m_pStrm; +} +#endif diff --git a/lotuswordpro/source/filter/lwpobjtags.hxx b/lotuswordpro/source/filter/lwpobjtags.hxx new file mode 100644 index 000000000000..af6733cd6e8e --- /dev/null +++ b/lotuswordpro/source/filter/lwpobjtags.hxx @@ -0,0 +1,241 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _LWPOBJTAGS_HXX_ +#define _LWPOBJTAGS_HXX_ + +// file header object +#define TAG_AMI 0x3750574CUL // "LWP7" + +// layout sub-objects +#define TAG_ENDSUBOBJ 0x646E4553UL // "SEnd" +#define TAG_LAY_GEOMETRY 0x6F65474CUL // "LGeo" +#define TAG_LAY_OFFSET 0x66664F4CUL // "LOff" +#define TAG_LAY_SCALE 0x6C63534CUL // "LScl" +#define TAG_LAY_MARGINS 0x72614D4CUL // "LMar" +#define TAG_LAY_RELATIVITY 0x6C65524CUL // "LRel" +#define TAG_LAY_COLUMNS 0x6C6F434CUL // "LCol" +#define TAG_LAY_BORDER 0x726F424CUL // "LBor" +#define TAG_LAY_GUTTER 0x7475474CUL // "LGut" +#define TAG_LAY_JOIN 0x696F4A4CUL // "LJoi" +#define TAG_LAY_BACKGROUND 0x6B63424CUL // "LBck" +#define TAG_LAY_SHADOW 0x7764534CUL // "LSdw" +#define TAG_LAY_LEADERDOTS 0x72644C4CUL // "LLdr" +#define TAG_LAY_NUMERICS 0x6D754E4CUL // "LNum" +#define TAG_LAY_HIERARCHY 0x6569484CUL // "LHie" + +// Paragraph properties +#define TAG_PARA_SHOW 0x65644850UL // "PHde" +#define TAG_PARA_HIDE 0x77685350UL // "PShw" +#define TAG_PARA_ALIGN 0x6e6c4150UL // "PAln" +#define TAG_PARA_INDENT 0x74644950UL // "PIdt" +#define TAG_PARA_SPACING 0x63705350UL // "PSpc" +#define TAG_PARA_BORDER 0x64724250UL // "PBrd" +#define TAG_PARA_BACKGROUND 0x6b614250UL // "PBak" +#define TAG_PARA_BREAKS 0x6b724250UL // "PBrk" +#define TAG_PARA_BULLET 0x746c4250UL // "PBlt" +#define TAG_PARA_NUMBERING 0x6d754e50UL // "PNum" +#define TAG_PARA_TAB 0x62615450UL // "PTab" +#define TAG_PARA_KINSOKU 0x6e694b50UL // "PKin" +#define TAG_PARA_PROPLIST 0x70725050UL // "PPrp" + +#define TAG_SLVLIST 0x734C4C53UL // "SLLs" +#define TAG_DLFVLIST 0x4C464C44UL // "DLFL" +#define TAG_DLVLISTHEAD 0x64484C44UL // "DLHd" +#define TAG_DLNFVLIST 0x464E4C44UL // "DLNF" +#define TAG_DLVLIST 0x734C4C44UL // "DLLs" + +#define TAG_DOCUMENT 0x20636F44UL // "Doc " +#define TAG_VERDOCUMENT 0x636F4456UL // "VDoc" +#define TAG_DOCDATA 0x44636F44UL // "DocD" +#define TAG_OBJINDEX 0x78644E4FUL // "ONdx" +#define TAG_DIVISIONINFO 0x49766944UL // "DivI" +#define TAG_CONTENT 0x746E6F43UL // "Cont" +#define TAG_HEADCONTENT 0x746E4348UL // "HCnt" +#define TAG_STORY 0x79727453UL // "Stry" +#define TAG_TABLE 0x6C626154UL // "Tabl" +#define TAG_SUPERTABLE 0x62547553UL // "SuTb" +#define TAG_GLOSSARY 0x736F6C47UL // "Glos" +#define TAG_PARALLELCOLUMNS 0x6C6F4350UL // "PCol" +#define TAG_PARALLELCOLUMNSLAYOUT 0x794C4350UL // "PCLy" +#define TAG_PARALLELCOLUMNSBLOCK 0x6C424350UL // "PCBl" +#define TAG_PARALLELCOLUMNSCONNECTEDBLOCK 0x42434350UL // "PCCB" +#define TAG_FOOTNOTETABLE 0x62546E46UL // "FnTb" +#define TAG_PARAGRAPH 0x61726150UL // "Para" +#define TAG_BOOKMARK 0x6B4D6B42UL // "BkMk" +#define TAG_DDELINK 0x4C656444UL // "DdeL" +#define TAG_VIRTUALLAYOUT 0x79614C56UL // "VLay" +#define TAG_LITELAYOUT 0x79614C4CUL // "LLay" +#define TAG_LAYOUT 0x2079614CUL // "Lay " +#define TAG_PERMISSIVELAYOUT 0x79614C50UL // "PLay" +#define TAG_HEADLAYOUT 0x79614C48UL // "HLay" +#define TAG_FRAMELAYOUT 0x6D617246UL // "Fram" +#define TAG_DROPCAPLAYOUT 0x70614344UL // "DCap" +#define TAG_NOTELAYOUT 0x794C744EUL // "NtLy" +#define TAG_NOTETEXTLAYOUT 0x6C54744EUL // "NtTl" +#define TAG_NOTEHEADERLAYOUT 0x6C48744EUL // "NtHl" +#define TAG_PAGELAYOUT 0x65676150UL // "Page" +#define TAG_HEADERLAYOUT 0x4C726448UL // "HdrL" +#define TAG_FOOTERLAYOUT 0x4C727446UL // "FtrL" +#define TAG_ROWLAYOUT 0x4C776F52UL // "RowL" +#define TAG_COLUMNLAYOUT 0x4C6C6F43UL // "ColL" +#define TAG_FNROWLAYOUT 0x4C526E46UL // "FnRL" +#define TAG_CELLLAYOUT 0x4C6C6543UL // "CelL" +#define TAG_VIEWPORTLAYOUT 0x794C7056UL // "VpLy" +#define TAG_CONNECTEDCELLLAYOUT 0x4C436E43UL // "CnCL" +#define TAG_HIDDENCELLLAYOUT 0x4C436E48UL // "HnCL" +#define TAG_TABLEHEADINGLAYOUT 0x4C486254UL // "TbHL" +#define TAG_ROWHEADINGLAYOUT 0x4C486F52UL // "RoHL" +#define TAG_FNCELLLAYOUT 0x4C436E46UL // "FnCL" +#define TAG_FOOTNOTELAYOUT 0x794C6E46UL // "FnLy" +#define TAG_TABLELAYOUT 0x794C6254UL // "TbLy" +#define TAG_SUPERTABLELAYOUT 0x4C625453UL // "STbL" +#define TAG_FNSUPERTABLELAYOUT 0x4C545346UL // "FSTL" +#define TAG_ENSUPERTABLELAYOUT 0x4C545345UL // "ESTL" +#define TAG_SUPERPARALLELCOLUMNLAYOUT 0x4C435053UL // "SPCL" +#define TAG_SUPERGLOSSARYLAYOUT 0x534C4753UL // "SGLS" +#define TAG_CONTONLAYOUT 0x4C6E4F43UL // "COnL" +#define TAG_CONTFROMLAYOUT 0x4C724643UL // "CFrL" +#define TAG_CHARSTYLE 0x79745343UL // "CSty" +#define TAG_PARASTYLE 0x79745350UL // "PSty" +#define TAG_TABRACK 0x20626154UL // "Tab " +#define TAG_GROUPLAYOUT 0x4c707247UL // "GrpL" +#define TAG_GROUPFRAME 0x46707247UL // "GrpF" +#define TAG_SILVERBULLET 0x6c754253UL // "SBul" +#define TAG_TABLEHEADING 0x486c6254UL // "TblH" +#define TAG_LINEHINT 0x746e484cUL // "LHnt" +#define TAG_TABLEHINT 0x746e4854UL // "THnt" +#define TAG_PAGEHINT 0x746e4850UL // "PHnt" +#define TAG_NUMBERHINT 0x746e484EUL // "NHnt" +#define TAG_FOOTNOTESEEN 0x65655346UL // "FSee" +#define TAG_OBJECTHOLDER 0x646c6F48UL // "Hold" +#define TAG_LISTLIST 0x744c744cUL // "LtLt" +#define TAG_FOOTNOTELISTLIST 0x744c7446UL // "FtLt" +#define TAG_ENDNOTELAYOUT 0x794C6E45UL // "EnLy" +#define TAG_FOOTNOTE 0x746F4E46UL // "FNot" +#define TAG_CELLNUMBERHINT 0x74486e43UL // "CnHt" +#define TAG_MARKER 0x6b72614DUL // "Mark" +#define TAG_STORYMARKER 0x6b724d53UL // "SMrk" +#define TAG_TABLEMARKER 0x6b724d54UL // "TMrk" +#define TAG_FIELDMARKER 0x4c724d54UL // "FMrk" +#define TAG_NUMERICVALUE 0x6c61564eUL // "NVal" +#define TAG_TEXTVALUE 0x6c615654UL // "TVal" +#define TAG_REFERENCEVALUE 0x6c615652UL // "RVal" +#define TAG_CELLLIST 0x64734c43UL // "CLst" +#define TAG_DEPENDENT 0x74647044UL // "Dpdt" +#define TAG_FORMULAINFO 0x616c7246UL // "Frla" +#define TAG_TABLERANGE 0x676e5254UL // "TRng" +#define TAG_CELLRANGE 0x676e5243UL // "CRng" +#define TAG_FOLDER 0x726c6446UL // "Fldr" +#define TAG_ROWLIST 0x74734c52UL // "RLst" +#define TAG_SECTION 0x74636553UL // "Sect" +#define TAG_INDEXSECTION 0x63657349UL // "Isec" +#define TAG_GRAPHIC 0x68707247UL // "Grph" +#define TAG_DIRTBAG 0x74726944UL // "Dirt" +#define TAG_NAMEDOUTLINESEQ 0x71534f4eUL // "NOSq" +#define TAG_OUTLINESEQITEM 0x7449534fUL // "OSIt" +#define TAG_TOCSUPERTABLELAYOUT 0x6C747354UL // "Tstl" +#define TAG_DOCSOCKET 0x786F5344UL // "DSox" +#define TAG_USER_VERSION 0x72655655UL // "UVer" +#define TAG_NOTE 0x65746F4EUL // "Note" +#define TAG_MARKERLIST 0x74734c4dUL // "MLst" +#define TAG_BOOKMARKMARKERLIST 0x744c4d42UL // "BMLt" +#define TAG_DDEMARKMARKERLIST 0x744c4d44UL // "DMLt" +#define TAG_FIELDMARKERLIST 0x744c6c46UL // "FlLt" +#define TAG_CHBLKMARKER 0x6b4d4843UL // "CHMk" +#define TAG_CHBMARKERLIST 0x424d4c43UL // "CMLt" +#define TAG_PPTRHOLDER 0x72745070UL // "pPtr" +#define TAG_QPTRHOLDER 0x72745071UL // "qPtr" +#define TAG_GPTRHOLDER 0x72745067UL // "gPtr" +#define TAG_PROPLIST 0x706f7250UL // "Prop" +#define TAG_HEADHOLDER 0x646C4848UL // "HHld" +#define TAG_HEADTAILHOLDER 0x72485448UL // "HTHr" +#define TAG_OLEOBJECT 0x4F656C4FUL // "OleO" +#define TAG_ENUMOBJHD 0x64484F45UL // "EOHd" +#define TAG_TOCLEVELDATA 0x4C6f6354UL // "TocL" +#define TAG_VERPTR 0x72745056UL // "VPtr" +#define TAG_VERQTR 0x72745156UL // "VQtr" +#define TAG_VERDOCINFO 0x6E494456UL // "VDIn" +#define TAG_TOMBSTONE 0x20504952UL // "RIP " +#define TAG_NOTIFY 0x7966744EUL // "Ntfy" +#define TAG_LONGHOLDER 0x676E6F4CUL // "Long" + +#ifdef SMARTEXT +#define TAG_STXINFO 0x6e495f53UL // "S_In" +#define TAG_STXMANAGER 0x674d5f53UL // "S_Mg" +#define TAG_STXLINK 0x6b4c5f53UL // "S_Lk" +#define TAG_STXLINKMARKERLIST 0x4c4d5f53UL // "S_ML" +#endif // SMARTEXT + +#define TAG_DIVOPTS 0x74704f44UL // "DOpt" +#define TAG_FOOTNOTEOPTS 0x704f4e46UL // "FNOp" + +#ifdef RUBY +#define TAG_RUBYLAYOUT 0x794C6252UL // "RbLy" +#define TAG_RUBYMARKER 0x6b724d52UL // "RMrk" +#define TAG_RUBYMARKERLIST 0x744c6252UL // "RbLt" +#endif + +#define TAG_ALIGNMENTPIECE 0x63506c41UL // "AlPc" +#define TAG_INDENTPIECE 0x63506e49UL // "InPc" +#define TAG_PARABORDERPIECE 0x63504250UL // "PBPc" +#define TAG_PARABACKGROUNDPIECE 0x63505250UL // "PRPc" +#define TAG_SPACINGPIECE 0x63507053UL // "SpPc" +#define TAG_BREAKSPIECE 0x63507242UL // "BrPc" +#define TAG_NUMBERINGPIECE 0x6350724eUL // "NrPc" +#define TAG_CHARBORDERPIECE 0x63504243UL // "CBPc" +#define TAG_AMIKAKEPIECE 0x63504b41UL // "AKPc" +#define TAG_TABPIECE 0x63506254UL // "TbPc" + +#endif diff --git a/lotuswordpro/source/filter/lwpoleobject.cxx b/lotuswordpro/source/filter/lwpoleobject.cxx new file mode 100644 index 000000000000..30e9c3fa978d --- /dev/null +++ b/lotuswordpro/source/filter/lwpoleobject.cxx @@ -0,0 +1,752 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - OLE object + */ +/************************************************************************* + * Change History + Feb 2005 Created + ************************************************************************/ +#include <stdio.h> +#include <tools/stream.hxx> +#include "lwpglobalmgr.hxx" +#include "lwpoleobject.hxx" +#include "lwpobjfactory.hxx" +#include "lwpidxmgr.hxx" +#include "lwp9reader.hxx" +#include "xfilter/xfoleobj.hxx" +#include "xfilter/xfparagraph.hxx" +#include "lwpframelayout.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "bento.hxx" + +/** + * @descr: construction function + * @param: objHdr - object header, read before entering this function + * @param: pStrm - file stream + * @return: None + * @date: 2/22/2005 + */ +LwpGraphicOleObject::LwpGraphicOleObject(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpContent(objHdr, pStrm) +{} +/** + * @descr: Read GraphicOleObject part + * @param: None + * @return: None + * @date: 2/22/2005 + */ +void LwpGraphicOleObject::Read() +{ + LwpContent::Read(); + + if (LwpFileHeader::m_nFileRevision >= 0x000b) + { + // I'm not sure about the read method + m_pNextObj.ReadIndexed(m_pObjStrm); + m_pPrevObj.ReadIndexed(m_pObjStrm); + } + m_pObjStrm->SkipExtra(); + +} + +void LwpGraphicOleObject::GetGrafOrgSize(double & rWidth, double & rHeight) +{ + rWidth = 0; + rHeight = 0; +} + +void LwpGraphicOleObject::GetGrafScaledSize(double & fWidth, double & fHeight) +{ + GetGrafOrgSize(fWidth, fHeight); + // scaled image size + double fSclGrafWidth = fWidth;//LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleWidth()); + double fSclGrafHeight = fHeight;//LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleHeight()); + + + LwpVirtualLayout* pLayout = GetLayout(NULL); + if (pLayout && pLayout->IsFrame()) + { + LwpFrameLayout* pMyFrameLayout = static_cast<LwpFrameLayout*>(pLayout); + LwpLayoutScale* pMyScale = pMyFrameLayout->GetLayoutScale(); + LwpLayoutGeometry* pFrameGeo = pMyFrameLayout->GetGeometry(); + + // original image size + //double fOrgGrafWidth = (double)m_Cache.Width/TWIPS_PER_CM; + //double fOrgGrafHeight = (double)m_Cache.Height/TWIPS_PER_CM; + + // get margin values + double fLeftMargin = pMyFrameLayout->GetMarginsValue(MARGIN_LEFT); + double fRightMargin = pMyFrameLayout->GetMarginsValue(MARGIN_RIGHT); + double fTopMargin = pMyFrameLayout->GetMarginsValue(MARGIN_TOP); + double fBottomMargin = pMyFrameLayout->GetMarginsValue(MARGIN_BOTTOM); + + if (pMyScale && pFrameGeo) + { + // frame size + double fFrameWidth = LwpTools::ConvertFromUnitsToMetric(pFrameGeo->GetWidth()); + double fFrameHeight = LwpTools::ConvertFromUnitsToMetric(pFrameGeo->GetHeight()); + + // calculate the displayed size of the frame + double fDisFrameWidth = fFrameWidth - (fLeftMargin+fRightMargin); + double fDisFrameHeight = fFrameHeight - (fTopMargin+fBottomMargin); + + // get scale mode + sal_uInt16 nScalemode = pMyScale->GetScaleMode(); + if (nScalemode & LwpLayoutScale::CUSTOM) + { + fSclGrafWidth = LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleWidth()); + fSclGrafHeight = LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleHeight()); + } + else if (nScalemode & LwpLayoutScale::PERCENTAGE) + { + double fScalePercentage = (double)pMyScale->GetScalePercentage() / 1000; + fSclGrafWidth = fScalePercentage * fWidth; + fSclGrafHeight = fScalePercentage * fHeight; + } + else if (nScalemode & LwpLayoutScale::FIT_IN_FRAME) + { + if (pMyFrameLayout->IsFitGraphic()) + { + fSclGrafWidth = fWidth; + fSclGrafHeight = fHeight; + } + else if (nScalemode & LwpLayoutScale::MAINTAIN_ASPECT_RATIO) + { + if (fWidth/fHeight >= fDisFrameWidth/fDisFrameHeight) + { + fSclGrafWidth = fDisFrameWidth; + fSclGrafHeight = (fDisFrameWidth/fWidth) * fHeight; + } + else + { + fSclGrafHeight = fDisFrameHeight; + fSclGrafWidth = (fDisFrameHeight/fHeight) * fWidth; + } + } + else + { + fSclGrafWidth = fDisFrameWidth; + fSclGrafHeight = fDisFrameHeight; + } + } + } + } + fWidth = fSclGrafWidth ; + fHeight = fSclGrafHeight ; + +} + +/** + * @descr: construction function + * @param: objHdr - object header, read before entering this function + * @param: pStrm - file stream + * @return: None + * @date: 2/22/2005 + */ +LwpOleObject::LwpOleObject(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpGraphicOleObject(objHdr, pStrm),m_SizeRect(0,0,5,5) +{ +} +/** + * @descr: Read VO_OLEOBJECT record + * @param: None + * @return: None + * @date: 2/22/2005 + */ +void LwpOleObject::Read() +{ + LwpGraphicOleObject::Read(); + + cPersistentFlags = m_pObjStrm->QuickReaduInt16(); + + sal_uInt16 nNonVersionedPersistentFlags = 0; + sal_uInt32 nFormat = 0; + sal_uInt16 nNumberOfPages = 0; + // qCMarker read + LwpObjectID ID; + + if (LwpFileHeader::m_nFileRevision >= 0x0004) + { + nNonVersionedPersistentFlags = m_pObjStrm->QuickReaduInt16(); + + OUString sFormat = m_pObjStrm->QuickReadStringPtr(); + + if (LwpFileHeader::m_nFileRevision < 0x000B) + { + // null pointers have a VO_INVALID type + //if (VO_INVALID == m_pObjStrm->QuickReaduInt16()) + // return; + + ID.Read(m_pObjStrm); + //return m_pObjStrm->Locate(ID); + } + else + { + ID.ReadIndexed(m_pObjStrm); + //if (ID.IsNull()) + // return; + + //return m_pObjStrm->Locate(ID); + } + } + + if (m_pObjStrm->CheckExtra()) + { + nNumberOfPages = m_pObjStrm->QuickReaduInt16(); + m_pObjStrm->SkipExtra(); + } + +} +/** + * @descr: Construct ole-storage name by ObjectID + * @param: pObjName - input&output string of object name, spaces allocated outside and at least length should be MAX_STREAMORSTORAGENAME + * @return: None + * @date: 2/22/2005 + */ +void LwpOleObject::GetChildStorageName(char *pObjName) +{ + /*LwpObjectFactory * pObjMgr = LwpObjectFactory::Instance(); + LwpIndexManager * pIdxMgr = pObjMgr->GetIndexManager(); + sal_uInt32 nLowID = pIdxMgr->GetObjTime(static_cast<sal_uInt16>(GetObjectID()->GetLow()));*/ + + char sName[MAX_STREAMORSTORAGENAME]; + //LwpObjectID ID(nLowID, GetObjectID()->GetHigh()); + sprintf( sName, "%s%lX,%lX", "Ole", + GetObjectID()->GetHigh(), GetObjectID()->GetLow()); + + strcpy( pObjName, sName); + return; +} +/** + * @descr: Parse VO_OLEOBJECT and dump to XML stream only on WIN32 platform + * @param: pOutputStream - stream to dump OLE object + * @param: pFrameLayout - framlayout object used to dump OLE object + * @return: None + * @date: 2/22/2005 + */ +void LwpOleObject::Parse(IXFStream* pOutputStream) +{ +#if 0 +#ifdef WIN32 + + // + // Construct OLE object storage name + // + char sObjectName[MAX_STREAMORSTORAGENAME]; + GetChildStorageName(sObjectName); + String aObjName= String::CreateFromAscii(sObjectName); + + // + // Get OLE objects information + // + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + LwpObjectFactory* pObjMgr = pGlobal->GetLwpObjFactory(); + SvStorageRef objStor; + SvStorageInfoList * pInfoList; + pObjMgr->GetOleObjInfo(objStor, &pInfoList); + + if(pInfoList == NULL) + { + assert(sal_False); + return; + } + + // + // Get ole object buffer + // + BYTE * pBuf = NULL; + sal_uInt32 nSize = 0; + for (sal_uInt32 j=0; j<pInfoList->Count(); j++) + { + + SvStorageInfo& rInfo = pInfoList->GetObject(j); + String aName = rInfo.GetName(); + + if(aName == aObjName) + { + SvStorageRef childStor; + childStor = objStor->OpenStorage(rInfo.GetName()); + SvStorage * aEleStor; + aEleStor = objStor->OpenOLEStorage( rInfo.GetName() ); + SvInPlaceObjectRef xInplaceObj( ((SvFactory*)SvInPlaceObject::ClassFactory())->CreateAndLoad( childStor ) ); + SvOutPlaceObjectRef xOutplaceObj(xInplaceObj); + aEleStor->SetVersion( SOFFICE_FILEFORMAT_60 ); + SvStream *pStream=xOutplaceObj->GetOLEObjectStream(aEleStor); + + //Get Ole original size + m_SizeRect = xOutplaceObj->GetVisSize(xOutplaceObj->GetViewAspect()); + + nSize = pStream->Seek( STREAM_SEEK_TO_END ); + pBuf = new BYTE[nSize]; + if (pBuf == NULL) + { + assert(sal_False); + return; + } + pStream->Seek(0); + pStream->Read(pBuf, nSize); + + delete pStream; + break; + } + } + + // + // dump the buffer by XFilter + // + if(pBuf != NULL) + { + // set ole buffer + XFOleObject *pOleObj = new XFOleObject(); + pOleObj->SetOleData(pBuf, nSize); + + // set frame attributes + pOleObj->SetAnchorType(enumXFAnchorPara); + double fWidth = 0; + double fHeight = 0; + GetGrafScaledSize( fWidth, fHeight); + if(fWidth < 0.001 || fHeight < 0.001) + { + fWidth = 5.0; + fHeight = 5.0; + } + pOleObj->SetWidth(fWidth); + pOleObj->SetHeight(fHeight); + /* + pOleObj->SetName(A2OUSTR("TestOle")); + pOleObj->SetX(5); + pOleObj->SetY(5); + pOleObj->SetWidth(5); + pOleObj->SetHeight(5); + */ + + // To XML + XFParagraph *pPara = new XFParagraph(); + pPara->Add(pOleObj); + pPara->ToXml(pOutputStream); + + delete pPara; // pOleObj will be deleted inside + +#if 0 + // dump to file + String aTempDir( SvtPathOptions().GetTempPath() ); + sal_Int32 nLength = aTempDir.Len(); + if ( aTempDir.GetChar(nLength-1 ) !=UChar32( '/' ) ) + aTempDir += String::CreateFromAscii("/"); + + aTempDir += aObjName; + SvFileStream aStream(aTempDir, STREAM_WRITE); + aStream.Write(pBuf, nSize); + aStream.Close(); +#endif + delete []pBuf; + + // dump attributes to + } + + return; +#endif +#endif +} + +void LwpOleObject::XFConvert(XFContentContainer * pCont) +{ +#if 0 + //Add by 10/24/2005 + //Get ole object stream with the object name; + + // modified by + // if small file, use the compressed stream for BENTO + LwpSvStream* pStream = m_pStrm->GetCompressedStream() ? m_pStrm->GetCompressedStream(): m_pStrm; + // end modified by + + OpenStormBento::LtcBenContainer* pBentoContainer; + ULONG ulRet = OpenStormBento::BenOpenContainer(pStream, &pBentoContainer); + + char sObjectName[MAX_STREAMORSTORAGENAME]; + GetChildStorageName(sObjectName); + std::string aObjName(sObjectName); + SotStorageStreamRef xOleObjStm = pBentoContainer->ConvertAswStorageToOLE2Stream(aObjName.c_str()); + + //Get stream size and data + if(!xOleObjStm.Is() || xOleObjStm->GetError()) + return; + + + BYTE * pBuf = NULL; + sal_uInt32 nSize = 0; + + SvStorageRef xOleObjStor = new SvStorage( *xOleObjStm ); + //SvStorageRef xOleObjStor = pBentoContainer->CreateOLEStorageWithObjectName(aObjName.c_str()); + if( !xOleObjStor.Is()) + return ; + + SvInPlaceObjectRef xInplaceObj( ((SvFactory*)SvInPlaceObject::ClassFactory())->CreateAndLoad( xOleObjStor ) ); + + + //when the OLE object is converted into native object. +// SvOutPlaceObjectRef xOutplaceObj(xInplaceObj); +// xOutplaceObj->SetVersion( SOFFICE_FILEFORMAT_60 ); +// SvStream *pOleStream=xOutplaceObj->GetOLEObjectStream(xOleObjStor); + //Get Ole original size + m_SizeRect = GetOLEObjectSize(xOleObjStor); + //End by + + nSize = xOleObjStm->Seek( STREAM_SEEK_TO_END ); + pBuf = new BYTE[nSize]; + if (pBuf == NULL) + { + assert(sal_False); + return; + } + xOleObjStm->Seek(0); + xOleObjStm->Read(pBuf, nSize); + + //delete pOleStream; + + + //End by + + // + // dump the buffer by XFilter + // + if(pBuf != NULL) + { + // set ole buffer + XFOleObject *pOleObj = new XFOleObject(); + pOleObj->SetOleData(pBuf, nSize); + + // set frame attributes + pOleObj->SetAnchorType(enumXFAnchorFrame); + pOleObj->SetStyleName( m_strStyleName); + LwpFrameLayout* pMyFrameLayout = static_cast<LwpFrameLayout*>(GetLayout(NULL)); + if(pMyFrameLayout) + { + pOleObj->SetX(pMyFrameLayout->GetMarginsValue(MARGIN_LEFT)); + pOleObj->SetY(pMyFrameLayout->GetMarginsValue(MARGIN_TOP)); + } + + double fWidth = 0; + double fHeight = 0; + GetGrafScaledSize( fWidth, fHeight); + if(fWidth < 0.001 || fHeight < 0.001) + { + fWidth = 5.0; + fHeight = 5.0; + } + + + pOleObj->SetWidth(fWidth); + pOleObj->SetHeight(fHeight); + + + //delete pPara; // pOleObj will be deleted inside + pCont->Add(pOleObj); + +#if 0 + // dump to file + String aTempDir( SvtPathOptions().GetTempPath() ); + sal_Int32 nLength = aTempDir.Len(); + if ( aTempDir.GetChar(nLength-1 ) !=UChar32( '/' ) ) + aTempDir += String::CreateFromAscii("/"); + + aTempDir += aObjName; + SvFileStream aStream(aTempDir, STREAM_WRITE); + aStream.Write(pBuf, nSize); + aStream.Close(); +#endif + delete []pBuf; + + // dump attributes to + } +#endif + return; +} + +void LwpOleObject::GetGrafOrgSize(double & rWidth, double & rHeight) +{ + rWidth = (double)m_SizeRect.GetWidth()/1000;//cm unit + rHeight = (double)m_SizeRect.GetHeight()/1000;//cm unit +} + +void LwpOleObject::RegisterStyle() +{ +#if 0 +#ifdef WIN32 + LwpVirtualLayout* pMyLayout = GetLayout(NULL); + if(pMyLayout->IsFrame()) + { + XFFrameStyle* pXFFrameStyle = new XFFrameStyle(); + pXFFrameStyle->SetXPosType(enumXFFrameXPosFromLeft, enumXFFrameXRelFrame); + pXFFrameStyle->SetYPosType(enumXFFrameYPosFromTop, enumXFFrameYRelPara); + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_strStyleName = pXFStyleManager->AddStyle(pXFFrameStyle)->GetStyleName(); + } +#endif +#endif +} + + +#include <sot/exchange.hxx> +#include <sot/storinfo.hxx> +#include <svtools/wmf.hxx> +/** +* @descr: For SODC_2667, To get the OLE object size by reading OLE object picture information. +*/ +Rectangle LwpOleObject::GetOLEObjectSize( SotStorage * pStor ) const +{ + Rectangle aSize(0,0,0,0); + String aStreamName; + if( pStor->IsContained( String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "\002OlePres000" ) ) ) ) + aStreamName = String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "\002OlePres000" ) ); + else if( pStor->IsContained( String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "\1Ole10Native" ) ) ) ) + aStreamName = String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "\1Ole10Native" ) ); + + if( aStreamName.Len() == 0 ) + return aSize; + + + for( USHORT i = 1; i < 10; i++ ) + { + SotStorageStreamRef xStm = pStor->OpenSotStream( aStreamName, + STREAM_READ | STREAM_NOCREATE ); + if( xStm->GetError() ) + break; + + xStm->SetBufferSize( 8192 ); + LwpOlePres * pEle = new LwpOlePres( 0 ); + if( pEle->Read( *xStm ) && !xStm->GetError() ) + { + if( pEle->GetFormat() == FORMAT_GDIMETAFILE || pEle->GetFormat() == FORMAT_BITMAP ) + { + aSize = Rectangle( Point(), pEle->GetSize()); + delete pEle; + break; + } + } + delete pEle; + pEle = NULL; + aStreamName = String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "\002OlePres00" ) ); + aStreamName += String( i ); + }; + + return aSize; +} +/** +* @descr: Read OLE object picture information +*/ +BOOL LwpOlePres::Read( SvStream & rStm ) +{ +#if 0 + ULONG nBeginPos = rStm.Tell(); + INT32 n; + rStm >> n; + if( n != -1 ) + { + pBmp = new Bitmap; + rStm >> *pBmp; + if( rStm.GetError() == SVSTREAM_OK ) + { + nFormat = FORMAT_BITMAP; + aSize = pBmp->GetPrefSize(); + MapMode aMMSrc; + if( !aSize.Width() || !aSize.Height() ) + { + // letzte Chance + aSize = pBmp->GetSizePixel(); + aMMSrc = MAP_PIXEL; + } + else + aMMSrc = pBmp->GetPrefMapMode(); + MapMode aMMDst( MAP_100TH_MM ); + aSize = OutputDevice::LogicToLogic( aSize, aMMSrc, aMMDst ); + return TRUE; + } + else + { + delete pBmp; + pBmp = NULL; + + pMtf = new GDIMetaFile(); + rStm.ResetError(); + rStm >> *pMtf; + if( rStm.GetError() == SVSTREAM_OK ) + { + nFormat = FORMAT_GDIMETAFILE; + aSize = pMtf->GetPrefSize(); + MapMode aMMSrc = pMtf->GetPrefMapMode(); + MapMode aMMDst( MAP_100TH_MM ); + aSize = OutputDevice::LogicToLogic( aSize, aMMSrc, aMMDst ); + return TRUE; + } + else + { + delete pMtf; + pMtf = NULL; + } + } + + } + + rStm.ResetError(); + rStm.Seek( nBeginPos ); + nFormat = ReadClipboardFormat( rStm ); + // JobSetup, bzw. TargetDevice ueberlesen + // Information aufnehmen, um sie beim Schreiben nicht zu verlieren + nJobLen = 0; + rStm >> nJobLen; + if( nJobLen >= 4 ) + { + nJobLen -= 4; + if( nJobLen ) + { + pJob = new BYTE[ nJobLen ]; + rStm.Read( pJob, nJobLen ); + } + } + else + { + rStm.SetError( SVSTREAM_GENERALERROR ); + return FALSE; + } + UINT32 nAsp; + rStm >> nAsp; + USHORT nSvAsp = USHORT( nAsp ); + SetAspect( nSvAsp ); + rStm.SeekRel( 4 ); //L-Index ueberlesen + rStm >> nAdvFlags; + rStm.SeekRel( 4 ); //Compression + UINT32 nWidth = 0; + UINT32 nHeight = 0; + UINT32 nSize = 0; + rStm >> nWidth >> nHeight >> nSize; + aSize.Width() = nWidth; + aSize.Height() = nHeight; + + if( nFormat == FORMAT_GDIMETAFILE ) + { + pMtf = new GDIMetaFile(); + ReadWindowMetafile( rStm, *pMtf ); + } + else if( nFormat == FORMAT_BITMAP ) + { + pBmp = new Bitmap(); + rStm >> *pBmp; + } + else + { + void * p = new BYTE[ nSize ]; + rStm.Read( p, nSize ); + delete p; + return FALSE; + } +#endif + return TRUE; +} + +/** +* @descr: Write OLE object picture information. +*/ +void LwpOlePres::Write( SvStream & rStm ) +{ + WriteClipboardFormat( rStm, FORMAT_GDIMETAFILE ); + rStm << (INT32)(nJobLen +4); // immer leeres TargetDevice + if( nJobLen ) + rStm.Write( pJob, nJobLen ); + rStm << (UINT32)nAspect; + rStm << (INT32)-1; //L-Index immer -1 + rStm << (INT32)nAdvFlags; + rStm << (INT32)0; //Compression + rStm << (INT32)aSize.Width(); + rStm << (INT32)aSize.Height(); + ULONG nPos = rStm.Tell(); + rStm << (INT32)0; + + if( GetFormat() == FORMAT_GDIMETAFILE && pMtf ) + { + // Immer auf 1/100 mm, bis Mtf-Loesung gefunden + // Annahme (keine Skalierung, keine Org-Verschiebung) + DBG_ASSERT( pMtf->GetPrefMapMode().GetScaleX() == Fraction( 1, 1 ), + "X-Skalierung im Mtf" ); + DBG_ASSERT( pMtf->GetPrefMapMode().GetScaleY() == Fraction( 1, 1 ), + "Y-Skalierung im Mtf" ); + DBG_ASSERT( pMtf->GetPrefMapMode().GetOrigin() == Point(), + "Origin-Verschiebung im Mtf" ); + MapUnit nMU = pMtf->GetPrefMapMode().GetMapUnit(); + if( MAP_100TH_MM != nMU ) + { + Size aPrefS( pMtf->GetPrefSize() ); + Size aS( aPrefS ); + aS = OutputDevice::LogicToLogic( aS, nMU, MAP_100TH_MM ); + + pMtf->Scale( Fraction( aS.Width(), aPrefS.Width() ), + Fraction( aS.Height(), aPrefS.Height() ) ); + pMtf->SetPrefMapMode( MAP_100TH_MM ); + pMtf->SetPrefSize( aS ); + } + WriteWindowMetafileBits( rStm, *pMtf ); + } + else + { + DBG_ERROR( "unknown format" ); + } + ULONG nEndPos = rStm.Tell(); + rStm.Seek( nPos ); + rStm << (UINT32)(nEndPos - nPos - 4); + rStm.Seek( nEndPos ); +} +//End by diff --git a/lotuswordpro/source/filter/lwpoleobject.hxx b/lotuswordpro/source/filter/lwpoleobject.hxx new file mode 100644 index 000000000000..b0817d409a67 --- /dev/null +++ b/lotuswordpro/source/filter/lwpoleobject.hxx @@ -0,0 +1,194 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - OLE object + */ +/************************************************************************* + * Change History + Feb 2005 Created + ************************************************************************/ +#ifndef _LWPOLEOBJECT_HXX_ +#define _LWPOLEOBJECT_HXX_ + +#include "lwpobj.hxx" +#include "lwpobjhdr.hxx" +#include "lwpobjid.hxx" +#include "lwpstory.hxx" +#include "tools/gen.hxx" +/* +#include <so3/svstor.hxx> +#include <so3/outplace.hxx> +#include <so3/ipobj.hxx> +#include <so3/factory.hxx> +*/ +#include <svx/svdoole2.hxx> +#include <svx/svdpage.hxx> +#include <sfx2/objsh.hxx> +#include <sot/storinfo.hxx> + + +typedef struct tagAFID_CACHE +{ + unsigned long LinkedFileSize; /* 0 if not linked */ + unsigned long LinkedFileTime; /* 0 if not linked */ + long Width; /* -1 if not present */ + long Height; /* -1 if not present */ +} AFID_CACHE, * PAFID_CACHE; + +/* Maximum string sizes - includes space for null terminator */ +#define AFID_MAX_FILE_FORMAT_SIZE 80 +#define AFID_MAX_CONTEXT_FORMAT_SIZE 80 + +// OLE defined maximum +#define MAX_STREAMORSTORAGENAME 32 +/** + * @descr + * super class of LwpOleObject and LwpGraphicObject + */ +class LwpGraphicOleObject : public LwpContent +{ +public: + LwpGraphicOleObject(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + virtual void Read(); + virtual void GetGrafScaledSize(double& fWidth, double& fHeight); + virtual void GetGrafOrgSize(double& rWidth, double& rHeight); +protected: + LwpObjectID m_pPrevObj; + LwpObjectID m_pNextObj; + + rtl::OUString m_strStyleName; +}; + +class LwpFrameLayout; +/** + * @descr + * class to read and parse VO_OLEOBJECT object + */ +class LwpOleObject : public LwpGraphicOleObject +{ +public: + LwpOleObject(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + ~LwpOleObject(){}; + virtual void Read(); + virtual void Parse(IXFStream* pOutputStream); + virtual void XFConvert(XFContentContainer * pCont); + virtual void RegisterStyle(); + void GetGrafOrgSize(double& rWidth, double& rHeight) ; +private: + void GetChildStorageName(char *pObjName); + Rectangle GetOLEObjectSize( SotStorage * pStor ) const; + + sal_uInt16 cPersistentFlags; + + Rectangle m_SizeRect; +}; + +/** +* Added by for SODC_2667,03/20/2006 +* Read the OLE Object stream and get the info of the OLE picture +*/ +#include <tools/stream.hxx> +#include <vcl/gdimtf.hxx> +#include <vcl/bitmap.hxx> +#include <vcl/outdev.hxx> +class LwpOlePres +{ + ULONG nFormat; + USHORT nAspect; + Bitmap * pBmp; + GDIMetaFile * pMtf; + + UINT32 nAdvFlags; + INT32 nJobLen; + void * pJob; + Size aSize; // Groesse in 100TH_MM +public: + LwpOlePres( ULONG nF ) + : nFormat( nF ) + , nAdvFlags( 0x2 ) // in Dokument gefunden + , nJobLen( 0 ) + , pJob( NULL ) + , pBmp( NULL ) + , pMtf( NULL ) + {} + ~LwpOlePres() + { + delete pJob; + delete pBmp; + delete pMtf; + } + void SetMtf( const GDIMetaFile & rMtf ) + { + if( pMtf ) + delete pMtf; + pMtf = new GDIMetaFile( rMtf ); + } + Bitmap *GetBitmap() const { return pBmp; } + GDIMetaFile *GetMetaFile() const { return pMtf; } + ULONG GetFormat() const { return nFormat; } + void SetAspect( USHORT nAsp ) { nAspect = nAsp; } + ULONG GetAdviseFlags() const { return nAdvFlags; } + void SetAdviseFlags( ULONG nAdv ) { nAdvFlags = nAdv; } + void SetSize( const Size & rSize ) { aSize = rSize; } + Size GetSize() const { return aSize; } //Add by , 10/26/2005 + /// return FALSE => unknown format + BOOL Read( SvStream & rStm ); + void Write( SvStream & rStm ); +}; +//End by + + +#endif diff --git a/lotuswordpro/source/filter/lwpoverride.cxx b/lotuswordpro/source/filter/lwpoverride.cxx new file mode 100644 index 000000000000..20da33574f24 --- /dev/null +++ b/lotuswordpro/source/filter/lwpoverride.cxx @@ -0,0 +1,555 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpoverride.hxx" +#include "lwpfilehdr.hxx" +#include "lwpatomholder.hxx" +#include "lwpborderstuff.hxx" +#include "lwpmargins.hxx" +#include "lwpbackgroundstuff.hxx" + +/*class LwpOverride*/ +void LwpOverride::ReadCommon(LwpObjectStream* pStrm) +{ + pStrm->QuickRead(&m_nValues, 2); + pStrm->QuickRead(&m_nOverride, 2); + pStrm->QuickRead(&m_nApply, 2); + pStrm->SkipExtra(); +} + +void LwpOverride::Clear() +{ + m_nValues = 0; + m_nOverride = 0; + m_nApply = 0; +} + +void LwpOverride::operator=(const LwpOverride& rOther) +{ + m_nValues = rOther.m_nValues; + m_nOverride = rOther.m_nOverride; + m_nApply = rOther.m_nApply; +} + +void LwpOverride::Override(sal_uInt16 nBits, STATE eState) +{ + if (eState == STATE_STYLE) + { + m_nValues &= ~nBits; + m_nOverride &= ~nBits; + } + else + { + m_nOverride |= nBits; + if (eState == STATE_ON) + { + m_nValues |= nBits; + } + else /* State == STATE_OFF */ + { + m_nValues &= ~nBits; + } + } + m_nApply |= nBits; +} + +/*class LwpTextLanguageOverride*/ +void LwpTextLanguageOverride::Read(LwpObjectStream* pStrm) +{ + if (pStrm->QuickReadBool()) + { + ReadCommon(pStrm); + pStrm->QuickRead(&m_nLanguage, 2); + } + + pStrm->SkipExtra(); + +} + +/*class LwpTextAttributeOverride*/ +void LwpTextAttributeOverride::Read(LwpObjectStream* pStrm) +{ + if (pStrm->QuickReadBool()) + { + ReadCommon(pStrm); + pStrm->QuickRead(&m_nHideLevels, 2); + + if (LwpFileHeader::m_nFileRevision > 0x000A) + { + pStrm->QuickRead(&m_nBaseLineOffset, 4); + } + } + + pStrm->SkipExtra(); +} + +sal_Bool LwpTextAttributeOverride::IsHighLight() +{ + return (m_nValues & TAO_HIGHLIGHT); +} + +/*class LwpKinsokuOptsOverride*/ +void LwpKinsokuOptsOverride::Read(LwpObjectStream* pStrm) +{ + if (pStrm->QuickReadBool()) + { + ReadCommon(pStrm); + pStrm->QuickRead(&m_nLevels, 2); + } + + pStrm->SkipExtra(); +} + +/*class LwpBulletOverride*/ +void LwpBulletOverride::Read(LwpObjectStream * pStrm) +{ + if (pStrm->QuickReadBool()) + { + m_bIsNull= sal_False; + ReadCommon(pStrm); + m_SilverBullet.ReadIndexed(pStrm); + } + else + m_bIsNull = sal_True; + + pStrm->SkipExtra(); +} +void LwpBulletOverride::OverrideSkip(sal_Bool bOver) +{ + if (bOver) + { + LwpOverride::Override(BO_SKIP, STATE_ON); + } + else + { + LwpOverride::Override(BO_SKIP, STATE_OFF); + } +} + +void LwpBulletOverride::OverrideRightAligned(sal_Bool bOver) +{ + if(bOver) + { + LwpOverride::Override(BO_RIGHTALIGN,STATE_ON); + } + else + { + LwpOverride::Override(BO_RIGHTALIGN,STATE_OFF); + } +} + +void LwpBulletOverride::operator=(const LwpOverride& rOther) +{ + LwpOverride::operator=(rOther); + const LwpBulletOverride* pBullet = static_cast<LwpBulletOverride*>((LwpOverride*)&rOther); + + m_SilverBullet = pBullet->m_SilverBullet; + +} + +void LwpBulletOverride::OverrideSilverBullet(LwpObjectID aID) +{ + if (!aID.IsNull()) + { + m_SilverBullet = aID; + } + + LwpOverride::Override(BO_SILVERBULLET,STATE_ON); +} + +void LwpBulletOverride::Override(LwpBulletOverride* pOther) +{ + if (m_nApply & BO_SILVERBULLET) + { + if (IsSilverBulletOverridden()) + { + pOther->OverrideSilverBullet(m_SilverBullet); + } + else + { + pOther->RevertSilverBullet(); + } + } + + if (m_nApply & BO_SKIP) + { + if (IsSkipOverridden()) + { + pOther->OverrideSkip(IsSkip()); + } + else + { + pOther->RevertSkip(); + } + } + + if (m_nApply & BO_RIGHTALIGN) + { + if (IsRightAlignedOverridden()) + { + pOther->OverrideRightAligned(IsRightAligned()); + } + else + { + pOther->RevertRightAligned(); + } + } + +} + +/*class LwpAlignmentOverride*/ +void LwpAlignmentOverride::Read(LwpObjectStream * pStrm) +{ + if (pStrm->QuickReadBool()) + { + ReadCommon(pStrm); + pStrm->QuickRead(&m_nAlignType, 1); + pStrm->QuickRead(&m_nPosition, 4); + pStrm->QuickRead(&m_nAlignChar, 2); + } + + pStrm->SkipExtra(); +} + +/*class LwpSpacingCommonOverride*/ +void LwpSpacingCommonOverride::Read(LwpObjectStream* pStrm) +{ + if (pStrm->QuickReadBool()) + { + ReadCommon(pStrm); + pStrm->QuickRead(&m_nSpacingType, 2); + pStrm->QuickRead(&m_nAmount, 4); + pStrm->QuickRead(&m_nMultiple, 4); + } + + pStrm->SkipExtra(); +} + +/*class LwpSpacingOverride*/ +LwpSpacingOverride::LwpSpacingOverride() : +m_pSpacing(new LwpSpacingCommonOverride), +m_pAboveLineSpacing(new LwpSpacingCommonOverride), +m_pParaSpacingAbove(new LwpSpacingCommonOverride), +m_pParaSpacingBelow(new LwpSpacingCommonOverride) +{ +} + +LwpSpacingOverride& LwpSpacingOverride::operator=(LwpSpacingOverride& other) +{ + LwpOverride::operator=(other); + *m_pSpacing = *other.m_pSpacing; + *m_pAboveLineSpacing = *other.m_pAboveLineSpacing; + *m_pParaSpacingAbove = *other.m_pParaSpacingAbove; + *m_pParaSpacingAbove = *other.m_pParaSpacingAbove; + return *this; +} + +LwpSpacingOverride::~LwpSpacingOverride() +{ + if (m_pSpacing) + { + delete m_pSpacing; + } + if (m_pAboveLineSpacing) + { + delete m_pAboveLineSpacing; + } + if (m_pParaSpacingAbove) + { + delete m_pParaSpacingAbove; + } + if (m_pParaSpacingBelow) + { + delete m_pParaSpacingBelow; + } +} + +void LwpSpacingOverride::Read(LwpObjectStream* pStrm) +{ + if (pStrm->QuickReadBool()) + { + ReadCommon(pStrm); + m_pSpacing->Read(pStrm); + if (LwpFileHeader::m_nFileRevision >= 0x000d) + { + m_pAboveLineSpacing->Read(pStrm); + } + m_pParaSpacingAbove->Read(pStrm); + m_pParaSpacingBelow->Read(pStrm); + } + + pStrm->SkipExtra(); +} + +/*class LwpIndentOverride*/ +void LwpIndentOverride::Read(LwpObjectStream* pStrm) +{ + if (pStrm->QuickReadBool()) + { + ReadCommon(pStrm); + + pStrm->QuickRead(&m_nAll, 4); + pStrm->QuickRead(&m_nFirst, 4); + pStrm->QuickRead(&m_nRest, 4); + pStrm->QuickRead(&m_nRight, 4); + } + + pStrm->SkipExtra(); +} + + +/*class LwpAmikakeOverride*/ +LwpAmikakeOverride::LwpAmikakeOverride() : +m_pBackgroundStuff(new LwpBackgroundStuff), m_nType(AMIKAKE_NONE) +{ +} + +LwpAmikakeOverride::~LwpAmikakeOverride() +{ + if (m_pBackgroundStuff) + { + delete m_pBackgroundStuff; + } +} + +void LwpAmikakeOverride::Read(LwpObjectStream* pStrm) +{ + if (pStrm->QuickReadBool()) + { + ReadCommon(pStrm); + m_pBackgroundStuff->Read(pStrm); + } + else + { + Clear(); + } + + if (pStrm->CheckExtra()) + { + pStrm->QuickRead(&m_nType, 2); + pStrm->SkipExtra(); + } + else + { + m_nType = AMIKAKE_NONE; + } +} + +void LwpAlignmentOverride::Override(LwpAlignmentOverride* other)//add by 1-24 +{ + if (m_nOverride & AO_TYPE) + { + other->OverrideAlignment(m_nAlignType); + } +/* if (m_nOverride & AO_POSITION) + { + Other->OverridePosition(GetPosition()); + } + if (m_nOverride & AO_CHAR) + { + Other->OverrideAlignChar(GetAlignChar()); + } +*/ +} + +void LwpAlignmentOverride::OverrideAlignment(AlignType val)//add by 1-24 +{ + m_nAlignType = val; + m_nOverride |= AO_TYPE; +} + +LwpIndentOverride& LwpIndentOverride::operator=(LwpIndentOverride& other) +{ + LwpOverride::operator=(other); + m_nAll = other.m_nAll; + m_nFirst = other.m_nFirst; + m_nRest = other.m_nRest; + m_nRight = other.m_nRight; + return *this; +} + +void LwpIndentOverride::Override(LwpIndentOverride* other) +{ + if(m_nOverride & IO_ALL) + other->OverrideIndentAll(m_nAll); + if(m_nOverride & IO_FIRST) + other->OverrideIndentFirst(m_nFirst); + if(m_nOverride & IO_RIGHT) + other->OverrideIndentRight(m_nRight); + if(m_nOverride & IO_REST) + other->OverrideIndentRest(m_nRest); + if(m_nOverride & IO_USE_RELATIVE) + other->OverrideUseRelative(IsUseRelative()); + if (m_nOverride & IO_REL_FLAGS) + other->OverrideRelative(GetRelative()); +} + +sal_uInt16 LwpIndentOverride::GetRelative() +{ + if ((m_nOverride & IO_REL_FLAGS) == IO_REL_FIRST) + return RELATIVE_FIRST; + else if ((m_nOverride & IO_REL_FLAGS) == IO_REL_ALL) + return RELATIVE_ALL; + return RELATIVE_REST; +} + +sal_Bool LwpIndentOverride::IsUseRelative() +{ + return (m_nValues & IO_USE_RELATIVE) != 0; +} + +void LwpIndentOverride::OverrideIndentAll(sal_Int32 val) +{ + m_nAll = val; + m_nOverride |= IO_ALL; +} + +void LwpIndentOverride::OverrideIndentFirst(sal_Int32 val) +{ + m_nFirst = val; + m_nOverride |= IO_FIRST; +} + +void LwpIndentOverride::OverrideIndentRight(sal_Int32 val) +{ + m_nRight = val; + m_nOverride |= IO_RIGHT; +} + +void LwpIndentOverride::OverrideIndentRest(sal_Int32 val) +{ + m_nRest = val; +// m_nAll = val; +// m_nFirst = 0-val; + m_nOverride |= IO_REST; +} + +void LwpIndentOverride::OverrideUseRelative(sal_Bool use) +{ + if (use) + { + m_nOverride |= IO_USE_RELATIVE; + m_nValues |= IO_USE_RELATIVE; + } + else + { + m_nOverride &= ~IO_USE_RELATIVE; + m_nValues &= ~IO_USE_RELATIVE; + } +} + +void LwpIndentOverride::OverrideRelative(sal_uInt16 relative) +{ + sal_uInt16 Flag; + + if (relative == RELATIVE_FIRST) + Flag = IO_REL_FIRST; + else if (relative == RELATIVE_ALL) + Flag = IO_REL_ALL; + else + Flag = IO_REL_REST; + + m_nOverride &= ~IO_REL_FLAGS; + m_nOverride |= Flag; +} + +void LwpSpacingOverride::Override(LwpSpacingOverride* other) +{ +// if (IsAlwaysOverridden()) +// other->SetAlways(IsAlways());//To be done + if (other) + { + m_pSpacing->Override(other->GetSpacing()); + m_pAboveLineSpacing->Override(other->GetAboveLineSpacing()); + m_pParaSpacingAbove->Override(other->GetAboveSpacing()); + m_pParaSpacingBelow->Override(other->GetBelowSpacing()); + } +} + +void LwpSpacingCommonOverride::Override(LwpSpacingCommonOverride* other) +{ + if (m_nOverride & SPO_TYPE) + other->OverrideType(m_nSpacingType); + if (m_nOverride & SPO_AMOUNT) + other->OverrideAmount(m_nAmount); + if (m_nOverride & SPO_MULTIPLE) + other->OverrideMultiple(m_nMultiple); +} + +void LwpSpacingCommonOverride::OverrideType(SpacingType val) +{ + m_nSpacingType = val; + m_nOverride |= SPO_TYPE; +} + +void LwpSpacingCommonOverride::OverrideAmount(sal_Int32 val) +{ + m_nAmount = val; + m_nOverride |= SPO_AMOUNT; +} + +void LwpSpacingCommonOverride::OverrideMultiple(sal_Int32 val) +{ + m_nMultiple = val; + m_nOverride |= SPO_MULTIPLE; +} diff --git a/lotuswordpro/source/filter/lwpoverride.hxx b/lotuswordpro/source/filter/lwpoverride.hxx new file mode 100644 index 000000000000..5881c24e2d36 --- /dev/null +++ b/lotuswordpro/source/filter/lwpoverride.hxx @@ -0,0 +1,438 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPOVERRIDE_HXX +#define _LWPOVERRIDE_HXX + +#include "lwpobjid.hxx" +#include "lwptools.hxx" + +class LwpObjectStream; + +enum STATE +{ + STATE_OFF = 0, + STATE_ON = 1, + STATE_STYLE = 2 +}; + +class LwpOverride +{ +public: + LwpOverride() : m_nValues(0), m_nOverride(0), m_nApply(0) {}; + + virtual ~LwpOverride(){} + + virtual void Read(LwpObjectStream* pStrm) = 0; + + virtual void operator=(const LwpOverride& rOther); + + void ReadCommon(LwpObjectStream* pStrm); + + void Clear(); + + void Override(sal_uInt16 nBits, STATE eState); + +protected: + sal_uInt16 m_nValues; + sal_uInt16 m_nOverride; + sal_uInt16 m_nApply; +}; + +///////////////////////////////////////////////////////////////// +class LwpTextLanguageOverride : public LwpOverride +{ +public: + LwpTextLanguageOverride() : m_nLanguage(0) {}; + + void Read(LwpObjectStream* pStrm); + +private: + sal_uInt16 m_nLanguage; +}; + +///////////////////////////////////////////////////////////////// +class LwpTextAttributeOverride : public LwpOverride +{ +public: + LwpTextAttributeOverride() : m_nHideLevels(0), m_nBaseLineOffset(0) {}; + + void Read(LwpObjectStream* pStrm); + + inline sal_uInt16 GetHideLevels() const; + + sal_Bool IsHighLight(); + +private: + enum{ + TAO_HIGHLIGHT = 0x08, + }; + sal_uInt16 m_nHideLevels; + sal_uInt32 m_nBaseLineOffset; +}; + +inline sal_uInt16 LwpTextAttributeOverride::GetHideLevels() const +{ + return m_nHideLevels; +} +///////////////////////////////////////////////////////////////// +class LwpKinsokuOptsOverride : public LwpOverride +{ +public: + LwpKinsokuOptsOverride() : m_nLevels(0) {}; + + void Read(LwpObjectStream* pStrm); + +private: + sal_uInt16 m_nLevels; +}; + +///////////////////////////////////////////////////////////////// +class LwpBulletOverride : public LwpOverride +{ +public: + LwpBulletOverride() {m_bIsNull = sal_True;} + + void Read(LwpObjectStream* pStrm); + + inline LwpObjectID GetSilverBullet() const; + + void operator=(const LwpOverride& rOther); + + void Override(LwpBulletOverride* pOther); + + inline sal_Bool IsSilverBulletOverridden(); + inline sal_Bool IsSkipOverridden(); + inline sal_Bool IsRightAlignedOverridden(); + inline sal_Bool IsSkip(); + inline sal_Bool IsRightAligned(); + inline sal_Bool IsEditable(); + + + void OverrideSilverBullet(LwpObjectID aID); + void OverrideSkip(sal_Bool bOver); + void OverrideRightAligned(sal_Bool bOver); + + inline void RevertSilverBullet(); + inline void RevertSkip(); + inline void RevertRightAligned(); + + sal_Bool IsInValid(){return m_bIsNull;} +private: + enum + { + BO_SILVERBULLET = 0x01, + // 0x02 is free + BO_RIGHTALIGN = 0x04, + BO_EDITABLE = 0x08, + BO_SKIP = 0x10 + }; + + LwpObjectID m_SilverBullet; + sal_Bool m_bIsNull; +}; +inline LwpObjectID LwpBulletOverride::GetSilverBullet() const +{ + return m_SilverBullet; +} + +inline sal_Bool LwpBulletOverride::IsSilverBulletOverridden() +{ + return (sal_Bool)((m_nOverride & BO_SILVERBULLET) != 0); +} + +inline sal_Bool LwpBulletOverride::IsSkipOverridden() +{ + return (sal_Bool)((m_nOverride & BO_SKIP) != 0); +} + +inline sal_Bool LwpBulletOverride::IsRightAlignedOverridden() +{ + return (sal_Bool)((m_nOverride & BO_RIGHTALIGN) != 0); +} + +inline sal_Bool LwpBulletOverride::IsSkip() +{ + return (sal_Bool)((m_nValues & BO_SKIP) != 0); +} + +inline sal_Bool LwpBulletOverride::IsEditable() +{ + return (sal_Bool)((m_nValues & BO_EDITABLE) != 0); +} + +inline sal_Bool LwpBulletOverride::IsRightAligned() +{ + return (sal_Bool)((m_nValues & BO_RIGHTALIGN) != 0); +} + +inline void LwpBulletOverride::RevertSilverBullet() +{ + LwpOverride::Override(BO_SILVERBULLET, STATE_STYLE); +} + +inline void LwpBulletOverride::RevertSkip() +{ + LwpOverride::Override(BO_SKIP, STATE_STYLE); +} + +inline void LwpBulletOverride::RevertRightAligned() +{ + LwpOverride::Override(BO_RIGHTALIGN, STATE_STYLE); +} + +///////////////////////////////////////////////////////////////// +class LwpAlignmentOverride : public LwpOverride +{ +public: + LwpAlignmentOverride() : m_nAlignType(ALIGN_LEFT), m_nPosition(0), m_nAlignChar(0){}; + + void Read(LwpObjectStream* pStrm); + + enum AlignType + { + ALIGN_LEFT = 0, + ALIGN_RIGHT = 1, + ALIGN_CENTER = 2, + ALIGN_JUSTIFY = 3, + ALIGN_JUSTIFYALL = 4, + ALIGN_NUMERICLEFT = 5, + ALIGN_NUMERICRIGHT = 6, + ALIGN_SQUEEZE = 7 + }; + + AlignType GetAlignType(){ return m_nAlignType; } + void Override(LwpAlignmentOverride* other);//add by 1-24 + void OverrideAlignment(AlignType val);//add by 1-24 +private: + enum + { + AO_TYPE = 0x01, + AO_POSITION = 0x02, + AO_CHAR = 0x04 + }; + + AlignType m_nAlignType; + sal_uInt32 m_nPosition; + sal_uInt16 m_nAlignChar; +}; + +///////////////////////////////////////////////////////////////// +class LwpSpacingCommonOverride : public LwpOverride +{ +public: + LwpSpacingCommonOverride() : m_nSpacingType(SPACING_NONE), m_nAmount(0), m_nMultiple(65536){}; + + void Read(LwpObjectStream* pStrm); + + enum SpacingType + { + SPACING_DYNAMIC = 0, + SPACING_LEADING = 1, + SPACING_CUSTOM = 2, + SPACING_NONE = 3 + }; + + SpacingType GetType() const {return m_nSpacingType;}; + sal_Int32 GetAmount() const {return m_nAmount;}; + sal_Int32 GetMultiple() const {return m_nMultiple;}; + + void Override(LwpSpacingCommonOverride* other); + void OverrideType(SpacingType val); + void OverrideAmount(sal_Int32 val); + void OverrideMultiple(sal_Int32 val); + +protected: + enum + { + SPO_TYPE = 0x01, + SPO_AMOUNT = 0x02, + SPO_MULTIPLE= 0x04 + }; + SpacingType m_nSpacingType;//sal_uInt16 + sal_Int32 m_nAmount; + sal_Int32 m_nMultiple; + +}; + +///////////////////////////////////////////////////////////////// +class LwpSpacingOverride : public LwpOverride +{ +public: + LwpSpacingOverride(); + LwpSpacingOverride& operator=(LwpSpacingOverride& other); + virtual ~LwpSpacingOverride(); + + void Read(LwpObjectStream* pStrm); + + void Override(LwpSpacingOverride* other); + + LwpSpacingCommonOverride* GetSpacing(){return m_pSpacing;}; + LwpSpacingCommonOverride* GetAboveLineSpacing(){return m_pAboveLineSpacing;}; + LwpSpacingCommonOverride* GetAboveSpacing(){return m_pParaSpacingAbove;}; + LwpSpacingCommonOverride* GetBelowSpacing(){return m_pParaSpacingBelow;}; +private: + LwpSpacingCommonOverride* m_pSpacing; + LwpSpacingCommonOverride* m_pAboveLineSpacing; + LwpSpacingCommonOverride* m_pParaSpacingAbove; + LwpSpacingCommonOverride* m_pParaSpacingBelow; +}; + +///////////////////////////////////////////////////////////////// +class LwpIndentOverride : public LwpOverride +{ +public: + LwpIndentOverride() : m_nAll(0), m_nFirst(0), m_nRest(0), m_nRight(0) {}; + LwpIndentOverride& operator=(LwpIndentOverride& other); + void Read(LwpObjectStream* pStrm); + + enum + { + RELATIVE_FIRST, RELATIVE_REST, RELATIVE_ALL + }; + + inline double GetFirst() const; + inline double GetLeft() const; + inline double GetRight() const; + + sal_uInt16 GetRelative(); + sal_Bool IsUseRelative(); + void Override(LwpIndentOverride* other); + void OverrideIndentAll(sal_Int32 val); + void OverrideIndentFirst(sal_Int32 val); + void OverrideIndentRight(sal_Int32 val); + void OverrideIndentRest(sal_Int32 val); + void OverrideUseRelative(sal_Bool use); + void OverrideRelative(sal_uInt16 relative); + sal_Int32 GetMAll() const {return m_nAll;} + sal_Int32 GetMFirst() const {return m_nFirst;} + sal_Int32 GetMRest() const {return m_nRest;} + sal_Int32 GetMRight() const {return m_nRight;} + void SetMAll(sal_Int32 val){m_nAll=val;} + void SetMFirst(sal_Int32 val){m_nFirst=val;} + void SetMRest(sal_Int32 val){m_nRest=val;} + void SetMRight(sal_Int32 val){m_nRight=val;} +private: + enum + { + IO_ALL = 0x0001, + IO_FIRST = 0x0002, + IO_REST = 0x0004, + IO_RIGHT = 0x0008, + IO_HANGING = 0x0010, + IO_EQUAL = 0x0020, + IO_BODY = 0x0040, + IO_REL_ALL = 0x0080, + IO_REL_FIRST = 0x0100, + IO_REL_REST = 0x0200, + IO_REL_FLAGS = (IO_REL_ALL | IO_REL_FIRST | IO_REL_REST), +#ifdef JAPANESE_ENABLED // 96/4/8 ueda for indentation by char width + IO_USE_RELATIVE = 0x0400, + IO_CHARUNIT = 0x0800 +#else + IO_USE_RELATIVE = 0x0400 +#endif + }; + + sal_Int32 m_nAll; + sal_Int32 m_nFirst; + sal_Int32 m_nRest; + sal_Int32 m_nRight; +}; +inline double LwpIndentOverride::GetFirst() const +{ + return LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(m_nFirst-m_nRest)); +} +inline double LwpIndentOverride::GetLeft() const +{ + return LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(m_nAll+m_nRest)); +} +inline double LwpIndentOverride::GetRight() const +{ + return LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(m_nRight)); +} + +///////////////////////////////////////////////////////////////// +class LwpBackgroundStuff; +class LwpAmikakeOverride : public LwpOverride +{ +public: + LwpAmikakeOverride(); + + virtual ~LwpAmikakeOverride(); + + void Read(LwpObjectStream* pStrm); + enum + { + AMIKAKE_NONE = 0, + AMIKAKE_BACKGROUND = 1, + AMIKAKE_CHARACTER = 2 + }; + +private: + LwpBackgroundStuff* m_pBackgroundStuff; + sal_uInt16 m_nType; + +}; + +#endif diff --git a/lotuswordpro/source/filter/lwppagehint.cxx b/lotuswordpro/source/filter/lwppagehint.cxx new file mode 100644 index 000000000000..00005d071d66 --- /dev/null +++ b/lotuswordpro/source/filter/lwppagehint.cxx @@ -0,0 +1,117 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Feb 2005 Created + ************************************************************************/ + +#include "lwppagehint.hxx" + + +void LwpSLVListHead::Read(LwpObjectStream* pObjStrm) +{ + m_ListHead.ReadIndexed(pObjStrm); + pObjStrm->SkipExtra(); +} + +void LwpContentHintHead::Read(LwpObjectStream* pObjStrm) +{ + m_ListHead.Read(pObjStrm); + pObjStrm->SkipExtra(); +} + +void LwpFootnoteSeenHead::Read(LwpObjectStream* pObjStrm) +{ + m_ListHead.Read(pObjStrm); + pObjStrm->SkipExtra(); +} + +LwpPageHint::LwpPageHint(LwpObjectHeader &objHdr, LwpSvStream *pStrm) + :LwpDLVList(objHdr,pStrm) +{ +} + +void LwpPageHint::Read() +{ + LwpDLVList::Read(); + + m_PageLayout.ReadIndexed(m_pObjStrm); + //m_ContentHints.ReadIndexed(m_pObjStrm); + m_ContentHints.Read(m_pObjStrm); + m_pObjStrm->QuickRead(&m_nLastFootnoteSeen,sizeof(m_nLastFootnoteSeen)); + m_pObjStrm->QuickRead(&m_nLastFootnoteProcessed,sizeof(m_nLastFootnoteProcessed)); + m_pObjStrm->QuickRead(&m_nFlags,sizeof(m_nFlags)); + m_pObjStrm->QuickRead(&m_nPageNumber,sizeof(m_nPageNumber)); + m_pObjStrm->QuickRead(&m_nNumberStyle,sizeof(m_nNumberStyle)); + m_BeforeText.Read(m_pObjStrm); + m_AfterText.Read(m_pObjStrm); + m_pObjStrm->QuickRead(&m_nNumberFlags,sizeof(m_nNumberFlags)); + m_pObjStrm->QuickRead(&m_nRenderedPageNumber,sizeof(m_nRenderedPageNumber)); + m_CurrentSection.ReadIndexed(m_pObjStrm); + m_pObjStrm->QuickRead(&m_nCurrentSectionPage,sizeof(m_nCurrentSectionPage)); + //m_FootnoteSeen.ReadIndexed(m_pObjStrm); + m_FootnoteSeen.Read(m_pObjStrm); + m_pObjStrm->QuickRead(&m_nLayoutPageNumber,sizeof(m_nLayoutPageNumber)); + + m_pObjStrm->SkipExtra(); +} + +void LwpPageHint::Parse(IXFStream *pOutputStream) +{ +} diff --git a/lotuswordpro/source/filter/lwppagehint.hxx b/lotuswordpro/source/filter/lwppagehint.hxx new file mode 100644 index 000000000000..669ca6222cbb --- /dev/null +++ b/lotuswordpro/source/filter/lwppagehint.hxx @@ -0,0 +1,129 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Feb 2005 Created + ************************************************************************/ +#ifndef _LWPPAGEHINT_HXX +#define _LWPPAGEHINT_HXX + +#include "lwpobj.hxx" +#include "lwpobjid.hxx" +#include "lwpatomholder.hxx" +#include "lwpdlvlist.hxx" + +class LwpSLVListHead +{ +public: + LwpSLVListHead(){}; + void Read(LwpObjectStream* pObjStrm); +private: + LwpObjectID m_ListHead; +}; + +class LwpContentHintHead +{ +public: + LwpContentHintHead(){}; + void Read(LwpObjectStream* pObjStrm); +private: + LwpSLVListHead m_ListHead; +}; + +class LwpFootnoteSeenHead +{ +public: + LwpFootnoteSeenHead(){}; + void Read(LwpObjectStream* pObjStrm); +private: + LwpSLVListHead m_ListHead; +}; + +class LwpPageHint : public LwpDLVList +{ +public: + LwpPageHint(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpPageHint(){}; + void Read(); + void Parse(IXFStream* pOutputStream); + sal_uInt16 GetPageNumber(){return m_nPageNumber;} + LwpObjectID* GetCurrentSectionID(){return &m_CurrentSection;} + sal_uInt16 GetCurrentSectionPage(){return m_nCurrentSectionPage;} + LwpObjectID* GetPageLayoutID(){ return &m_PageLayout;} + sal_uInt16 GetLayoutPageNumber(){ return m_nLayoutPageNumber;} +private: + + LwpObjectID m_PageLayout; + LwpContentHintHead m_ContentHints; + sal_uInt16 m_nLastFootnoteSeen; + sal_uInt16 m_nLastFootnoteProcessed; + sal_uInt16 m_nFlags; + sal_uInt16 m_nPageNumber; + sal_uInt16 m_nNumberStyle; + LwpAtomHolder m_BeforeText; + LwpAtomHolder m_AfterText; + sal_uInt8 m_nNumberFlags; + sal_uInt16 m_nRenderedPageNumber; + LwpObjectID m_CurrentSection; + sal_uInt16 m_nCurrentSectionPage; + LwpFootnoteSeenHead m_FootnoteSeen; + sal_uInt16 m_nLayoutPageNumber; +}; + +#endif //
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwppagelayout.cxx b/lotuswordpro/source/filter/lwppagelayout.cxx new file mode 100644 index 000000000000..7cb1c9a1d47d --- /dev/null +++ b/lotuswordpro/source/filter/lwppagelayout.cxx @@ -0,0 +1,1061 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * Change History +Mar 2005 Created + ************************************************************************/ +#include "lwppagelayout.hxx" +#include "lwplaypiece.hxx" +#include "lwpfootnote.hxx" +#include "lwpdoc.hxx" +#include "lwpholder.hxx" +#include "lwppagehint.hxx" +#include "lwpdivinfo.hxx" +#include "lwpstory.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xfmasterpage.hxx" +#include "xfilter/xfcontentcontainer.hxx" +#include "xfilter/xfheader.hxx" +#include "xfilter/xfheaderstyle.hxx" +#include "xfilter/xffooterstyle.hxx" +#include "xfilter/xffooter.hxx" +#include <sfx2/printer.hxx> +#include "lwpchangemgr.hxx" +#include "lwpglobalmgr.hxx" + +LwpPageLayout::LwpPageLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpLayout(objHdr, pStrm), m_pPrinterBinName(new LwpAtomHolder), + m_pPaperName(new LwpAtomHolder),m_pXFPageMaster(NULL) +{ +} + +LwpPageLayout::~LwpPageLayout() +{ + if (m_pPrinterBinName) + { + delete m_pPrinterBinName; + } + if (m_pPaperName) + { + delete m_pPaperName; + } +} +void LwpPageLayout::Read() +{ + LwpLayout::Read(); + + if (LwpFileHeader::m_nFileRevision < 0x000B) + { + // read PreRevBLayout... + } + + m_pObjStrm->QuickRead(&m_nPrinterBin, sizeof(m_nPrinterBin)); + m_pPrinterBinName->Read(m_pObjStrm); + + if (LwpFileHeader::m_nFileRevision >= 0x000B) + { + m_pObjStrm->QuickRead(&m_nBdroffset, sizeof(m_nBdroffset)); + } + + if (m_pObjStrm->CheckExtra()) + { + m_pPaperName->Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); + } + +} + +void LwpPageLayout::Parse(IXFStream* pOutputStream) +{ + //Only parse this layout + LwpObject* pStory = m_Content.obj(); + if(pStory) + { + pStory->SetFoundry(m_pFoundry); + pStory->Parse(pOutputStream); //Do not parse the next story + } +} + +/** +* @descr: set page margins +* +*/ +void LwpPageLayout::ParseMargins(XFPageMaster* pm1) +{ + double fLeft = GetMarginsValue(MARGIN_LEFT); + double fRight = GetMarginsValue(MARGIN_RIGHT); + double fTop = GetMarginsValue(MARGIN_TOP); + double fBottom = GetMarginsValue(MARGIN_BOTTOM); + + pm1->SetMargins( fLeft, fRight, fTop, fBottom ); + +} + +/** +* @descr: set page height and width +* +*/ +void LwpPageLayout::ParseGeometry(XFPageMaster* pm1) +{ + /* + LwpLayoutGeometry* pLayoutGeo = GetGeometry(); + if(pLayoutGeo) + { + pm1->SetPageHeight( GetGeometryHeight() ); + pm1->SetPageWidth( GetGeometryWidth() ); + } + */ + double fWidth =0; + double fHeight = 0; + GetWidthAndHeight(fWidth, fHeight); + pm1->SetPageWidth( fWidth ); + pm1->SetPageHeight( fHeight ); +} + +/** +* @descr: set page watermark +* +*/ +void LwpPageLayout::ParseWaterMark(XFPageMaster *pm1) +{ + XFBGImage* pXFBGImage = GetXFBGImage(); + if(pXFBGImage) + { + pm1->SetBackImage(pXFBGImage); + } +} + +/** +* @descr: set page columns +* +*/ +void LwpPageLayout::ParseColumns(XFPageMaster * pm1) +{ + XFColumns* pColumns = GetXFColumns(); + if(pColumns) + { + pm1->SetColumns(pColumns); + } +} + +/** +* @descr: set page borders +* +*/ +void LwpPageLayout::ParseBorders(XFPageMaster *pm1) +{ + XFBorders* pBordres = GetXFBorders(); + if(pBordres) + { + pm1->SetBorders(pBordres); + } +} + + +/** +* @descr: set page shadow +* +*/ +void LwpPageLayout::ParseShadow(XFPageMaster *pm1) +{ + XFShadow* pXFShadow = GetXFShadow(); + if(pXFShadow) + { + pm1->SetShadow(pXFShadow); + } +} + +/** +* @descr: set page back pattern +* +*/ +void LwpPageLayout::ParsePatternFill(XFPageMaster* pm1) +{ + XFBGImage* pXFBGImage = this->GetFillPattern(); + if (pXFBGImage) + { + pm1->SetBackImage(pXFBGImage); + } +} +/** +* @descr: set page background +* +*/ +void LwpPageLayout::ParseBackGround(XFPageMaster* pm1) +{ + if (this->IsPatternFill()) + { + ParsePatternFill(pm1); + } + else + { + ParseBackColor(pm1); + } +} + +/** +* @descr: set page back color +* +*/ +void LwpPageLayout::ParseBackColor(XFPageMaster* pm1) +{ + LwpColor* pColor = GetBackColor(); + if(pColor) + { + pm1->SetBackColor(XFColor(pColor->To24Color())); + } +} + +/** +* @descr: set page footnote separator information +* +*/ +void LwpPageLayout::ParseFootNoteSeparator(XFPageMaster * pm1) +{ + //Get the footnoteoptions for the root document + LwpDocument* pDocument = m_pFoundry->GetDocument(); + if(pDocument) + { + LwpFootnoteOptions* pFootnoteOpts = static_cast<LwpFootnoteOptions*>(pDocument->GetValidFootnoteOpts()->obj()); + if(pFootnoteOpts) + { + LwpFootnoteSeparatorOptions* pFootnoteSep = pFootnoteOpts->GetFootnoteSeparator(); + //set length + sal_uInt32 nLengthPercent = 100; + double fWidth = 0; + if(pFootnoteSep->HasSeparator()) + { + fWidth = pFootnoteSep->GetTopBorderWidth(); + } + if(pFootnoteSep->HasCustomLength()) + { + nLengthPercent = static_cast<sal_uInt32>(100*LwpTools::ConvertFromUnitsToMetric(pFootnoteSep->GetLength())/GetMarginWidth()); + if(nLengthPercent > 100) + nLengthPercent = 100; + } + double fAbove = LwpTools::ConvertFromUnitsToMetric(pFootnoteSep->GetAbove()); + double fBelow = LwpTools::ConvertFromUnitsToMetric(pFootnoteSep->GetBelow()); + LwpColor aColor = pFootnoteSep->GetTopBorderColor(); + enumXFAlignType eAlignType = enumXFAlignStart; + if(pFootnoteSep->GetIndent() > 0) + { + //SODC don't support indent + sal_uInt32 nIndentPercent = static_cast<sal_uInt32>(100*LwpTools::ConvertFromUnitsToMetric(pFootnoteSep->GetIndent())/GetMarginWidth()); + if(nIndentPercent + nLengthPercent >= 100) + eAlignType = enumXFAlignEnd; + } + if(aColor.IsValidColor()) + { + XFColor aXFColor(aColor.To24Color()); + pm1->SetFootNoteSeparator(eAlignType,fWidth, nLengthPercent, fAbove, fBelow, aXFColor); + } + } + } +} + +/** +* @descr: Register master page and page master style +* +*/ +void LwpPageLayout::RegisterStyle() +{ + XFPageMaster* pm1 = new XFPageMaster(); + m_pXFPageMaster = pm1; + + ParseGeometry( pm1 ); + //Does not process LayoutScale, for watermark is not supported in SODC. + ParseWaterMark( pm1); + ParseMargins( pm1); + ParseColumns(pm1); + ParseBorders(pm1); + ParseShadow(pm1); +// ParseBackColor(pm1); + ParseBackGround(pm1); + ParseFootNoteSeparator(pm1); + pm1->SetTextDir(GetTextDirection()); + + LwpUseWhen* pUseWhen = GetUseWhen(); + if(IsComplex() ||( pUseWhen && pUseWhen->IsUseOnAllOddPages())) + { + pm1->SetPageUsage(enumXFPageUsageMirror); + } + + //Add the page master to stylemanager + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + OUString pmname = pXFStyleManager->AddStyle(pm1)->GetStyleName(); + + //Add master page + XFMasterPage* mp1 = new XFMasterPage(); + mp1->SetStyleName(GetName()->str()); + mp1->SetPageMaster(pmname); + m_StyleName = pXFStyleManager->AddStyle(mp1)->GetStyleName(); + + //Set footer style + LwpFooterLayout* pLayoutFooter = GetFooterLayout(); + if(pLayoutFooter) + { + pLayoutFooter->SetFoundry(m_pFoundry); + pLayoutFooter->RegisterStyle(pm1); + pLayoutFooter->RegisterStyle(mp1); + } + + //Set header style + LwpHeaderLayout* pLayoutHeader = GetHeaderLayout(); + if(pLayoutHeader) + { + pLayoutHeader->SetFoundry(m_pFoundry); + pLayoutHeader->RegisterStyle(pm1); + pLayoutHeader->RegisterStyle(mp1); + } + //register child layout style for mirror page and frame + RegisterChildStyle(); +} + +/** +* @descr: Register master page for endnote which name is "endnote" +* @return: Return the master page name. +*/ +OUString LwpPageLayout::RegisterEndnoteStyle() +{ + XFPageMaster* pm1 = new XFPageMaster(); + m_pXFPageMaster = pm1; + + ParseGeometry( pm1 ); + ParseWaterMark( pm1); + ParseMargins( pm1); + ParseColumns(pm1); + ParseBorders(pm1); + ParseShadow(pm1); +// ParseBackColor(pm1); + ParseBackGround(pm1); + //ParseFootNoteSeparator(pm1); + pm1->SetTextDir(GetTextDirection()); + + LwpUseWhen* pUseWhen = GetUseWhen(); + if(IsComplex() ||( pUseWhen && pUseWhen->IsUseOnAllOddPages())) + { + pm1->SetPageUsage(enumXFPageUsageMirror); + } + + //Add the page master to stylemanager + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + OUString pmname = pXFStyleManager->AddStyle(pm1)->GetStyleName(); + + //Add master page + XFMasterPage* mp1 = new XFMasterPage(); + mp1->SetStyleName(A2OUSTR("Endnote")); + mp1->SetPageMaster(pmname); + + //Set footer style + LwpFooterLayout* pLayoutFooter = GetFooterLayout(); + if(pLayoutFooter) + { + pLayoutFooter->SetFoundry(m_pFoundry); + pLayoutFooter->RegisterStyle(pm1); + pLayoutFooter->RegisterStyle(mp1); + } + + //Set header style + LwpHeaderLayout* pLayoutHeader = GetHeaderLayout(); + if(pLayoutHeader) + { + pLayoutHeader->SetFoundry(m_pFoundry); + pLayoutHeader->RegisterStyle(pm1); + pLayoutHeader->RegisterStyle(mp1); + } + + return pXFStyleManager->AddStyle(mp1)->GetStyleName(); +} +/** +* @descr: Whether current page layout has columns +* +*/ +sal_Bool LwpPageLayout::HasColumns() +{ + return GetNumCols() > 1 ? sal_True : sal_False; +} + +/** +* @descr: Whether has filler page text in current page layout +* +*/ +sal_Bool LwpPageLayout::HasFillerPageText(LwpFoundry* pFoundry) +{ + if(!pFoundry) return sal_False; + + sal_Bool bFillerPage = sal_False; + LwpLayout::UseWhenType eWhenType = GetUseWhenType(); + if(eWhenType==LwpLayout::StartOnOddPage||eWhenType==LwpLayout::StartOnEvenPage) + { + //get pagenumber + sal_uInt16 nPageNumber = 0; + + //get the page number that current page layout inserted + nPageNumber = GetPageNumber(FIRST_LAYOUTPAGENO)-1; + + if(nPageNumber>0) + { + if((eWhenType==LwpLayout::StartOnOddPage)&&(LwpTools::IsOddNumber(nPageNumber))) + { + bFillerPage = sal_True; + } + else if((eWhenType==LwpLayout::StartOnEvenPage)&&(LwpTools::IsEvenNumber(nPageNumber))) + { + bFillerPage = sal_True; + } + else + { + bFillerPage = sal_False; + } + } + } + + return bFillerPage; +} + +/** +* @descr: Parse filler page text +* +*/ +void LwpPageLayout::ConvertFillerPageText(XFContentContainer* pCont) +{ + if(HasFillerPageText(m_pFoundry)) + { + //get filerpage story from division info + LwpDocument* pDoc = m_pFoundry->GetDocument(); + LwpDivInfo* pDivInfo = static_cast<LwpDivInfo*>(pDoc->GetDivInfoID()->obj()); + LwpStory* pStory = static_cast<LwpStory*>(pDivInfo->GetFillerPageTextID()->obj()); + + //parse fillerpage story + if(pStory) + { + pStory->XFConvert(pCont); + } + } +} +/** +* @descr: Clear columns style in page layout +* +*/ +void LwpPageLayout::ResetXFColumns() +{ + if(m_pXFPageMaster) + { + m_pXFPageMaster->SetColumns(NULL); + } +} + +LwpHeaderLayout* LwpPageLayout::GetHeaderLayout() +{ + LwpVirtualLayout* pLay = static_cast<LwpVirtualLayout*>(GetChildHead()->obj()); + while(pLay) + { + if( pLay->GetLayoutType() == LWP_HEADER_LAYOUT ) + return ( static_cast<LwpHeaderLayout*> (pLay) ); + pLay = static_cast<LwpVirtualLayout*> (pLay->GetNext()->obj()); + } + return NULL; +} + +LwpFooterLayout* LwpPageLayout::GetFooterLayout() +{ + LwpVirtualLayout* pLay = static_cast<LwpVirtualLayout*>(GetChildHead()->obj()); + while(pLay) + { + if( pLay->GetLayoutType() == LWP_FOOTER_LAYOUT ) + return ( static_cast<LwpFooterLayout*> (pLay) ); + pLay = static_cast<LwpVirtualLayout*> (pLay->GetNext()->obj()); + } + return NULL; +} + +/** +* @descr: Get the odd layout if current page layout is mirror page +* +*/ +LwpPageLayout* LwpPageLayout::GetOddChildLayout() +{ + if(IsComplex()) + { + LwpVirtualLayout* pLay = static_cast<LwpVirtualLayout*>(GetChildHead()->obj()); + while(pLay) + { + if( pLay->GetLayoutType() == LWP_PAGE_LAYOUT ) + { + LwpPageLayout* pPageLayout = static_cast<LwpPageLayout*> (pLay); + LwpUseWhen* pUseWhen = pPageLayout->GetUseWhen(); + if(pUseWhen && pUseWhen->IsUseOnAllOddPages()) + { + return pPageLayout; + } + } + pLay = static_cast<LwpVirtualLayout*> (pLay->GetNext()->obj()); + } + } + return NULL; +} + +/** +* @descr: Get margin width of page +* +*/ +double LwpPageLayout::GetMarginWidth() +{ + double fPagewidth = GetGeometryWidth(); + double fLeftMargin = GetMarginsValue(MARGIN_LEFT); + double fRightMargin = GetMarginsValue(MARGIN_RIGHT); + + return fPagewidth - (fLeftMargin + fRightMargin); +} + +/** + * @descr: Get the pagenumber + * @param: if nLayoutNumber =FIRST_LAYOUTPAGENO, return the first page number that current page layout covers + =LAST_LAYOUTPAGENO, return the last page number that current page layout covers + else, return the specified page number that current page layout covers + * @param: + * @return: if reture value >=0, success to find the page number, or fail. +*/ +sal_Int32 LwpPageLayout::GetPageNumber(sal_uInt16 nLayoutNumber) +{ + sal_Int16 nPageNumber = -1; + LwpFoundry* pFoundry = this->GetFoundry(); + LwpDocument* pDoc = pFoundry->GetDocument(); + LwpDLVListHeadTailHolder* pHeadTail = static_cast<LwpDLVListHeadTailHolder*>(pDoc->GetPageHintsID()->obj()); + if(!pHeadTail) return nPageNumber; + + //get first pagehint + LwpPageHint* pPageHint =static_cast<LwpPageHint*>(pHeadTail->GetHead()->obj()); + while(pPageHint) + { + if(*(this->GetObjectID()) == *(pPageHint->GetPageLayoutID())) + { + sal_uInt16 nNumber = pPageHint->GetPageNumber(); + if(nLayoutNumber==FIRST_LAYOUTPAGENO && pPageHint->GetLayoutPageNumber()==1) + { + //get the first page number + nPageNumber = nNumber; + break; + } + else if( nLayoutNumber ==LAST_LAYOUTPAGENO && nNumber >nPageNumber ) + { + //get the last page number + nPageNumber = nNumber; + if(pPageHint->GetNext()->IsNull()) + { + //if is last page number of entire document, reture directly + return nPageNumber + pDoc->GetNumberOfPagesBefore(); + } + } + else if(nLayoutNumber > 0 && pPageHint->GetLayoutPageNumber() == nLayoutNumber) + { + //get specified page number + nPageNumber = nNumber; + break; + } + + } + pPageHint = static_cast<LwpPageHint*>(pPageHint->GetNext()->obj()); + } + if(nPageNumber>=0) + { + return nPageNumber + 1 + pDoc->GetNumberOfPagesBefore(); + } + return -1; +} + +/** +* @descr: Get page width and height +* +*/ +void LwpPageLayout::GetWidthAndHeight(double& fWidth, double& fHeight) +{ + //use customized size + LwpLayoutGeometry* pLayoutGeo = GetGeometry(); + if(pLayoutGeo) + { + fWidth = GetGeometryWidth(); + fHeight = GetGeometryHeight(); + } + + if(GetUsePrinterSettings()) + { + //replaced by printer paper size + Printer aPrinter; + sal_Bool bScreen = aPrinter.IsDisplayPrinter(); + if (!bScreen)//Printer available + { + Size aPaperSize = aPrinter.GetPaperSize(); + aPaperSize = aPrinter.PixelToLogic( aPaperSize, MapMode( MAP_10TH_MM ) ); + fWidth = static_cast<double>(aPaperSize.Width())/100; //cm unit + fHeight = static_cast<double>(aPaperSize.Height())/100; + } + } + + //Follow the former design of Lotus WordPro filter, some default will be given: + //Page Width: 8.5 Inch -> 21.59 cm + //Page Height: 11 Inch -> 27.94 cm + if (fWidth < 4.39) + fWidth = 21.59; + if (fHeight < 4.49) + fHeight = 27.94; + //End of modification, by ZF +} + +/** +* @descr: Get page width +* +*/ +double LwpPageLayout::GetWidth() +{ + double fWidth =0, fHeight = 0; + GetWidthAndHeight(fWidth, fHeight); + return fWidth; +} + +/** +* @descr: Get page height +* +*/ +double LwpPageLayout::GetHeight() +{ + double fWidth =0, fHeight = 0; + GetWidthAndHeight(fWidth, fHeight); + return fHeight; +} +/** +* @descr: Compare the position of layout. If the poistion of this layout is earlier than other layout,return ture, or return false +* +*/ +sal_Bool LwpPageLayout::operator<(LwpPageLayout& Other) +{ + LwpPara* pThisPara = GetPagePosition(); + LwpPara* pOtherPara = Other.GetPagePosition(); + if(pThisPara && pOtherPara) + { + if(pThisPara == pOtherPara) + { + //If the two layouts in the same para, compare which layout is earlied according to frib order + return pThisPara->ComparePagePosition(this, &Other); + } + else + { + return *pThisPara < *pOtherPara; + } + } + + if(!pThisPara) + return sal_True; + + return sal_False; +} + +/** +* @descr: Get the position of pagelayout +* +*/ +LwpPara* LwpPageLayout::GetPagePosition() +{ + LwpPara* pPara = static_cast<LwpPara*>(GetPosition()->obj()); + if(pPara) + return pPara; + //Get the position from its related section + LwpSection* pSection = NULL; + LwpFoundry* pFoundry = GetFoundry(); + if(pFoundry) + { + while(pSection = pFoundry->EnumSections(pSection)) + { + if(pSection->GetPageLayout() == this) + return static_cast<LwpPara*>(pSection->GetPosition()->obj()); + } + } + + return NULL; +} +LwpHeaderLayout::LwpHeaderLayout( LwpObjectHeader &objHdr, LwpSvStream* pStrm ) + : LwpPlacableLayout(objHdr, pStrm) +{ +} + +LwpHeaderLayout::~LwpHeaderLayout() +{ +} + +void LwpHeaderLayout::Read() +{ + LwpPlacableLayout::Read(); + + if(LwpFileHeader::m_nFileRevision >= 0x000E) + { + m_pObjStrm->QuickRead(&m_nBorderOffset, sizeof(m_nBorderOffset)); + } + else + m_nBorderOffset = 0; + m_pObjStrm->SkipExtra(); +} + + +void LwpHeaderLayout::RegisterStyle(XFPageMaster* pm1) +{ + XFHeaderStyle* pHeaderStyle = new XFHeaderStyle(); + + //Modify page top margin + //page top maring: from top of header to the top edge + double top = GetMarginsValue(MARGIN_TOP); + pm1->SetMargins(-1, -1, top, -1); + + ParseMargins(pHeaderStyle); + ParseBorder(pHeaderStyle); + ParseShadow(pHeaderStyle); +// ParseBackColor(pHeaderStyle); + ParseBackGround(pHeaderStyle); + + ParseWaterMark(pHeaderStyle); + //End by + + pm1->SetHeaderStyle(pHeaderStyle); +} + +void LwpHeaderLayout::ParseMargins(XFHeaderStyle* ph1) +{ + //Set height: from top of header to top of body, including the spacing between header and body + double height = GetGeometryHeight()- GetMarginsValue(MARGIN_TOP); + if( IsAutoGrowDown() ) + { + ph1->SetMinHeight(height); + } + else + { + ph1->SetHeight(height); + } + + //Set left,right,bottom margins + LwpMiddleLayout* parent = static_cast<LwpMiddleLayout*> (GetParent()->obj()); + //left margin in SODC: the space from the left edge of body to the left edge of header + double left = GetMarginsValue(MARGIN_LEFT) - parent->GetMarginsValue(MARGIN_LEFT); + if(left<=0) //The left margin in SODC can not be minus value + { + left = -1; + } + //left margin in SODC: the space from the right edge of header to the right edge of body + double right = GetMarginsValue(MARGIN_RIGHT) - parent->GetMarginsValue(MARGIN_RIGHT); + if(right<=0)//The right margin in SODC can not be minus value + { + right = -1; + } + ph1->SetMargins( left, right, GetMarginsValue(MARGIN_BOTTOM)); + + //Word Pro has no dynamic spacing, should be set to false + ph1->SetDynamicSpace(sal_False); +} + +void LwpHeaderLayout::ParseBorder(XFHeaderStyle* pHeaderStyle) +{ + XFBorders* pBordres = GetXFBorders(); + if(pBordres) + { + pHeaderStyle->SetBorders(pBordres); + } +} + +void LwpHeaderLayout::ParseShadow(XFHeaderStyle* pHeaderStyle) +{ + XFShadow* pXFShadow = GetXFShadow(); + if(pXFShadow) + { + pHeaderStyle->SetShadow(pXFShadow); + } +} + +/** +* @descr: set header back pattern +* +*/ +void LwpHeaderLayout::ParsePatternFill(XFHeaderStyle* pHeaderStyle) +{ + XFBGImage* pXFBGImage = this->GetFillPattern(); + if (pXFBGImage) + { + pHeaderStyle->SetBackImage(pXFBGImage); + } +} +/** +* @descr: set header background +* +*/ +void LwpHeaderLayout::ParseBackGround(XFHeaderStyle* pHeaderStyle) +{ + if (this->IsPatternFill()) + { + ParsePatternFill(pHeaderStyle); + } + else + { + ParseBackColor(pHeaderStyle); + } +} + +void LwpHeaderLayout::ParseBackColor(XFHeaderStyle* pHeaderStyle) +{ + LwpColor* pColor = GetBackColor(); + if(pColor) + { + pHeaderStyle->SetBackColor(XFColor(pColor->To24Color())); + } +} + + +void LwpHeaderLayout::ParseWaterMark(XFHeaderStyle * pHeaderStyle) +{ + XFBGImage* pXFBGImage = GetXFBGImage(); + if(pXFBGImage) + { + pHeaderStyle->SetBackImage(pXFBGImage); + } +} +//End by + +void LwpHeaderLayout::RegisterStyle(XFMasterPage* mp1) +{ + XFHeader* pHeader = new XFHeader(); + LwpObject* pStory = m_Content.obj(); + if(pStory) + { + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + LwpChangeMgr* pChangeMgr = pGlobal->GetLwpChangeMgr(); + pChangeMgr->SetHeadFootFribMap(sal_True); + + //Call the RegisterStyle first to register the styles in header paras, and then XFConvert() + pStory->SetFoundry(m_pFoundry); + pStory->RegisterStyle(); + //, 06/27/2005 + //register child layout style for framelayout, + RegisterChildStyle(); + //End + pChangeMgr->SetHeadFootChange(pHeader); + pStory->XFConvert(pHeader); + + pChangeMgr->SetHeadFootFribMap(sal_False); + } + mp1->SetHeader(pHeader); +} + +LwpFooterLayout::LwpFooterLayout( LwpObjectHeader &objHdr, LwpSvStream* pStrm ) + : LwpPlacableLayout( objHdr, pStrm ) +{ +} + +LwpFooterLayout::~LwpFooterLayout() +{ +} + +void LwpFooterLayout::Read() +{ + LwpPlacableLayout::Read(); + + if(LwpFileHeader::m_nFileRevision >= 0x000E) + { + m_pObjStrm->QuickRead(&m_nBorderOffset, sizeof(m_nBorderOffset)); + } + else + m_nBorderOffset = 0; + m_pObjStrm->SkipExtra(); +} + +void LwpFooterLayout::RegisterStyle(XFPageMaster* pm1) +{ + XFFooterStyle* pFooterStyle = new XFFooterStyle(); + + //Modify page bottom margin + //page bottom maring: from bottom of footer to the bottom edge + double bottom = GetMarginsValue(MARGIN_BOTTOM); + pm1->SetMargins(-1, -1, -1, bottom); + + ParseMargins(pFooterStyle); + ParseBorder(pFooterStyle); + ParseShadow(pFooterStyle); + ParseBackGround(pFooterStyle); +// ParseBackColor(pFooterStyle); + + ParseWaterMark(pFooterStyle); + //End by + + pm1->SetFooterStyle(pFooterStyle); +} + +void LwpFooterLayout::ParseMargins(XFFooterStyle* pFooterStyle) +{ + + //Set height: from top of header to top of body, including the spacing between header and body + double height = GetGeometryHeight() - GetMarginsValue(MARGIN_BOTTOM); + if( IsAutoGrowUp() ) + { + pFooterStyle->SetMinHeight(height); + } + else + { + pFooterStyle->SetHeight(height); + } + + //Set left,right,top margins + LwpMiddleLayout* parent = static_cast<LwpMiddleLayout*> (GetParent()->obj()); + double left = GetMarginsValue(MARGIN_LEFT) - parent->GetMarginsValue(MARGIN_LEFT); + if(left<=0) //The left margin in SODC can not be minus value + { + left = -1; + } + double right = GetMarginsValue(MARGIN_RIGHT) - parent->GetMarginsValue(MARGIN_RIGHT); + if(right<=0)//The left margin in SODC can not be minus value + { + right = -1; + } + pFooterStyle->SetMargins( left, right, GetMarginsValue(MARGIN_TOP)); + + //Word Pro has no dynamic spacing, should be set to false + pFooterStyle->SetDynamicSpace(sal_False); +} + +void LwpFooterLayout::ParseBorder(XFFooterStyle* pFooterStyle) +{ + XFBorders* pBordres = GetXFBorders(); + if(pBordres) + { + pFooterStyle->SetBorders(pBordres); + } +} + +void LwpFooterLayout::ParseShadow(XFFooterStyle* pFooterStyle) +{ + XFShadow* pXFShadow = GetXFShadow(); + if(pXFShadow) + { + pFooterStyle->SetShadow(pXFShadow); + } +} +/** +* @descr: set footer back pattern +* +*/ +void LwpFooterLayout::ParsePatternFill(XFFooterStyle* pFooterStyle) +{ + XFBGImage* pXFBGImage = this->GetFillPattern(); + if (pXFBGImage) + { + pFooterStyle->SetBackImage(pXFBGImage); + } +} +/** +* @descr: set footer background +* +*/ +void LwpFooterLayout::ParseBackGround(XFFooterStyle* pFooterStyle) +{ + if (this->IsPatternFill()) + { + ParsePatternFill(pFooterStyle); + } + else + { + ParseBackColor(pFooterStyle); + } +} + +void LwpFooterLayout::ParseBackColor(XFFooterStyle* pFooterStyle) +{ + LwpColor* pColor = GetBackColor(); + if(pColor) + { + pFooterStyle->SetBackColor(XFColor(pColor->To24Color())); + } +} + +void LwpFooterLayout::RegisterStyle(XFMasterPage* mp1) +{ + XFFooter* pFooter = new XFFooter(); + LwpObject* pStory = m_Content.obj(VO_STORY); + //Call the RegisterStyle first to register the styles in footer paras, and then XFConvert() + if(pStory) + { + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + LwpChangeMgr* pChangeMgr = pGlobal->GetLwpChangeMgr(); + pChangeMgr->SetHeadFootFribMap(sal_True); + + pStory->SetFoundry(m_pFoundry); + pStory->RegisterStyle(); + //, 06/27/2005 + //register child layout style for framelayout, + RegisterChildStyle(); + //End + + pChangeMgr->SetHeadFootChange(pFooter);//add by ,7/6 + + pStory->XFConvert(pFooter); + + pChangeMgr->SetHeadFootFribMap(sal_False); + } + mp1->SetFooter(pFooter); +} + + +void LwpFooterLayout::ParseWaterMark(XFFooterStyle * pFooterStyle) +{ + XFBGImage* pXFBGImage = GetXFBGImage(); + if(pXFBGImage) + { + pFooterStyle->SetBackImage(pXFBGImage); + } +} +//End by diff --git a/lotuswordpro/source/filter/lwppagelayout.hxx b/lotuswordpro/source/filter/lwppagelayout.hxx new file mode 100644 index 000000000000..29858304cb37 --- /dev/null +++ b/lotuswordpro/source/filter/lwppagelayout.hxx @@ -0,0 +1,169 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * Change History +Mar 2005 Created + ************************************************************************/ + +#ifndef _LWPPAGELAYOUT_HXX +#define _LWPPAGELAYOUT_HXX + +#include "lwplayout.hxx" + +class LwpHeaderLayout; +class LwpFooterLayout; + +class LwpPageLayout: public LwpLayout +{ +public: + LwpPageLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpPageLayout(); + virtual void RegisterStyle(); + OUString RegisterEndnoteStyle(); + virtual void Parse(IXFStream* pOutputStream); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_PAGE_LAYOUT;} +protected: + void Read(); + LwpHeaderLayout* GetHeaderLayout(); + LwpFooterLayout* GetFooterLayout(); + //void RegisterChildStyle(); + void ParseGeometry(XFPageMaster* pm1); + void ParseMargins(XFPageMaster* pm1); + void ParseBorders(XFPageMaster* pm1); + // add by , 06/03/2005 + void ParsePatternFill(XFPageMaster* pm1); + void ParseBackGround(XFPageMaster* pm1); + // end add + void ParseBackColor(XFPageMaster* pm1); + void ParseWaterMark(XFPageMaster* pm1); + void ParseColumns(XFPageMaster* pm1); + void ParseShadow(XFPageMaster* pm1); + void ParseFootNoteSeparator(XFPageMaster* pm1); + double GetMarginWidth(); + void GetWidthAndHeight(double& fWidth, double& fHeight); + double GetWidth(); + double GetHeight(); +protected: + LwpAtomHolder* m_pPrinterBinName; + sal_uInt16 m_nPrinterBin; + sal_Int32 m_nBdroffset; + LwpAtomHolder* m_pPaperName; + XFPageMaster* m_pXFPageMaster; +public: + sal_Bool HasColumns(); + sal_Bool HasFillerPageText(LwpFoundry* pFoundry); + void ConvertFillerPageText(XFContentContainer* pCont); + void ResetXFColumns(); + LwpPageLayout* GetOddChildLayout(); + virtual sal_Int32 GetPageNumber(sal_uInt16 nLayoutNumber = 0); + sal_Bool operator <(LwpPageLayout& Other); + LwpPara* GetPagePosition(); +}; + +#include "xfilter/xfmasterpage.hxx" + +class LwpHeaderLayout: public LwpPlacableLayout +{ +public: + LwpHeaderLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpHeaderLayout(); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_HEADER_LAYOUT;} + void RegisterStyle( XFPageMaster* pm1 ); + void RegisterStyle( XFMasterPage* mp1 ); +protected: + void Read(); + void ParseMargins( XFHeaderStyle* ph1 ); + void ParseBorder( XFHeaderStyle* ph1 ); + void ParseShadow( XFHeaderStyle* ph1 ); + // add by , 06/03/2005 + void ParsePatternFill(XFHeaderStyle* ph1); + void ParseBackGround(XFHeaderStyle* ph1); + // end add + void ParseBackColor(XFHeaderStyle* ph1); + + void ParseWaterMark(XFHeaderStyle* ph1); + //End by +private: + sal_Int32 m_nBorderOffset; +}; + +class LwpFooterLayout: public LwpPlacableLayout +{ +public: + LwpFooterLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpFooterLayout(); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_FOOTER_LAYOUT;} + void RegisterStyle(XFPageMaster* pm1); + void RegisterStyle(XFMasterPage* mp1); +protected: + void Read(); + void ParseMargins( XFFooterStyle* pFooterStyle ); + void ParseBorder( XFFooterStyle* pFooterStyle ); + void ParseShadow( XFFooterStyle* pFooterStyle ); + // add by , 06/03/2005 + void ParsePatternFill(XFFooterStyle* pFooterStyle); + void ParseBackGround(XFFooterStyle* pFooterStyle); + // end add + + void ParseBackColor(XFFooterStyle* pFooterStyle); + + void ParseWaterMark(XFFooterStyle* pFooterStyle); + //End by + +private: + sal_Int32 m_nBorderOffset; +}; + +#endif diff --git a/lotuswordpro/source/filter/lwppara.cxx b/lotuswordpro/source/filter/lwppara.cxx new file mode 100644 index 000000000000..eaa8076d5523 --- /dev/null +++ b/lotuswordpro/source/filter/lwppara.cxx @@ -0,0 +1,1046 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwppara.hxx" +#include "lwpglobalmgr.hxx" +#include "lwpfilehdr.hxx" +#include "lwpparaproperty.hxx" +#include "lwptools.hxx" +#include "lwpparastyle.hxx" +#include "xfilter/xffont.hxx" +#include "xfilter/xftextstyle.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xfparagraph.hxx" +#include "xfilter/xftextcontent.hxx" +#include "xfilter/xftextspan.hxx" +#include "xfilter/xfmargins.hxx" +#include "xfilter/xftabstop.hxx" +#include "xfilter/xflinebreak.hxx" +#include "xfilter/xfsection.hxx" +#include "xfilter/xfsectionstyle.hxx" +#include "xfilter/xfcolor.hxx" +#include "xfilter/xfhyperlink.hxx" +#include "xfilter/xfliststyle.hxx" +#include "lwpcharsetmgr.hxx" +#include "lwpsection.hxx" +#include "lwplayout.hxx" +#include "lwpusewhen.hxx" +#include "lwpbulletstylemgr.hxx" +#include "lwpstory.hxx" +#include "lwpsilverbullet.hxx" +#include "xfilter/xflist.hxx" +#include "xfilter/xfframe.hxx" + +#include "lwpdivinfo.hxx" +#include "lwpdoc.hxx" +#include "lwpholder.hxx" +#include "lwppagehint.hxx" + +#include "lwpdropcapmgr.hxx" +#include "lwptable.hxx" +LwpPara::LwpPara(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpDLVList(objHdr, pStrm), m_pBreaks(NULL), m_pIndentOverride(NULL), m_bHasBullet(sal_False), m_bBullContinue(sal_False), + /*m_pParaNumbering(NULL),*/ m_pSilverBullet(NULL), m_pBullOver(NULL),m_bHasDropcap(sal_False),m_nLines(0),m_nChars(0), + m_BelowSpacing(0),m_pDropcapLayout(NULL), m_pXFContainer(NULL) +{ + m_pProps = NULL; + m_SectionStyleName = A2OUSTR(""); + m_AllText = A2OUSTR(""); +} + +LwpPara::~LwpPara() +{ + + if (m_pBreaks) + { + delete m_pBreaks; + m_pBreaks = NULL; + } +/* if (m_pParaNumbering) + { + delete m_pParaNumbering; + m_pParaNumbering = NULL; + }*/ + + if (m_pBullOver) + { + delete m_pBullOver; + m_pBullOver = NULL; + } + if(m_pIndentOverride) + { + delete m_pIndentOverride; + } + + LwpParaProperty* pNextProp; + while(m_pProps) + { + pNextProp = m_pProps->GetNext(); + delete m_pProps; + m_pProps = pNextProp; + } +} + +void LwpPara::Read() +{ + LwpDLVList::Read(); + + sal_Bool Simple; + sal_Bool Notify = sal_False; +// m_Fribs.SetPara(this); +// LwpParaPropListProperty *PropList = NULL; + if(LwpFileHeader::m_nFileRevision<0x0006) + Simple = sal_False; + else if(LwpFileHeader::m_nFileRevision<0x000B) + m_pObjStrm->QuickRead(&Simple, sizeof(Simple)); + else + { + sal_uInt8 Flag; + m_pObjStrm->QuickRead(&Flag, sizeof(Flag)); + + const int DISK_SIMPLE = 1; + const int DISK_NOTIFY = 2; + + Simple = (Flag & DISK_SIMPLE) ? sal_True : sal_False; + Notify = (Flag & DISK_NOTIFY) ? sal_True : sal_False; + } + + if(!Simple) + { + m_pObjStrm->QuickRead(&m_nOrdinal, sizeof(m_nOrdinal)); + if(LwpFileHeader::m_nFileRevision<0x000B) + { + // TODO: to process + assert(false); + /*pCForked3NotifyList Notify = new CForked3NotifyList(this); + Notify->GetExtraList()->QuickRead(pFile); + Notify->QuickRead(pFile); + if(Notify->GetExtraList()->IsEmpty() && + Notify->IsEmpty()) + delete Notify; + else + cNotifyList = Notify;*/ + } + else + { + if (Notify) + { + LwpForked3NotifyList* pNotifyList = new LwpForked3NotifyList(); + pNotifyList->GetExtraList()->Read(m_pObjStrm); + pNotifyList->Read(m_pObjStrm); + delete pNotifyList; + } + } + } + else + m_nOrdinal = 0x0001; + + m_pObjStrm->QuickRead(&m_nFlags, sizeof(m_nFlags)); + m_ParaStyle.ReadIndexed(m_pObjStrm); + + if(!Simple) + { + m_Hint.Read(m_pObjStrm); + if (IsBadHintsInFile()) + { + // This hint is no good, so throw it away -- SDC 9/28/95 + m_Hint.Reset(); + } + } + + m_Story.ReadIndexed(m_pObjStrm); + if(!Simple) + { + if(LwpFileHeader::m_nFileRevision<0x000B) + { + // TODO: to process + assert(false); + /*PropList = new CParaPropListProperty(this); + PropList->GetList()->QuickRead(pFile); + if(PropList->GetList()->IsEmpty()) + { + delete PropList; + PropList = LNULL; + }*/ + } + m_pObjStrm->QuickRead(&m_nLevel, sizeof(m_nLevel)); + + // test + if (m_nLevel > 9) + { + m_nLevel = 9; + } + // test ends + } + else + m_nLevel = 0x0001; + + m_Fribs.SetPara(this);//add by 2/1, for silver bullet + m_Fribs.ReadPara(m_pObjStrm); + + m_pProps = LwpParaProperty::ReadPropertyList(m_pObjStrm,this); +} + +void LwpPara::Parse(IXFStream* pOutputStream) +{ + m_pXFContainer = new XFContentContainer; + XFConvert(m_pXFContainer); + m_pXFContainer->ToXml(pOutputStream); + m_pXFContainer->Reset(); + delete m_pXFContainer; + m_pXFContainer = NULL; +} + +void LwpPara::XFConvert(XFContentContainer* pCont) +{ + m_pXFContainer = pCont; + + if (static_cast<LwpStory*>(m_Story.obj())->GetDropcapFlag() == sal_True) + { + ParseDropcapContent(); + /*LwpObject* pNextPara = GetNext()->obj(); + if(pNextPara) + pNextPara->XFConvert(pCont);*/ + return; + } + + //Add the break before para + if (m_pBreaks && m_nOrdinal!=0) + AddBreakBefore(pCont); + + //Create an XFPara for this VO_PARA + XFParagraph *pPara = new XFParagraph; + pPara->SetStyleName(m_StyleName); + + if(m_SectionStyleName.getLength()>0) + { + XFSection* pSection = CreateXFSection(); + LwpStory* pStory = static_cast<LwpStory*> ( m_Story.obj() ); + pStory->AddXFContent(pSection); + //pSection->Add(pPara); + m_pXFContainer = pSection; + } + + if (m_bHasBullet && m_pSilverBullet) + { + XFContentContainer* pListItem = AddBulletList(m_pXFContainer); + if (pListItem) + { + pListItem->Add(pPara); + } + } + else + { + LwpBulletStyleMgr* pBulletStyleMgr = this->GetBulletStyleMgr(); + if (pBulletStyleMgr) + { + pBulletStyleMgr->SetCurrentSilverBullet(LwpObjectID()); + pBulletStyleMgr->SetContinueFlag(sal_False); + } + m_pXFContainer->Add(pPara); + } + + m_Fribs.SetXFPara(pPara); + m_Fribs.XFConvert(); + + if (m_pBreaks) + AddBreakAfter(m_pXFContainer); + + // maybe useful for futer version + // deleted by + // AddTabStopForTOC(); + + //Caller is responsible for calling the next para object + /*LwpObject* pNextPara = GetNext()->obj(); + if(pNextPara) + pNextPara->XFConvert( m_pXFContainer );*/ +} + +sal_Bool LwpPara::RegisterMasterPage(XFParaStyle* pBaseStyle) +{ + sal_Bool bSuccess = sal_False; + //get story + LwpStory* pStory = static_cast<LwpStory*>(m_Story.obj()); + //if pagelayout is modified, register the pagelayout + if(pStory->IsPMModified()) + { + sal_Bool bNewSection = sal_False; + bNewSection = pStory->IsNeedSection(); + LwpPageLayout* pLayout = pStory->GetCurrentLayout(); + if(bNewSection) + { + RegisterNewSectionStyle(pLayout); + } + + bSuccess = sal_True; + //register master page style + XFParaStyle* pOverStyle = new XFParaStyle(); + *pOverStyle = *pBaseStyle; + pOverStyle->SetStyleName( A2OUSTR("")); + pOverStyle->SetMasterPage(pLayout->GetStyleName()); + if (m_ParentStyleName.getLength()) + pOverStyle->SetParentStyleName(m_ParentStyleName); //Add by 2005/12/12 + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_StyleName = pXFStyleManager->AddStyle(pOverStyle)->GetStyleName(); + } + return bSuccess; +} +/** + * @short register paragraph style + */ +void LwpPara::RegisterStyle() +{ //1 reg autostyle +// m_Fribs.SetPara(this); +// m_Fribs.RegisterStyle(); + + //2 reg para style + if (!m_pFoundry) + return; + XFParaStyle* pBaseStyle = static_cast<XFParaStyle*>(m_pFoundry->GetStyleManager()->GetStyle(m_ParaStyle)); + if (pBaseStyle == NULL) return; + m_StyleName = pBaseStyle->GetStyleName();//such intf to be added + m_ParentStyleName = m_StyleName;//Add by ,2005/12/12 + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + + if (GetParaStyle()->GetIndent()) + { + m_pIndentOverride = new LwpIndentOverride; + *m_pIndentOverride = *(GetParaStyle()->GetIndent()); //add by 2-6,for indent hierachy + } +// else +// m_pIndentOverride = NULL; + + XFParaStyle* pOverStyle = NULL; + sal_Bool noSpacing = sal_True; + sal_Bool noIndent = sal_True; + LwpParaProperty* pBulletProps = NULL, *pNumberingProps = NULL; + + if (m_pProps != NULL) + { + pOverStyle = new XFParaStyle; + *pOverStyle = *pBaseStyle; + pOverStyle->SetStyleName(A2OUSTR("")); + LwpParaProperty* pProps = m_pProps; + sal_uInt32 PropType; + LwpParaStyle* pParaStyle = static_cast<LwpParaStyle*>(m_ParaStyle.obj()); + while(pProps) + { + PropType = pProps->GetType(); + switch(PropType) + { + case PP_LOCAL_ALIGN: + { + LwpAlignmentOverride aAlign; + if (!pParaStyle->GetAlignment()) + OverrideAlignment(NULL,static_cast<LwpParaAlignProperty*>(pProps)->GetAlignment(),pOverStyle); + else + { + aAlign = *(pParaStyle->GetAlignment()); + OverrideAlignment(&aAlign,static_cast<LwpParaAlignProperty*>(pProps)->GetAlignment(),pOverStyle); + } + } + break; + case PP_LOCAL_INDENT: + { + noIndent = sal_False; + if (!pParaStyle->GetIndent()) + OverrideIndent(NULL,static_cast<LwpParaIndentProperty*>(pProps)->GetIndent(),pOverStyle); + + else + { + OverrideIndent(m_pIndentOverride,static_cast<LwpParaIndentProperty*>(pProps)->GetIndent(),pOverStyle); + } + } + break; + case PP_LOCAL_SPACING: + { + LwpSpacingOverride aSpacing; + noSpacing = sal_False; + if (!pParaStyle->GetSpacing()) + OverrideSpacing(NULL,static_cast<LwpParaSpacingProperty*>(pProps)->GetSpacing(),pOverStyle); + else + { + aSpacing = *(pParaStyle->GetSpacing()); + OverrideSpacing(&aSpacing,static_cast<LwpParaSpacingProperty*>(pProps)->GetSpacing(),pOverStyle); + } + } + break; + // 01/25/2005 + case PP_LOCAL_BORDER: + { + OverrideParaBorder(pProps, pOverStyle); + break; + } + case PP_LOCAL_BREAKS: + { + OverrideParaBreaks(pProps, pOverStyle); + break; + } + case PP_LOCAL_BULLET: + { + pBulletProps = pProps; +// OverrideParaBullet(pProps); + break; + } + case PP_LOCAL_NUMBERING: + { + pNumberingProps = pProps; +// OverrideParaNumbering(pProps); + break; + } + //end + case PP_LOCAL_TABRACK: + { + //, 01/28/05 + /*LwpTabOverride* pTabOverride=pParaStyle->GetTabOverride(); + if(!pTabOverride) + { + OverrideTab(NULL,static_cast<LwpParaTabRackProperty*>(pProps)->GetTab(),pOverStyle); + } + else + { + OverrideTab(pTabOverride,static_cast<LwpParaTabRackProperty*>(pProps)->GetTab(),pOverStyle); + }*/ + break; + } + case PP_LOCAL_BACKGROUND: + { +/* LwpBackgroundOverride aBackground; + if (!pParaStyle->GetBackground()) + OverrideBackground(NULL,static_cast<LwpParaBackGroundProperty*>(pProps)->GetBackground(),pOverStyle); + else + { + aBackground = *(pParaStyle->GetaBackground()); + OverrideBackground(&aBackground,static_cast<LwpParaBackGroundProperty*>(pProps)->GetBackground(),pOverStyle); + } +*/ + // modified by , 06/03/2005 + LwpBackgroundOverride* pBGOver = static_cast<LwpParaBackGroundProperty*>(pProps)->GetBackground(); + if (pBGOver) + { + LwpBackgroundStuff* pBGStuff = pBGOver->GetBGStuff(); + if (pBGStuff && !pBGStuff->IsTransparent() ) + { + if (pBGStuff->IsPatternFill()) + { + XFBGImage* pXFBGImage = pBGStuff->GetFillPattern(); + pOverStyle->SetBackImage(pXFBGImage); + } + else + { + LwpColor* pColor = pBGStuff->GetFillColor(); + if (pColor && pColor->IsValidColor()) + { + XFColor aXFColor( pColor->To24Color()); + pOverStyle->SetBackColor( aXFColor ); + } + } + } + } + // end modified + break; + } + default: + break; + } + pProps = pProps->GetNext(); + } + + if (noIndent && m_pIndentOverride) + { + if (m_pIndentOverride->IsUseRelative() && GetParent()) + { + OverrideIndent(NULL,m_pIndentOverride,pOverStyle); + } + } + if (m_ParentStyleName.getLength()) + pOverStyle->SetParentStyleName(m_ParentStyleName); //Add by 2005/12/12 + m_StyleName = pXFStyleManager->AddStyle(pOverStyle)->GetStyleName(); + + } + else //use named style + { + if (m_pIndentOverride) + { + if (m_pIndentOverride->IsUseRelative() && GetParent()) + { + pOverStyle = new XFParaStyle; + *pOverStyle = *pBaseStyle; + OverrideIndent(NULL,m_pIndentOverride,pOverStyle); + if (m_ParentStyleName.getLength()) + pOverStyle->SetParentStyleName(m_ParentStyleName); //Add by 2005/12/12 + m_StyleName = pXFStyleManager->AddStyle(pOverStyle)->GetStyleName(); + } + } + } + + if (IsInCell()) + { + XFParaStyle* pOldStyle = pXFStyleManager->FindParaStyle(m_StyleName); + if (pOldStyle->GetNumberRight()) + { + pOverStyle = new XFParaStyle; + *pOverStyle = *pOldStyle; + pOverStyle->SetAlignType(enumXFAlignStart); + if (m_ParentStyleName.getLength()) + pOverStyle->SetParentStyleName(m_ParentStyleName); //Add by 2005/12/12 + m_StyleName = pXFStyleManager->AddStyle(pOverStyle)->GetStyleName(); + } + } + + // override bullet and numbering + OverrideParaBullet(pBulletProps); + OverrideParaNumbering(pNumberingProps); + + //add by + //register bullet style + LwpBulletStyleMgr* pBulletStyleMgr = this->GetBulletStyleMgr(); + if (pBulletStyleMgr) + { + // if has bullet or numbering + if (m_bHasBullet) + { + //if it's normal bullet + if (m_pSilverBullet) + { + if (m_pSilverBullet->HasName()) + { + m_aBulletStyleName = m_pSilverBullet->GetBulletStyleName(); + } + else if (!m_pBullOver->IsEditable()) + { + m_aBulletStyleName = pBulletStyleMgr->RegisterBulletStyle(this, m_pBullOver, m_pIndentOverride); + } + + // test codes + if (m_pSilverBullet->IsBulletOrdered()) + { + rtl::OUString aPreBullStyleName; + LwpNumberingOverride* pNumbering = this->GetParaNumbering(); + sal_uInt16 nPosition = pNumbering->GetPosition(); + sal_Bool bLesser = m_pSilverBullet->IsLesserLevel(nPosition); + sal_Bool bResetSection = m_pSilverBullet->IsNewSection(nPosition); + sal_Bool bHeading; + LwpPara* pPara = this; + LwpPara* pPrePara = NULL; + LwpSilverBullet* pParaSilverBullet = NULL; + sal_uInt16 nNum = 0, nOffset = 0, nLevel = 0, nFoundLevel = 0xffff, nFoundBound = 0; + + nFoundBound = nLevel = pNumbering->GetLevel(); + if (nPosition == pNumbering->GetPosition()) + { + nFoundBound++; + } + bHeading = pNumbering->IsHeading(); + + while(sal_True) + { + /*// When we hit the hint paragraph, we can stop and check the hint. + if (qNumberHint && (qPara == qNumberHint->GetPara()) && + qNumberHint->Lookup(qSilverBullet, Level, Position, &Offset)) + { + Num += Offset; + break; + }*/ + + pParaSilverBullet = pPara->GetSilverBullet(); + pNumbering = pPara->GetParaNumbering(); + + if (*(pPara->GetObjectID()) != *(this->GetObjectID())) + { + if (!pParaSilverBullet) + { + break; + } + + /* If lesser, stop when we hit an outline style whose level is + * higher than our current level. + */ + // restart based on Outline level? + if (pNumbering && bLesser && (bHeading ? pNumbering->IsHeading() : sal_True)) + { + if (nFoundLevel != 0xffff) + { + if (pNumbering->GetLevel() < nFoundLevel) + { + break; + } + if ((pNumbering->GetLevel() == nFoundLevel) + && (*(pParaSilverBullet->GetObjectID()) != *(m_pSilverBullet->GetObjectID()) + || pNumbering->GetPosition() != nPosition)) + { + break; + } + } + else + { + if (pNumbering && pNumbering->GetLevel() < nFoundBound && pParaSilverBullet + && (*(pParaSilverBullet->GetObjectID()) != *(m_pSilverBullet->GetObjectID()) + || pNumbering->GetPosition() != nPosition)) + { + nFoundBound = pNumbering->GetLevel(); + } + } + } + + /*if (qSpecificStyle + && qSpecificStyle == qPara->GetParaStyle(LTRUE)) + break; + + // See if we crossed a section boundary + if (ResetSection) + { + CurrPos.SetPara(qPara); + if (CurrPos <= SectionPos) + break; + }*/ + } + + // Don't bump the number if this bullet is skipped + if (m_pBullOver->IsSkip()) + ; + else if ( pParaSilverBullet + && *(pParaSilverBullet->GetObjectID()) == *(m_pSilverBullet->GetObjectID()) + && pNumbering && nPosition == pNumbering->GetPosition()) + { + if (bLesser) + { + if (nFoundLevel != 0xffff) + { + if (nFoundLevel == pNumbering->GetLevel()) + { + aPreBullStyleName = pPara->GetBulletStyleName(); + nNum++; + } + } + else if (pNumbering->GetLevel() <= nLevel) + { + if (pNumbering->GetLevel() >= nFoundBound) + { + break; + } + nFoundLevel = pNumbering->GetLevel(); + aPreBullStyleName = pPara->GetBulletStyleName(); + nNum++; + } + } + else + { + aPreBullStyleName = pPara->GetBulletStyleName(); + nNum++; + } + } + + if (pPara && pPara->GetPrevious()) + pPrePara = static_cast<LwpPara*>(pPara->GetPrevious()->obj(VO_PARA)); + else + pPrePara=NULL; + + if (!pPrePara) + { + LwpStory* pStory = pPara->GetStory(); + pPrePara = pStory->GetLastParaOfPreviousStory(); + + if (!pPrePara) + { + break; + } + } + pPara = pPrePara; + } + nNum = nNum ? nNum : 1; + + if (nNum > 1) + { + m_aBulletStyleName = aPreBullStyleName; + m_bBullContinue = sal_True; + } + else + { + m_bBullContinue = sal_False; + if (this->IsInCell()) + { + XFListStyle* pOldStyle = static_cast<XFListStyle*>(pXFStyleManager->FindStyle(m_aBulletStyleName)); + if (pOldStyle) + { + XFListStyle* pNewStyle = new XFListStyle(*pOldStyle); + m_aBulletStyleName = pXFStyleManager->AddStyle(pNewStyle)->GetStyleName(); + } + } + } + + LwpStory* pMyStory = this->GetStory(); + if (pMyStory) + { + if (pMyStory->IsBullStyleUsedBefore(m_aBulletStyleName, m_aParaNumbering.GetPosition())) + { + //m_bBullContinue = sal_True; + } + else + { + pMyStory->AddBullStyleName2List(m_aBulletStyleName, m_aParaNumbering.GetPosition()); + } + } + + } + // end of test codes + } + } + } + //end add + + if (noSpacing && GetPrevious()) + { + LwpPara* pPrePara = static_cast<LwpPara*>(GetPrevious()->obj()); + if (pPrePara && pPrePara->GetBelowSpacing()!=0) + { + pOverStyle = new XFParaStyle; + *pOverStyle = *GetXFParaStyle(); + XFMargins* pMargin = &pOverStyle->GetMargins(); + pMargin->SetTop(pMargin->GetTop()+pPrePara->GetBelowSpacing()); + if (m_ParentStyleName.getLength()) + pOverStyle->SetParentStyleName(m_ParentStyleName); //Add by 2005/12/12 + m_StyleName = pXFStyleManager->AddStyle(pOverStyle)->GetStyleName(); + } + } + + //register tab style + if(m_Fribs.HasFrib(FRIB_TAG_TAB)) + { + XFParaStyle* pParaStyle = new XFParaStyle; + *pParaStyle = *GetXFParaStyle(); + //pOverStyle->SetStyleName(A2OUSTR("")); + this->RegisterTabStyle(pParaStyle); + if (m_ParentStyleName.getLength()) + pParaStyle->SetParentStyleName(m_ParentStyleName); //Add by 2005/12/12 + m_StyleName = pXFStyleManager->AddStyle(pParaStyle)->GetStyleName(); + } + + //register master page; + RegisterMasterPage(GetXFParaStyle()); + + // reg auto style,lay here for pagebreak need overrided para style + m_Fribs.SetPara(this); + m_Fribs.RegisterStyle(); + + if (m_bHasDropcap == sal_True) + { + GatherDropcapInfo(); + XFParaStyle* pStyle = new XFParaStyle; + *pStyle = *GetXFParaStyle(); + pStyle->SetDropCap(m_nChars-1,m_nLines); + if (m_ParentStyleName.getLength()) + pStyle->SetParentStyleName(m_ParentStyleName); //Add by 2005/12/12 + m_StyleName = pXFStyleManager->AddStyle(pStyle)->GetStyleName(); + } + // maybe useful for futer version + // deleted because Leader of Table is not supported in this version + //AddTabStyleForTOC(); +} + +void LwpPara::RegisterNewSectionStyle(LwpPageLayout *pLayout) +{ + if( !pLayout ) + return; + + XFSectionStyle* pSectStyle= new XFSectionStyle(); + XFColumns* pColumns = pLayout->GetXFColumns(); + if(pColumns) + { + pSectStyle->SetColumns(pColumns); + } + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_SectionStyleName = pXFStyleManager->AddStyle(pSectStyle)->GetStyleName(); +} + +XFSection* LwpPara::CreateXFSection() +{ + XFSection* pXFSection = new XFSection(); + pXFSection->SetStyleName(m_SectionStyleName); + m_SectionStyleName = A2OUSTR(""); + return pXFSection; +} + +/************************************************************************** + * @descr: register tab style + * @param: + * @param: + * @return: +**************************************************************************/ +void LwpPara::RegisterTabStyle(XFParaStyle* pXFParaStyle) +{ + LwpTabOverride aFinaOverride; + LwpTabOverride* pBase = NULL; + //get the tabrack from the current layout + LwpStory* pStory = static_cast<LwpStory*>(m_Story.obj()); + LwpMiddleLayout* pLayout = pStory->GetTabLayout(); + if(pLayout) + { + pBase = pLayout->GetTabOverride(); + if(pBase) + { + pBase->Override(&aFinaOverride); + } + } + + //get the tabrack from the base parastyle + LwpParaStyle* pParaStyle = GetParaStyle(); + pBase = pParaStyle->GetTabOverride(); + if(pBase) + { + pBase->Override(&aFinaOverride); + } + //get the tabrack from the local property + pBase = GetLocalTabOverride(); + if(pBase) + { + pBase->Override(&aFinaOverride); + } + + LwpParaStyle::ApplyTab(pXFParaStyle, &aFinaOverride); +} +/** + * @short parse dropcap text + */ +void LwpPara::ParseDropcapContent() +{ + if (!GetFoundry()) + return; + XFParagraph* pDropcap = GetFoundry()->GetDropcapMgr()->GetXFPara(); + if (pDropcap) + { + m_Fribs.SetXFPara(pDropcap); + m_Fribs.XFConvert(); + } +} +/** + * @short add paragraph break attribute + */ +void LwpPara::AddBreakBefore(XFContentContainer* pCont) +{ + if (!m_pBreaks) + return; + if (m_pBreaks->IsPageBreakBefore()) + { + XFParagraph *pPara = new XFParagraph(); + pPara->SetStyleName(m_BefPageBreakName); + pCont->Add(pPara); + } + else if (m_pBreaks->IsColumnBreakBefore()) + { + XFParagraph *pPara = new XFParagraph(); + pPara->SetStyleName(m_BefColumnBreakName); + pCont->Add(pPara); + } +} + +void LwpPara::AddBreakAfter(XFContentContainer* pCont) +{ + if (!m_pBreaks) + return; + if (m_pBreaks->IsPageBreakAfter()) + { + XFParagraph *pPara = new XFParagraph(); + pPara->SetStyleName(m_AftPageBreakName); + pCont->Add(pPara); + } + else if (m_pBreaks->IsColumnBreakAfter()) + { + XFParagraph *pPara = new XFParagraph(); + pPara->SetStyleName(m_AftColumnBreakName); + pCont->Add(pPara); + } +} + +LwpVirtualLayout* LwpPara::GetLayoutWithMyStory() +{ + LwpStory* pMyStory = NULL; + if (!m_Story.IsNull()) + { + pMyStory = static_cast<LwpStory*>(m_Story.obj(VO_STORY)); + if (!pMyStory) + { + return NULL; + } + + return pMyStory->GetLayout(NULL); + } + + return NULL; +} + +LwpBulletStyleMgr* LwpPara::GetBulletStyleMgr() +{ + if (m_pFoundry) + { + return m_pFoundry->GetBulletStyleMgr(); + } + + return NULL; +} + +XFContentContainer* LwpPara::AddBulletList(XFContentContainer* pCont) +{ + LwpBulletStyleMgr* pBulletStyleMgr = this->GetBulletStyleMgr(); + if (!pBulletStyleMgr) + { + assert(false); + return NULL; + } + + sal_uInt16 nLevel = m_nLevel; + sal_Bool bOrdered = sal_False; + LwpStory* pMyStory = this->GetStory(); + + pBulletStyleMgr->SetContinueFlag(m_bBullContinue); +#if 0 + if (m_pSilverBullet->IsBulletOrdered()) + { + LwpObjectID aSilverBulletID = pBulletStyleMgr->GetCurrentSilverBullet(); + if (aSilverBulletID.IsNull()) + { + pBulletStyleMgr->SetContinueFlag(sal_False); + } + else if (pMyStory && pMyStory->IsBullStyleUsedBefore(m_aBulletStyleName, this->m_aParaNumbering.GetPosition())) + { + pBulletStyleMgr->SetContinueFlag(sal_True); + } +/* else if (aSilverBulletID == *(m_pSilverBullet->GetObjectID())) + { + LwpNumberingOverride* pNumOver = pBulletStyleMgr->GetCurrentNumOver(); + if (!pNumOver) + { + pBulletStyleMgr->SetContinueFlag(sal_False); + } + else if (m_aParaNumbering.GetPosition() == pNumOver->GetPosition()) + { + pBulletStyleMgr->SetContinueFlag(sal_True); + } + } + else + { + pBulletStyleMgr->SetContinueFlag(sal_False); + } +*/ + pBulletStyleMgr->SetCurrentNumOver(m_aParaNumbering); + pBulletStyleMgr->SetCurrentSilverBullet(*(m_pSilverBullet->GetObjectID())); + } +#endif + + if (m_pSilverBullet->IsBulletOrdered()) + { + bOrdered = sal_True; + } + if (m_pSilverBullet->HasName()) + { +// nLevel = m_pParaNumbering->GetPosition(); + nLevel = m_aParaNumbering.GetPosition(); + m_nLevel = nLevel;//add by ,for get para level +// m_aBulletStyleName = m_pSilverBullet->GetBulletStyleName(); + } + + return ( pBulletStyleMgr->AddBulletList(pCont, bOrdered, m_aBulletStyleName, + nLevel, m_pBullOver->IsSkip()) ); +} + +LwpNumberingOverride* LwpPara::GetParaNumbering() +{ + return &m_aParaNumbering; +#if 0 + LwpNumberingOverride* pNumbering = NULL; + LwpParaStyle* pStyle = this->GetParaStyle(); + if (pStyle) + { + pNumbering = pStyle->GetNumberingOverride(); + } + + if (pNumbering) + { +/* if (m_pParaNumbering) + { + m_pParaNumbering->Override(pNumbering); + }*/ + m_aParaNumbering.Override(pNumbering); + return pNumbering; + } + else + { +// return m_pParaNumbering; + return &m_aParaNumbering; + } +#endif +} + +void LwpForked3NotifyList::Read(LwpObjectStream* pObjStrm) +{ + m_PersistentList.Read(pObjStrm); +} + +void LwpNotifyListPersistent::Read(LwpObjectStream* pObjStrm) +{ + m_Head.ReadIndexed(pObjStrm); + pObjStrm->SkipExtra(); +} + +void LwpPara::Release() +{} diff --git a/lotuswordpro/source/filter/lwppara.hxx b/lotuswordpro/source/filter/lwppara.hxx new file mode 100644 index 000000000000..e6710d32807d --- /dev/null +++ b/lotuswordpro/source/filter/lwppara.hxx @@ -0,0 +1,423 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * LwpPara: Word Pro object for paragraph + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + + +#ifndef _LWPPARAGRAPH_HXX_ +#define _LWPPARAGRAPH_HXX_ +#include "lwpfribheader.hxx" +#include "lwpobj.hxx" +#include "lwpobjstrm.hxx" + +#include <vector> +#include "lwpheader.hxx" +#include "lwpdlvlist.hxx" +#include "lwpbasetype.hxx" +#include "lwpoverride.hxx" +#include "lwpfoundry.hxx" +#include "lwplayout.hxx" +#include "lwpfrib.hxx" +#include "lwpfribptr.hxx" +#include "lwpfribtext.hxx" +#include "xfilter/xfparagraph.hxx" +#include "xfilter/xfdefs.hxx" +#include "xfilter/xfparastyle.hxx" +#include "xfilter/xfsection.hxx" + +class LwpParaProperty; +class LwpPara; +class LwpBreaksOverride; +class LwpBulletStyleMgr; +class LwpNotifyListPersistent +{ +public: + LwpNotifyListPersistent(){}; + void Read(LwpObjectStream* pObjStrm); +protected: + LwpObjectID m_Head; +}; + +class LwpForked3NotifyList +{ +public: + LwpForked3NotifyList(){}; +protected: + LwpNotifyListPersistent m_ExtraList; + LwpNotifyListPersistent m_PersistentList; +public: + LwpNotifyListPersistent* GetExtraList(){return &m_ExtraList;} + void Read(LwpObjectStream* pObjStrm); +}; + +class LwpParaStyle; +class LwpTabOverride; +class LwpNumberingOverride; +class LwpSilverBullet; +class LwpPageLayout; + +struct ParaNumbering +{ + LwpFribText* pPrefix; + LwpFribParaNumber* pParaNumber; + LwpFribText* pSuffix; + + sal_uInt16 nPrefixLevel;//hidelevels of prefix text frib + sal_uInt16 nNumLevel;//hidelevels of paranumber frib + sal_uInt16 nSuffixLevel;//hidelevels of suffix text frib + + ParaNumbering() + { + clear(); + } + + void clear() + { + pPrefix = NULL; + pParaNumber = NULL; + pSuffix = NULL; + nPrefixLevel = 0; + nNumLevel = 0; + nSuffixLevel = 0; + } +}; + +class LwpDropcapLayout; +class LwpCellLayout; +class LwpPara : public LwpDLVList +{ +public: + LwpPara(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + ~LwpPara(); +public: + void Read(); + void RegisterStyle(); + void Parse(IXFStream* pOutputStream); + void XFConvert(XFContentContainer* pCont); + void Release(); + + LwpPara* GetParent(); + LwpObjectID* GetStoryID(); + LwpStory* GetStory(); + LwpBreaksOverride* GetBreaks(); + + LwpParaStyle* GetParaStyle(); + XFParaStyle* GetXFParaStyle(); + LwpIndentOverride* GetIndent(); + LwpTabOverride* GetLocalTabOverride(); + LwpNumberingOverride* GetParaNumbering(); + + inline LwpSilverBullet* GetSilverBullet(); + inline LwpObjectID GetSilverBulletID(); + rtl::OUString GetBulletChar() const; + sal_uInt32 GetBulletFontID() const; + sal_uInt16 GetLevel() const; + sal_Bool GetBulletFlag() const; + + void GetParaNumber(sal_uInt16 nPosition, ParaNumbering* pParaNumbering); + LwpFribPtr* GetFribs(); + double GetBelowSpacing(); + LwpParaProperty* GetProperty(sal_uInt32 nPropType); + void GatherDropcapInfo(); + rtl::OUString GetBulletStyleName() const; + void SetBelowSpacing(double value); + void SetBulletStyleName(const rtl::OUString& rNewName); + void SetBulletFlag(sal_Bool bFlag); + void SetIndent(LwpIndentOverride* pIndentOverride); + void SetFirstFrib(rtl::OUString Content,sal_uInt32 FontID); + OUString GetContentText(sal_Bool bAllText = sal_False); + + void SetParaDropcap(sal_Bool bFlag); + void SetDropcapLines(sal_uInt16 number); + void SetDropcapChars(sal_uInt32 chars); + void SetDropcapLayout(LwpDropcapLayout* pLayout); + sal_Bool IsHasDropcap(); + + XFContentContainer* GetXFContainer(); + void AddXFContent(XFContent* pCont); + void SetXFContainer(XFContentContainer* pCont); + void FindLayouts();// for register pagelayout, add by , 02/20/2005 + void RegisterTabStyle(XFParaStyle* pXFParaStyle); + + // add by 04/13/2005 + LwpVirtualLayout* GetLayoutWithMyStory(); + LwpBulletStyleMgr* GetBulletStyleMgr(); + sal_uInt32 GetOrdinal(){ return m_nOrdinal;}; + sal_Bool operator <(LwpPara& Other); + sal_Bool ComparePagePosition(LwpVirtualLayout* pPreLayout, LwpVirtualLayout* pNextLayout); +// rtl::OUString RegisterBulletStyle(); + // end add + + sal_Bool IsNumberRight(); + sal_Bool IsInCell(); + + void SetAllText(OUString sText); + OUString GetStyleName(){return m_StyleName;} + +protected: + sal_uInt32 m_nOrdinal; // Ordinal number of this paragraph + LwpObjectID m_ParaStyle; // handle of paragraph style + LwpPoint m_Hint; // Paragraph hint - width & height + LwpObjectID m_Story; // Story the paragraph is part of + + sal_uInt16 m_nFlags; + sal_uInt16 m_nLevel; + LwpFribPtr m_Fribs; + LwpParaProperty* m_pProps; + //LwpForked3NotifyList* m_NotifyList; //not saved + + rtl::OUString m_StyleName; + rtl::OUString m_ParentStyleName;//Add by ,to support toc,2005/12/13 + LwpBreaksOverride* m_pBreaks; + rtl::OUString m_AftPageBreakName; + rtl::OUString m_BefPageBreakName; + rtl::OUString m_AftColumnBreakName; + + rtl::OUString m_BefColumnBreakName; + LwpIndentOverride* m_pIndentOverride; + rtl::OUString m_Content;//for silver bullet,get text of first frib, add by 2/1 + sal_uInt32 m_FontID;//for silver bullet, add by 2/1 + rtl::OUString m_AllText;//get all text in this paragraph + + //add by + sal_Bool m_bHasBullet; + LwpObjectID m_aSilverBulletID; + LwpSilverBullet* m_pSilverBullet; + LwpBulletOverride* m_pBullOver; +// LwpNumberingOverride* m_pParaNumbering; + LwpNumberingOverride m_aParaNumbering; + rtl::OUString m_aBulletStyleName; + sal_Bool m_bBullContinue; + //end add + + OUString m_SectionStyleName; + sal_Bool m_bHasDropcap; + sal_uInt16 m_nLines; + sal_uInt32 m_nChars; + LwpDropcapLayout* m_pDropcapLayout; + double m_BelowSpacing; + + XFContentContainer* m_pXFContainer; //Current container for VO_PARA + + rtl::OUString m_TabStyleName; + enum + { + /* bit definitions for the paragraph object flags */ + DEMAND_LOAD = 0x0001, // need to demand load this para + DATA_DIRTY = 0x0002, // paragraph data is dirty + SPELLSTARTOVER = 0x0004, // need to recheck paragraph + SPELLDIRTY = 0x0008, // has misspelled word in para + SPELLCHECKING = 0x0010, // started checking paragraph + READING = 0x0020, // We're loading this para from disk + DISKCHANGED = 0x0040, // Read size different from write size + USEFLOWBREAKS = 0x0080, // Use line breaks provided by filter + VALID_LEVEL = 0x0100, // cLevel is valid + NOUSECOUNT = 0x0200, // Don't change the style's use count + CHANGED = 0x0400, // This para has been edited + SPREADBULLET = 0x0800, // Para's bullet is in edit-on-page mode + NEWBULLET = 0x1000, // Bullets should have new font behavior + + // Don't write these flags out to disk + NOWRITEFLAGS = (READING | DISKCHANGED | CHANGED), + + MAX_INDENT_LEVELS = 10 + }; +private: + void OverrideAlignment(LwpAlignmentOverride* base,LwpAlignmentOverride* over,XFParaStyle* pOverStyle);//add by 1-24 + void OverrideIndent(LwpIndentOverride* base,LwpIndentOverride* over,XFParaStyle* pOverStyle); + void OverrideSpacing(LwpSpacingOverride* base,LwpSpacingOverride* over,XFParaStyle* pOverStyle); + void OverrideParaBorder(LwpParaProperty* pProps, XFParaStyle* pOverStyle); + void OverrideParaBreaks(LwpParaProperty* pProps, XFParaStyle* pOverStyle); + + void OverrideParaBullet(LwpParaProperty* pProps); + void OverrideParaNumbering(LwpParaProperty* pProps); + void OverrideTab(LwpTabOverride* base,LwpTabOverride* over,XFParaStyle* pOverStyle); + BOOL IsBadHintsInFile(); + + //void OutPutSectionTail(IXFStream* pOutputStream); + //void OutPutBulletTail(LwpBulletStyleMgr* pBulletStyleMgr,IXFStream* pOutputStream); + + sal_Bool RegisterMasterPage(XFParaStyle* pBaseStyle); + void RegisterNewSectionStyle(LwpPageLayout* pLayout); + + void ParseDropcapContent(); + XFContentContainer* AddBulletList(XFContentContainer* pCont); + void AddBreakAfter(XFContentContainer* pCont); + void AddBreakBefore(XFContentContainer* pCont); + XFSection* CreateXFSection(); + + /* + sal_Bool IsNeedTabForTOC(); + void AddTabStyleForTOC(); + void AddTabStopForTOC(); + maybe useful for futer version */ +}; + +inline LwpSilverBullet* LwpPara::GetSilverBullet() +{ + return m_pSilverBullet; +} +inline LwpObjectID LwpPara::GetSilverBulletID() +{ + return m_aSilverBulletID; +} +inline rtl::OUString LwpPara::GetBulletChar() const +{ + return m_Content; +} +inline sal_uInt32 LwpPara::GetBulletFontID() const +{ + return m_FontID; +} +inline sal_uInt16 LwpPara::GetLevel() const +{ + return m_nLevel; +} +inline void LwpPara::SetBulletStyleName(const rtl::OUString& rNewName) +{ + m_aBulletStyleName = rNewName; +} +inline void LwpPara::SetBulletFlag(sal_Bool bFlag) +{ + m_bHasBullet = bFlag; +} +inline sal_Bool LwpPara::GetBulletFlag() const +{ + return m_bHasBullet; +} +inline LwpFribPtr* LwpPara::GetFribs() +{ + return &m_Fribs; +} +inline LwpBreaksOverride* LwpPara::GetBreaks() +{ + return m_pBreaks; +} +inline XFContentContainer* LwpPara::GetXFContainer() +{ + return m_pXFContainer; +} +inline rtl::OUString LwpPara::GetBulletStyleName() const +{ + return m_aBulletStyleName; +} +inline void LwpPara::AddXFContent(XFContent* pCont) +{ + m_pXFContainer->Add(pCont); +} +inline void LwpPara::SetXFContainer(XFContentContainer* pCont) +{ + m_pXFContainer = pCont; +} +inline LwpIndentOverride* LwpPara::GetIndent() +{ + return m_pIndentOverride; +} +inline void LwpPara::SetIndent(LwpIndentOverride* pIndentOverride) +{ + if (m_pIndentOverride) + delete m_pIndentOverride; + m_pIndentOverride = pIndentOverride; +} +inline LwpObjectID* LwpPara::GetStoryID() +{ + return &m_Story; +} +inline LwpStory* LwpPara::GetStory() +{ + if (m_Story.obj()) + return static_cast<LwpStory*>(m_Story.obj()); + return NULL; +} + +inline sal_Bool LwpPara::IsHasDropcap() +{ + return m_bHasDropcap; +} +inline void LwpPara::SetParaDropcap(sal_Bool bFlag) +{ + m_bHasDropcap = bFlag; +} +inline void LwpPara::SetDropcapLines(sal_uInt16 number) +{ + m_nLines = number; +} +inline void LwpPara::SetDropcapChars(sal_uInt32 chars) +{ + m_nChars = chars; +} +inline void LwpPara::SetDropcapLayout(LwpDropcapLayout* pLayout) +{ + m_pDropcapLayout = pLayout; +} +inline BOOL LwpPara::IsBadHintsInFile() +{ + return (BOOL) ((m_nFlags & DOC_BADFILEPARAHINTS) != 0); +} +inline double LwpPara::GetBelowSpacing() +{ + return m_BelowSpacing; +} +inline void LwpPara::SetBelowSpacing(double value) +{ + m_BelowSpacing = value; +} +#endif diff --git a/lotuswordpro/source/filter/lwppara1.cxx b/lotuswordpro/source/filter/lwppara1.cxx new file mode 100644 index 000000000000..e2dd7145d133 --- /dev/null +++ b/lotuswordpro/source/filter/lwppara1.cxx @@ -0,0 +1,730 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwppara.hxx" +#include "lwpglobalmgr.hxx" +#include "lwpfilehdr.hxx" +#include "lwpparaproperty.hxx" +#include "lwptools.hxx" +#include "lwpparastyle.hxx" +#include "xfilter/xffont.hxx" +#include "xfilter/xftextstyle.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xfparagraph.hxx" +#include "xfilter/xftextcontent.hxx" +#include "xfilter/xftextspan.hxx" +#include "xfilter/xfmargins.hxx" +#include "xfilter/xftabstop.hxx" +#include "xfilter/xflinebreak.hxx" +#include "xfilter/xfsection.hxx" +#include "xfilter/xfsectionstyle.hxx" +#include "xfilter/xfcolor.hxx" +#include "xfilter/xfhyperlink.hxx" +#include "lwpcharsetmgr.hxx" +#include "lwpsection.hxx" +#include "lwplayout.hxx" +#include "lwpusewhen.hxx" + +#include "lwpbulletstylemgr.hxx" +#include "lwpstory.hxx" +#include "lwpsilverbullet.hxx" +#include "xfilter/xflist.hxx" +#include "xfilter/xfframe.hxx" + +#include "lwpdivinfo.hxx" +#include "lwpdoc.hxx" +#include "lwpholder.hxx" +#include "lwppagehint.hxx" + +#include "lwpdropcapmgr.hxx" +#include "lwptable.hxx" +#include "lwpcelllayout.hxx" +/** + * @short get text of paragraph + */ +OUString LwpPara::GetContentText(sal_Bool bAllText) +{ +// rFont = m_FontID; + if (bAllText) + { + m_Fribs.SetPara(this); + m_Fribs.GatherAllText(); + return m_AllText; + } + else + return m_Content; +} + +/** + * @short set text of paragraph + */ +void LwpPara::SetAllText(OUString sText) +{ + m_AllText+=sText; +} + +/** + * @short set first frib content + */ +void LwpPara::SetFirstFrib(rtl::OUString Content,sal_uInt32 FontID) +{ + m_FontID= FontID; + m_Content=Content; +} +/** + * @short get paragraph xfstyle + */ +XFParaStyle* LwpPara::GetXFParaStyle() +{ + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + return pXFStyleManager->FindParaStyle(m_StyleName); +} +/** + * @short get drop cap info + */ +#include "lwpframelayout.hxx" +void LwpPara::GatherDropcapInfo() +{ + SetDropcapLines(m_pDropcapLayout->GetLines()); + SetDropcapChars(m_pDropcapLayout->GetChars()); +} +/** + * @short get parent paragraph + */ +LwpPara* LwpPara::GetParent() +{ + LwpPara* pPara; + sal_uInt16 otherlevel; + sal_uInt16 level = GetLevel(); + + if (level != 1) + { + pPara = static_cast<LwpPara*>(GetPrevious()->obj()); + while (pPara) + { + otherlevel = pPara->GetLevel(); + if ((otherlevel < level) || (otherlevel && (level == 0))) + return pPara; + pPara = static_cast<LwpPara*>(pPara->GetPrevious()->obj()); + } + } + return NULL; +} + +/** + * @short: Offer prefix, paranumber and suffix according to position. + * @param: nPosition index of wanted paranumbering in the style-list. + * @param: pParaNumbering a pointer to the structure which contains prefix, paranumber and + * suffix. + */ +void LwpPara::GetParaNumber(sal_uInt16 nPosition, ParaNumbering* pParaNumbering) +{ + if (nPosition > 9) + { + return; + } + sal_uInt16 nCurrentPos = 0; + + LwpFrib* pPreFrib = NULL; + LwpFrib* pFrib = m_Fribs.GetFribs(); + if (!pFrib) + { + return; + } + + while (pFrib) + { + sal_uInt8 nFribType = pFrib->GetType(); + if (nFribType == FRIB_TAG_PARANUMBER) + { + nCurrentPos++; + ModifierInfo* pModInfo = pFrib->GetModifiers(); + if (pModInfo) + { + sal_uInt16 nHideLevels = pModInfo->aTxtAttrOverride.GetHideLevels(); + if (nCurrentPos == nPosition) + { + //get prefix text frib + if (pPreFrib) + { + if ((pPreFrib->GetType() == FRIB_TAG_TEXT) && + (pPreFrib->GetModifiers()->aTxtAttrOverride.GetHideLevels() == nHideLevels)) + { + pParaNumbering->pPrefix = static_cast<LwpFribText*>(pPreFrib); + } + } + + //get para numbering + pParaNumbering->pParaNumber = static_cast<LwpFribParaNumber*>(pFrib); + pParaNumbering->nNumLevel = nHideLevels; + + //get suffix text frib + if (pFrib = pFrib->GetNext()) + { +// if((pFrib->GetType() == FRIB_TAG_TEXT) && +// (pFrib->GetModifiers()->aTxtAttrOverride.GetHideLevels() == nHideLevels)) + if( pFrib->GetType() == FRIB_TAG_TEXT ) + { + if ((pFrib->GetNext()->GetType() == FRIB_TAG_TEXT ) || + (pFrib->GetModifiers()->aTxtAttrOverride.GetHideLevels() == nHideLevels)) + { + pParaNumbering->pSuffix = static_cast<LwpFribText*>(pFrib); + } + } + } + + break; + } + } + else + { + if (nCurrentPos == nPosition) + { + //get prefix text frib + if (pPreFrib) + { + if (pPreFrib->GetType() == FRIB_TAG_TEXT) + { + pParaNumbering->pPrefix = static_cast<LwpFribText*>(pPreFrib); + } + } + + //get para numbering + pParaNumbering->pParaNumber = static_cast<LwpFribParaNumber*>(pFrib); + + //get suffix text frib + if (pFrib = pFrib->GetNext()) + { + if (pFrib->GetType() == FRIB_TAG_TEXT) + { + pParaNumbering->pSuffix = static_cast<LwpFribText*>(pFrib); + } + } + + } + } + } + pPreFrib = pFrib; + if (pFrib) + { + pFrib = pFrib->GetNext(); + } + } +} +/** + * @short override alignment + */ +//override style, add by 1-24 +void LwpPara::OverrideAlignment(LwpAlignmentOverride* base,LwpAlignmentOverride* over,XFParaStyle* pOverStyle) +{ + if (base)//the latter two parameter never be null + { + over->Override(base); + LwpParaStyle::ApplyAlignment(pOverStyle,base); + } + else + LwpParaStyle::ApplyAlignment(pOverStyle,over); +} +/** + * @short override indent attribute + */ +void LwpPara::OverrideIndent(LwpIndentOverride* base,LwpIndentOverride* over,XFParaStyle* pOverStyle) +{ + if (base)//the latter two parameter never be null + { + over->Override(base); + LwpParaStyle::ApplyIndent(this,pOverStyle,base); + } + else + { + LwpParaStyle::ApplyIndent(this,pOverStyle,over); + } +} +/** + * @short override spacing + */ +void LwpPara::OverrideSpacing(LwpSpacingOverride* base,LwpSpacingOverride* over,XFParaStyle* pOverStyle) +{ + if (base)//the latter two parameter never be null + { + over->Override(base); + LwpParaStyle::ApplySpacing(this,pOverStyle,base); + } + else + LwpParaStyle::ApplySpacing(this,pOverStyle,over); +} + +//add by , 01/25/2005 +/** + * @short: Get parastyle object according to the objID. + * @return: pointer to the parastyle. + */ +LwpParaStyle* LwpPara::GetParaStyle() +{ + return static_cast<LwpParaStyle*>(m_ParaStyle.obj(VO_PARASTYLE)); +} + +/** + * @short: Override paraborder style. + * @param: pProps pointer to the LwpParaProperty and we can get local breaks through it. + * @param: pOverStyle pointer to XFParaStyle which contains the parastyle for XFilter. + */ +void LwpPara::OverrideParaBorder(LwpParaProperty* pProps, XFParaStyle* pOverStyle) +{ + // get paraborder in parastyle + LwpParaStyle* pParaStyle = this->GetParaStyle(); + if (!pParaStyle) + { + return; + } + + LwpOverride* pBorder = pParaStyle->GetParaBorder(); + LwpParaBorderOverride aFinalBorder; + if (pBorder) + { + aFinalBorder = *pBorder; + } + + // get local border + pBorder = static_cast<LwpParaBorderProperty*>(pProps)->GetLocalParaBorder(); + if (pBorder) + { + LwpParaBorderOverride aLocalBorder; + aLocalBorder = *pBorder; + aLocalBorder.Override(&aFinalBorder); + } + + pParaStyle->ApplyParaBorder(pOverStyle, &aFinalBorder); +} +/** + * @short: Override parabreaks style. + * @param: pProps pointer to the LwpParaProperty and we can get local breaks through it. + * @param: pOverStyle pointer to XFParaStyle which contains the parastyle for XFilter. + */ +void LwpPara::OverrideParaBreaks(LwpParaProperty* pProps, XFParaStyle* pOverStyle) +{ + // get breaks in parastyle + LwpParaStyle* pParaStyle = this->GetParaStyle(); + if (!pParaStyle) + { + return; + } + + LwpOverride* pBreaks = pParaStyle->GetBreaks(); + LwpBreaksOverride* pFinalBreaks = new LwpBreaksOverride(); + if (pBreaks) + { + *pFinalBreaks = *pBreaks; + } + + // get local breaks + pBreaks = static_cast<LwpParaBreaksProperty*>(pProps)->GetLocalParaBreaks(); + if (pBreaks) + { + LwpBreaksOverride aLocalBreaks; + aLocalBreaks = *pBreaks; + aLocalBreaks.Override(pFinalBreaks); + } + + // save the breaks + m_pBreaks = pFinalBreaks; + +//add by 1/31 + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + if (m_pBreaks->IsKeepWithNext()) + { + pOverStyle->SetBreaks(enumXFBreakKeepWithNext); + } + if (m_pBreaks->IsPageBreakBefore()) + { + XFParaStyle* pStyle = new XFParaStyle(); + pStyle->SetBreaks(enumXFBreakAftPage); + m_BefPageBreakName = pXFStyleManager->AddStyle(pStyle)->GetStyleName(); + } + if (m_pBreaks->IsPageBreakAfter()) + { + XFParaStyle* pStyle = new XFParaStyle(); + pStyle->SetBreaks(enumXFBreakAftPage); + m_AftPageBreakName = pXFStyleManager->AddStyle(pStyle)->GetStyleName(); + } + if (m_pBreaks->IsColumnBreakBefore()) + { + XFParaStyle* pStyle = new XFParaStyle(); + pStyle->SetBreaks(enumXFBreakAftColumn);//tmp after, should change when layout read,note by 1/31 + m_BefColumnBreakName = pXFStyleManager->AddStyle(pStyle)->GetStyleName(); + } + if (m_pBreaks->IsColumnBreakAfter()) + { + XFParaStyle* pStyle = new XFParaStyle(); + pStyle->SetBreaks(enumXFBreakAftColumn); + m_AftColumnBreakName = pXFStyleManager->AddStyle(pStyle)->GetStyleName(); + } +//add end + +// pParaStyle->ApplyBreaks(pOverStyle, &aFinalBreaks); +} + +/** + * @short: Override bullet styles. + * @param: pProps pointer to the LwpParaProperty and we can get local bullet through it. + */ +void LwpPara::OverrideParaBullet(LwpParaProperty* pProps) +{ + // get bulletoverride in parastyle + LwpParaStyle* pParaStyle = this->GetParaStyle(); + if (!pParaStyle) + { + return; + } + + if (pProps) + { + m_pBullOver = new LwpBulletOverride(); + // get local bulletoverride + LwpBulletOverride* pLocalBullet = static_cast<LwpParaBulletProperty*>(pProps)->GetLocalParaBullet(); + if (!pLocalBullet) + { + return; + } + + LwpObjectID aSilverBulletID = pLocalBullet->GetSilverBullet(); + if (aSilverBulletID.IsNull()) + { + return; + } + else + { + m_bHasBullet = sal_True; + + LwpOverride* pBullet= pParaStyle->GetBulletOverride(); + LwpBulletOverride aFinalBullet; + if (pBullet) + { + aFinalBullet = *pBullet; + } + + LwpBulletOverride aLocalBullet; + aLocalBullet = *pLocalBullet; + aLocalBullet.Override(&aFinalBullet); + + *m_pBullOver = aFinalBullet; + aSilverBulletID = aFinalBullet.GetSilverBullet(); + if (!aSilverBulletID.IsNull()) + { + m_pSilverBullet = static_cast<LwpSilverBullet*>(aSilverBulletID.obj(VO_SILVERBULLET)); + m_pSilverBullet->SetFoundry(m_pFoundry); + } + + m_aSilverBulletID = aSilverBulletID; + } + } + else + { +// m_pBullOver = pParaStyle->GetBulletOverride(); + LwpBulletOverride* pBullOver = pParaStyle->GetBulletOverride(); + if (pBullOver) + { + m_aSilverBulletID = pBullOver->GetSilverBullet(); + if (!m_aSilverBulletID.IsNull()) + { + m_bHasBullet = sal_True; + + m_pSilverBullet = static_cast<LwpSilverBullet*>(m_aSilverBulletID.obj(VO_SILVERBULLET)); + m_pSilverBullet->SetFoundry(m_pFoundry); + } + + m_pBullOver = new LwpBulletOverride(); + *m_pBullOver = *pBullOver; + } + } +} +/** + * @short: Override paranumbering properties. + * @param: pProps pointer to the LwpParaProperty and we can get local paranumbering through it. + */ +void LwpPara::OverrideParaNumbering(LwpParaProperty* pProps) +{ + // get numbering override in parastyle + LwpParaStyle* pParaStyle = this->GetParaStyle(); + if (!pParaStyle) + { + return; + } + + LwpNumberingOverride* pParaNumbering = pParaStyle->GetNumberingOverride(); + LwpNumberingOverride aOver; + //Override with the local numbering, if any + if (pProps) + { + LwpNumberingOverride* pPropNumbering = static_cast<LwpParaNumberingProperty*>(pProps)->GetLocalNumbering(); + if (pPropNumbering) + { + aOver = *pPropNumbering; + } + } + else + { + if (pParaNumbering) + { + aOver = *pParaNumbering; + } + } + + if (m_nFlags & VALID_LEVEL) + { + aOver.OverrideLevel(m_nLevel); + } + + m_aParaNumbering = aOver; + +} + +/************************************************************************** + * @short: + * @descr: + * @param: + * @param: + * @return: +**************************************************************************/ +void LwpPara::OverrideTab(LwpTabOverride *base, LwpTabOverride *over, XFParaStyle *pOverStyle) +{ + if (base) + { + over->Override(base); + LwpParaStyle::ApplyTab(pOverStyle,base); + } + else + LwpParaStyle::ApplyTab(pOverStyle,over); +} + +void LwpPara::FindLayouts() +{ + m_Fribs.SetPara(this); + m_Fribs.FindLayouts(); + LwpPara* pNextPara = static_cast<LwpPara*>(GetNext()->obj()); + if(pNextPara) + { + pNextPara->FindLayouts(); + } +} + +/************************************************************************** + * @descr: Get property according to the property type + * @param: + * @param: + * @return: +**************************************************************************/ +LwpParaProperty* LwpPara::GetProperty(sal_uInt32 nPropType) +{ + LwpParaProperty* pProps = m_pProps; + while(pProps) + { + if(pProps->GetType() == nPropType) + { + return pProps; + } + pProps = pProps->GetNext(); + + } + return NULL; +} + +/************************************************************************** + * @descr: Get local tab rack + * @param: + * @param: + * @return: +**************************************************************************/ +LwpTabOverride* LwpPara::GetLocalTabOverride() +{ + LwpParaProperty* pProp = GetProperty(PP_LOCAL_TABRACK); + if(pProp) + { + return static_cast<LwpParaTabRackProperty*>(pProp)->GetTab(); + } + return NULL; +} + +/** +* @descr: Determined which para is earlier in position +* +*/ +sal_Bool LwpPara::operator< (LwpPara& Other) +{ + return m_nOrdinal < Other.GetOrdinal(); +} + +/** +* @descr: If the two layouts in the same para, compare which layout is earlied according to frib order +* +*/ +sal_Bool LwpPara::ComparePagePosition(LwpVirtualLayout * pPreLayout, LwpVirtualLayout * pNextLayout) +{ + m_Fribs.SetPara(this); + return m_Fribs.ComparePagePosition(pPreLayout, pNextLayout); +} +/* +sal_Bool LwpPara::IsNeedTabForTOC() +{ + LwpStory* pStory = GetStory(); + if(pStory) + { + if(GetNext()->IsNull()) + { + LwpVirtualLayout* pLayout = pStory->GetLayout(NULL); + if(pLayout && pLayout->IsCell()) + { + LwpCellLayout * pCell = static_cast<LwpCellLayout *>(pStory->GetLayout(NULL)); + if (pCell->GetLeaderChar() == 0) + { + return sal_False; + } + return sal_True; + } + } + } + return sal_False; +} + +void LwpPara::AddTabStyleForTOC( ) +{ + if(IsNeedTabForTOC()) + { + XFParaStyle* pParaStyle = new XFParaStyle; + *pParaStyle = *GetXFParaStyle(); + pParaStyle->ClearTabStyles(); + //Add Tab Style; + enumXFTab eType = enumXFTabRight; + + LwpCellLayout * pCell = static_cast<LwpCellLayout *>(GetStory()->GetLayout(NULL)); + double dLen = pCell->GetActualWidth(); /// todo: get from table + sal_Unicode cLeader = static_cast<sal_Unicode>(pCell->GetLeaderChar()); + pParaStyle->AddTabStyle(eType, dLen, cLeader ); + m_StyleName = XFStyleManager::AddStyle(pParaStyle)->GetStyleName(); + + // Get font info of default text style and set into tab style + XFParaStyle* pBaseStyle = static_cast<XFParaStyle*>(m_pFoundry->GetStyleManager()->GetStyle(*m_pFoundry->GetDefaultTextStyle())); + XFTextStyle*pTextStyle = new XFTextStyle; + pTextStyle->SetFont(pBaseStyle->GetFont()); // who delete this font????? + m_TabStyleName = XFStyleManager::AddStyle(pTextStyle)->GetStyleName(); + } +} + +void LwpPara::AddTabStopForTOC() +{ + if(IsNeedTabForTOC()) + { + XFParagraph* pXFPara = GetFribs()->GetXFPara(); + pXFPara->SetStyleName(m_StyleName); + + XFParaStyle* pParaStyle = static_cast<XFParaStyle*>(XFStyleManager::FindStyle(m_StyleName)); + if(pParaStyle) + { + XFTextSpan *pSpan = new XFTextSpan; + XFTabStop *pTab = new XFTabStop; + pSpan->Add(pTab); + pSpan->SetStyleName(m_TabStyleName); + enumXFAlignType eType = pParaStyle->GetAlighType(); + + if(eType == enumXFAlignStart || eType == enumXFAlignJustify || eType == enumXFAlignNone) + { + pXFPara->Add(pSpan); + } + else if(eType == enumXFAlignEnd) + { + pXFPara->InsertAtBegin(pSpan); + } + else + { + delete pSpan; // pTabl will be delete inside XFTextSpan + } + + } + + } +} +*/ +/** + * @short check paragraph alignment + */ +sal_Bool LwpPara::IsNumberRight() +{ + LwpObject* pObj = m_ParaStyle.obj(); + if (pObj) + { + LwpParaStyle* pStyle = static_cast<LwpParaStyle*>(pObj); + return pStyle->IsNumberRight(); + } + else + return sal_False; +} +/** + * @short check paragraph in cell or not + */ +sal_Bool LwpPara::IsInCell() +{ + LwpVirtualLayout* pLayout = GetStory()->GetLayout(NULL); + if(pLayout && pLayout->IsCell()) + return sal_True; + return sal_False; +} diff --git a/lotuswordpro/source/filter/lwpparaborderoverride.cxx b/lotuswordpro/source/filter/lwpparaborderoverride.cxx new file mode 100644 index 000000000000..377795a81c7d --- /dev/null +++ b/lotuswordpro/source/filter/lwpparaborderoverride.cxx @@ -0,0 +1,394 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* +* @file +* Border override of Wordpro. +************************************************************************/ +/************************************************************************* +* Change History +* 2005-01-11 create and implement. +************************************************************************/ +#include "lwpparaborderoverride.hxx" +#include "lwpborderstuff.hxx" +#include "lwpshadow.hxx" +#include "lwpmargins.hxx" + +LwpParaBorderOverride::LwpParaBorderOverride() +{ + m_pBorderStuff = new LwpBorderStuff(); + m_pBetweenStuff = new LwpBorderStuff(); + m_pShadow = new LwpShadow(); + m_pMargins = new LwpMargins(); + + m_eAboveType = PB_NONE; + m_eBelowType = PB_NONE; + m_eRightType = PB_NONE; + m_eBetweenType = PB_NONE; + + m_nAboveWidth = 0; + m_nBelowWidth = 0; + m_nBetweenWidth = 0; + m_nRightWidth = 0; + + m_nBetweenMargin = 0; +} + +LwpParaBorderOverride::~LwpParaBorderOverride() +{ + if( m_pBorderStuff ) + delete m_pBorderStuff; + if( m_pBetweenStuff ) + delete m_pBetweenStuff; + if( m_pShadow ) + delete m_pShadow; + if( m_pMargins ) + delete m_pMargins; +} + +void LwpParaBorderOverride::Read(LwpObjectStream *pStrm) +{ + if (pStrm->QuickReadBool()) + { + ReadCommon(pStrm); + //start here: + m_pBorderStuff->Read(pStrm); + m_pShadow->Read(pStrm); + m_pMargins->Read(pStrm); + + pStrm->QuickRead(&m_eAboveType,2); + pStrm->QuickRead(&m_eBelowType,2); + pStrm->QuickRead(&m_eRightType,2); + + if( pStrm->CheckExtra() ) + { + m_pBetweenStuff->Read(pStrm); + + pStrm->QuickRead(&m_eBetweenType,2); + pStrm->QuickRead(&m_nBetweenWidth,4 ); + pStrm->QuickRead(&m_nBetweenMargin,4 ); + + if( pStrm->CheckExtra() ) + { + pStrm->QuickRead( &m_eRightType, 2); + pStrm->QuickRead( &m_nRightWidth, 4); + } + } + } + + pStrm->SkipExtra(); +} + +// 01/26/2005 +void LwpParaBorderOverride::operator=(const LwpOverride& rOther) +{ + LwpOverride::operator=(rOther); + const LwpParaBorderOverride* pParaBorder = static_cast<LwpParaBorderOverride*>((LwpOverride*)&rOther); + + if (pParaBorder->m_pBorderStuff) + { + *m_pBorderStuff = *(pParaBorder->m_pBorderStuff); + } + if (pParaBorder->m_pBetweenStuff) + { + *m_pBetweenStuff = *(pParaBorder->m_pBetweenStuff); + } + if (pParaBorder->m_pShadow) + { + *m_pShadow = *(pParaBorder->m_pShadow); + } + if (pParaBorder->m_pMargins) + { + *m_pMargins = *(pParaBorder->m_pMargins); + } + + m_eAboveType = pParaBorder->m_eAboveType; + m_eBelowType = pParaBorder->m_eBelowType; + m_eRightType = pParaBorder->m_eRightType; + m_eBetweenType = pParaBorder->m_eBelowType; + + m_nAboveWidth = pParaBorder->m_nAboveWidth; + m_nBelowWidth = pParaBorder->m_nBelowWidth; + m_nBetweenWidth = pParaBorder->m_nBetweenWidth; + m_nRightWidth = pParaBorder->m_nRightWidth; + + m_nBetweenMargin = pParaBorder->m_nBetweenMargin; +} + +void LwpParaBorderOverride::Override(LwpParaBorderOverride* pOther) +{ + if (m_nApply & PBO_STUFF) + { + if (IsBorderStuffOverridden()) + { + pOther->OverrideBorderStuff(m_pBorderStuff); + } + else + { + pOther->RevertBorderStuff(); + } + } + + if (m_nApply & PBO_BETWEENSTUFF) + { + if (IsBetweenStuffOverridden()) + { + pOther->OverrideBetweenStuff(m_pBetweenStuff); + } + else + { + pOther->RevertBetweenStuff(); + } + } + + if (m_nApply & PBO_SHADOW) + { + if (IsShadowOverridden()) + { + pOther->OverrideShadow(m_pShadow); + } + else + { + pOther->RevertShadow(); + } + } + + if (m_nApply & PBO_MARGINS) + { + if (IsMarginsOverridden()) + { + pOther->OverrideMargins(m_pMargins); + } + else + { + pOther->RevertMargins(); + } + } + + if (m_nApply & PBO_ABOVETYPE) + { + if (IsAboveTypeOverridden()) + { + pOther->OverrideAboveType(m_eAboveType); + } + else + { + pOther->RevertAboveType(); + } + } + + if (m_nApply & PBO_BELOWTYPE) + { + if (IsBelowTypeOverridden()) + { + pOther->OverrideBelowType(m_eBelowType); + } + else + { + pOther->RevertBelowType(); + } + } + + if (m_nApply & PBO_RIGHTTYPE) + { + if (IsRightTypeOverridden()) + { + pOther->OverrideRightType(m_eRightType); + } + else + { + pOther->RevertRightType(); + } + } + + if (m_nApply & PBO_BETWEENTYPE) + { + if (IsBetweenTypeOverridden()) + { + pOther->OverrideBetweenType(m_eBetweenType); + } + else + { + pOther->RevertBetweenType(); + } + } + + if (m_nApply & PBO_ABOVE) + { + if (IsAboveWidthOverridden()) + { + pOther->OverrideAboveWidth(m_nAboveWidth); + } + else + { + pOther->RevertAboveWidth(); + } + } + + if (m_nApply & PBO_BELOW) + { + if (IsBelowWidthOverridden()) + { + pOther->OverrideBelowWidth(m_nBelowWidth); + } + else + { + pOther->RevertBelowWidth(); + } + } + + if (m_nApply & PBO_BETWEEN) + { + if (IsBetweenWidthOverridden()) + { + pOther->OverrideBetweenWidth(m_nBetweenWidth); + } + else + { + pOther->RevertBetweenWidth(); + } + } + + if (m_nApply & PBO_BETWEENMARGIN) + { + if (IsBetweenMarginOverridden()) + { + pOther->OverrideBetweenMargin(m_nBetweenMargin); + } + else + { + pOther->RevertBetweenMargin(); + } + } + + if (m_nApply & PBO_RIGHT) + { + if (IsRightWidthOverridden()) + { + pOther->OverrideRightWidth(m_nRightWidth); + } + else + { + pOther->RevertRightWidth(); + } + } +} + +void LwpParaBorderOverride::OverrideBorderStuff(LwpBorderStuff* pBorderStuff) +{ + *m_pBorderStuff = *pBorderStuff; + LwpOverride::Override(PBO_STUFF, STATE_ON); +} +void LwpParaBorderOverride::OverrideBetweenStuff(LwpBorderStuff* pBorderStuff) +{ + *m_pBetweenStuff = *pBorderStuff; + LwpOverride::Override(PBO_BETWEENSTUFF, STATE_ON); +} +void LwpParaBorderOverride::OverrideShadow(LwpShadow* pShadow) +{ + *m_pShadow = *pShadow; + LwpOverride::Override(PBO_SHADOW, STATE_ON); +} +void LwpParaBorderOverride::OverrideMargins(LwpMargins* pMargins) +{ + *m_pMargins = *pMargins; + LwpOverride::Override(PBO_MARGINS, STATE_ON); +} +void LwpParaBorderOverride::OverrideAboveType(BorderWidthType eNewType) +{ + m_eAboveType = eNewType; + LwpOverride::Override(PBO_ABOVETYPE, STATE_ON); +} +void LwpParaBorderOverride::OverrideBelowType(BorderWidthType eNewType) +{ + m_eBelowType = eNewType; + LwpOverride::Override(PBO_BELOWTYPE, STATE_ON); +} +void LwpParaBorderOverride::OverrideRightType(BorderWidthType eNewType) +{ + m_eRightType = eNewType; + LwpOverride::Override(PBO_RIGHTTYPE, STATE_ON); +} +void LwpParaBorderOverride::OverrideBetweenType(BorderWidthType eNewType) +{ + m_eBetweenType = eNewType; + LwpOverride::Override(PBO_BETWEENTYPE, STATE_ON); +} +void LwpParaBorderOverride::OverrideAboveWidth(sal_uInt32 nNewWidth) +{ + m_nAboveWidth = nNewWidth; + LwpOverride::Override(PBO_ABOVE, STATE_ON); +} +void LwpParaBorderOverride::OverrideBelowWidth(sal_uInt32 nNewWidth) +{ + m_nBelowWidth = nNewWidth; + LwpOverride::Override(PBO_BELOW, STATE_ON); +} +void LwpParaBorderOverride::OverrideBetweenWidth(sal_uInt32 nNewWidth) +{ + m_nBetweenWidth = nNewWidth; + LwpOverride::Override(PBO_BETWEEN, STATE_ON); +} +void LwpParaBorderOverride::OverrideRightWidth(sal_uInt32 nNewWidth) +{ + m_nRightWidth = nNewWidth; + LwpOverride::Override(PBO_RIGHT, STATE_ON); +} +void LwpParaBorderOverride::OverrideBetweenMargin(sal_uInt32 nNewMargin) +{ + m_nBetweenMargin = nNewMargin; + LwpOverride::Override(PBO_BETWEENMARGIN, STATE_ON); +} + +//end diff --git a/lotuswordpro/source/filter/lwpparaborderoverride.hxx b/lotuswordpro/source/filter/lwpparaborderoverride.hxx new file mode 100644 index 000000000000..ffbb8fb74e22 --- /dev/null +++ b/lotuswordpro/source/filter/lwpparaborderoverride.hxx @@ -0,0 +1,284 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* +* @file +* Border override of Wordpro. +************************************************************************/ +/************************************************************************* +* Change History +* 2005-01-11 Create and implement. +************************************************************************/ +#ifndef _LWPPARABORDEROVERRIDE_HXX +#define _LWPPARABORDEROVERRIDE_HXX + +#include "lwpoverride.hxx" + +class LwpBorderStuff; +class LwpShadow; +class LwpMargins; + +class LwpParaBorderOverride : public LwpOverride +{ +public: + LwpParaBorderOverride(); + virtual ~LwpParaBorderOverride(); + + enum BorderWidthType + { + PB_NONE = 0, /* No border */ + PB_TEXTWIDTH = 1, /* Border is width of text */ + PB_MARGINWIDTH = 2, /* Border extends to margins */ + PB_CUSTOMWIDTH = 3 /* Border width is specified explicitly */ + }; +public: + virtual void Read(LwpObjectStream *pStrm); + + LwpShadow* GetShadow(){ return m_pShadow; } + LwpBorderStuff* GetBorderStuff(){ return m_pBorderStuff; } + LwpMargins* GetMargins() { return m_pMargins; }; + + //add by , 01/25/2005 + virtual void operator=(const LwpOverride& rOther); + + void Override(LwpParaBorderOverride* pOther); + + inline sal_Bool IsBorderStuffOverridden(); + inline sal_Bool IsBetweenStuffOverridden(); + inline sal_Bool IsShadowOverridden(); + inline sal_Bool IsMarginsOverridden(); + inline sal_Bool IsAboveTypeOverridden(); + inline sal_Bool IsBelowTypeOverridden(); + inline sal_Bool IsRightTypeOverridden(); + inline sal_Bool IsBetweenTypeOverridden(); + inline sal_Bool IsAboveWidthOverridden(); + inline sal_Bool IsBelowWidthOverridden(); + inline sal_Bool IsBetweenWidthOverridden(); + inline sal_Bool IsRightWidthOverridden(); + inline sal_Bool IsBetweenMarginOverridden(); + + void OverrideBorderStuff(LwpBorderStuff* pBorderStuff); + void OverrideBetweenStuff(LwpBorderStuff* pBorderStuff); + void OverrideShadow(LwpShadow* pShadow); + void OverrideMargins(LwpMargins* pMargins); + void OverrideAboveType(BorderWidthType eNewType); + void OverrideBelowType(BorderWidthType eNewType); + void OverrideRightType(BorderWidthType eNewType); + void OverrideBetweenType(BorderWidthType eNewType); + void OverrideAboveWidth(sal_uInt32 nNewWidth); + void OverrideBelowWidth(sal_uInt32 nNewWidth); + void OverrideBetweenWidth(sal_uInt32 nNewWidth); + void OverrideRightWidth(sal_uInt32 nNewWidth); + void OverrideBetweenMargin(sal_uInt32 nNewMargin); + + inline void RevertBorderStuff(); + inline void RevertBetweenStuff(); + inline void RevertShadow(); + inline void RevertMargins(); + inline void RevertAboveType(); + inline void RevertBelowType(); + inline void RevertRightType(); + inline void RevertBetweenType(); + inline void RevertAboveWidth(); + inline void RevertBelowWidth(); + inline void RevertBetweenWidth(); + inline void RevertRightWidth(); + inline void RevertBetweenMargin(); + + //end add + friend class LwpParaBorderPiece; +protected: + enum + { + PBO_STUFF = 0x0001, + PBO_SHADOW = 0x0002, + PBO_MARGINS = 0x0004, + PBO_ABOVETYPE = 0x0008, + PBO_BELOWTYPE = 0x0010, + PBO_RIGHTTYPE = 0x0020, + PBO_ABOVE = 0x0040, + PBO_BELOW = 0x0080, + PBO_BETWEENSTUFF = 0x0100, + PBO_BETWEENTYPE = 0x0200, + PBO_BETWEEN = 0x0400, + PBO_BETWEENMARGIN = 0x0800, + PBO_RIGHT = 0x1000 + }; + +private: + LwpBorderStuff *m_pBorderStuff; + LwpBorderStuff *m_pBetweenStuff; + LwpShadow *m_pShadow; + LwpMargins *m_pMargins; + + BorderWidthType m_eAboveType; + BorderWidthType m_eBelowType; + BorderWidthType m_eRightType; + BorderWidthType m_eBetweenType; + + sal_uInt32 m_nAboveWidth; + sal_uInt32 m_nBelowWidth; + sal_uInt32 m_nBetweenWidth; + sal_uInt32 m_nRightWidth; + + sal_uInt32 m_nBetweenMargin; +}; + +inline sal_Bool LwpParaBorderOverride::IsBorderStuffOverridden() +{ + return (sal_Bool)((m_nOverride & PBO_STUFF) != 0); +} +inline sal_Bool LwpParaBorderOverride::IsBetweenStuffOverridden() +{ + return (sal_Bool)((m_nOverride & PBO_BETWEENSTUFF) != 0); +} +inline sal_Bool LwpParaBorderOverride::IsShadowOverridden() +{ + return (sal_Bool)((m_nOverride & PBO_SHADOW) != 0); +} +inline sal_Bool LwpParaBorderOverride::IsMarginsOverridden() +{ + return (sal_Bool)((m_nOverride & PBO_MARGINS) != 0); +} +inline sal_Bool LwpParaBorderOverride::IsAboveTypeOverridden() +{ + return (sal_Bool)((m_nOverride & PBO_ABOVETYPE) != 0); +} +inline sal_Bool LwpParaBorderOverride::IsBelowTypeOverridden() +{ + return (sal_Bool)((m_nOverride & PBO_BELOWTYPE) != 0); +} +inline sal_Bool LwpParaBorderOverride::IsRightTypeOverridden() +{ + return (sal_Bool)((m_nOverride & PBO_RIGHTTYPE) != 0); +} +inline sal_Bool LwpParaBorderOverride::IsBetweenTypeOverridden() +{ + return (sal_Bool)((m_nOverride & PBO_BETWEENTYPE) != 0); +} +inline sal_Bool LwpParaBorderOverride::IsAboveWidthOverridden() +{ + return (sal_Bool)((m_nOverride & PBO_ABOVE) != 0); +} +inline sal_Bool LwpParaBorderOverride::IsBelowWidthOverridden() +{ + return (sal_Bool)((m_nOverride & PBO_BELOW) != 0); +} +inline sal_Bool LwpParaBorderOverride::IsBetweenWidthOverridden() +{ + return (sal_Bool)((m_nOverride & PBO_BETWEEN) != 0); +} +inline sal_Bool LwpParaBorderOverride::IsRightWidthOverridden() +{ + return (sal_Bool)((m_nOverride & PBO_RIGHT) != 0); +} +inline sal_Bool LwpParaBorderOverride::IsBetweenMarginOverridden() +{ + return (sal_Bool)((m_nOverride & PBO_BETWEENMARGIN) != 0); +} + +inline void LwpParaBorderOverride::RevertBorderStuff() +{ + LwpOverride::Override(PBO_STUFF, STATE_STYLE); +} +inline void LwpParaBorderOverride::RevertBetweenStuff() +{ + LwpOverride::Override(PBO_BETWEENSTUFF, STATE_STYLE); +} +inline void LwpParaBorderOverride::RevertShadow() +{ + LwpOverride::Override(PBO_SHADOW, STATE_STYLE); +} +inline void LwpParaBorderOverride::RevertMargins() +{ + LwpOverride::Override(PBO_MARGINS, STATE_STYLE); +} +inline void LwpParaBorderOverride::RevertAboveType() +{ + LwpOverride::Override(PBO_ABOVETYPE, STATE_STYLE); +} +inline void LwpParaBorderOverride::RevertBelowType() +{ + LwpOverride::Override(PBO_BELOWTYPE, STATE_STYLE); +} +inline void LwpParaBorderOverride::RevertRightType() +{ + LwpOverride::Override(PBO_RIGHTTYPE, STATE_STYLE); +} +inline void LwpParaBorderOverride::RevertBetweenType() +{ + LwpOverride::Override(PBO_BETWEENTYPE, STATE_STYLE); +} +inline void LwpParaBorderOverride::RevertAboveWidth() +{ + LwpOverride::Override(PBO_ABOVE, STATE_STYLE); +} +inline void LwpParaBorderOverride::RevertBelowWidth() +{ + LwpOverride::Override(PBO_BELOW, STATE_STYLE); +} +inline void LwpParaBorderOverride::RevertBetweenWidth() +{ + LwpOverride::Override(PBO_BETWEEN, STATE_STYLE); +} +inline void LwpParaBorderOverride::RevertRightWidth() +{ + LwpOverride::Override(PBO_RIGHT, STATE_STYLE); +} +inline void LwpParaBorderOverride::RevertBetweenMargin() +{ + LwpOverride::Override(PBO_BETWEENMARGIN, STATE_STYLE); +} + +#endif diff --git a/lotuswordpro/source/filter/lwpparaproperty.cxx b/lotuswordpro/source/filter/lwpparaproperty.cxx new file mode 100644 index 000000000000..dfb1ccf44f16 --- /dev/null +++ b/lotuswordpro/source/filter/lwpparaproperty.cxx @@ -0,0 +1,294 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ +#include "lwpparaproperty.hxx" +#include "lwpobjtags.hxx" +#include "lwppara.hxx" + +LwpParaProperty* LwpParaProperty::ReadPropertyList(LwpObjectStream* pFile,LwpObject* Whole) +{ + sal_uInt32 tag; + LwpParaProperty* Prop= NULL; + LwpParaProperty* NewProp= NULL; + sal_uInt16 Len; + + for(;;) + { + pFile->QuickRead(&tag,sizeof(sal_uInt32)); + // Keep reading properties until we hit the end tag + if (tag == TAG_ENDSUBOBJ) + break; + + // Get the length of this property + pFile->QuickRead(&Len,sizeof(sal_uInt16)); + + // Create whatever kind of tag we just found + switch (tag) + { + case TAG_PARA_ALIGN: + NewProp = new LwpParaAlignProperty(pFile); + break; + + case TAG_PARA_INDENT: + NewProp = new LwpParaIndentProperty(pFile); + break; + + case TAG_PARA_SPACING: + NewProp = new LwpParaSpacingProperty(pFile); + break; + + case TAG_PARA_BORDER: + NewProp = new LwpParaBorderProperty(pFile); + break; + + case TAG_PARA_BACKGROUND: + NewProp = new LwpParaBackGroundProperty(pFile); + break; + + case TAG_PARA_BREAKS: + NewProp = new LwpParaBreaksProperty(pFile); + break; + + case TAG_PARA_BULLET: + NewProp = new LwpParaBulletProperty(pFile); + static_cast<LwpPara*>(Whole)->SetBulletFlag(sal_True); + break; + + case TAG_PARA_NUMBERING: + NewProp = new LwpParaNumberingProperty(pFile); + break; + + case TAG_PARA_TAB: + NewProp = new LwpParaTabRackProperty(pFile); + break; +/* +#ifdef KINSOKU + case TAG_PARA_KINSOKU: + NewProp = new CParaKinsokuProperty(pFile); + break; +#endif + + case TAG_PARA_PROPLIST: + NewProp = new CParaPropListProperty(pFile,Whole); + break; + + case TAG_PARA_SHOW: + case TAG_PARA_HIDE: + // Ignore these properties +*/ default: + pFile->SeekRel(Len); + NewProp = NULL; + break; + } + // Stick it at the beginning of the list + if (NewProp) + { + NewProp->insert(Prop, NULL); + Prop = NewProp; + } + } + return Prop; +} + +LwpParaAlignProperty::LwpParaAlignProperty(LwpObjectStream* pFile) +{ +// pFile->SeekRel(3); + LwpObjectID align; + align.ReadIndexed(pFile); + m_pAlignment =static_cast<LwpAlignmentOverride*> + (static_cast<LwpAlignmentPiece*>(align.obj(VO_ALIGNMENTPIECE))->GetOverride()); +/* if(pFile->GetFileRevision() < 0x000b) + { + CAlignmentPieceGuts guts; + CAlignmentPiece::QuickReadGuts(pFile, &guts); + cAlignment = GetPieceManager()->GetAlignmentPiece(&guts); + } + else + { + LwpFoundry* OldFoundry = pFile->GetFoundry(); + pFile->SetFoundry(GetPieceManager()->GetFoundry()); + cAlignment.QuickRead(pFile); + pFile->SetFoundry(OldFoundry); + } */ +} + +LwpParaAlignProperty::~LwpParaAlignProperty(void) +{ +} + +sal_uInt32 LwpParaAlignProperty::GetType(void) +{ + return PP_LOCAL_ALIGN; +} + +LwpParaIndentProperty::LwpParaIndentProperty(LwpObjectStream* pFile) +{ +// LwpObjectID indent; + m_aIndentID.ReadIndexed(pFile); + m_pIndent = static_cast<LwpIndentOverride*> + (static_cast<LwpIndentPiece*>(m_aIndentID.obj(VO_INDENTPIECE))->GetOverride()); +} + +LwpParaIndentProperty::~LwpParaIndentProperty(void) +{ +} + +sal_uInt32 LwpParaIndentProperty::GetType(void) +{ + return PP_LOCAL_INDENT; +} + +LwpParaSpacingProperty::LwpParaSpacingProperty(LwpObjectStream* pFile) +{ + LwpObjectID spacing; + spacing.ReadIndexed(pFile); + m_pSpacing = static_cast<LwpSpacingOverride*> + (static_cast<LwpSpacingPiece*>(spacing.obj(VO_SPACINGPIECE))->GetOverride()); +} + +LwpParaSpacingProperty::~LwpParaSpacingProperty(void) +{ +} + +sal_uInt32 LwpParaSpacingProperty::GetType(void) +{ + return PP_LOCAL_SPACING; +} + +// 01/25/2004//////////////////////////////////////////////////////// +LwpParaBorderProperty::LwpParaBorderProperty(LwpObjectStream* pStrm) : +m_pParaBorderOverride(NULL) +{ + LwpObjectID aParaBorder; + aParaBorder.ReadIndexed(pStrm); + + if (!aParaBorder.IsNull()) + { + m_pParaBorderOverride = static_cast<LwpParaBorderOverride*> + (static_cast<LwpParaBorderPiece*>(aParaBorder.obj())->GetOverride()); + } +} + +LwpParaBreaksProperty::LwpParaBreaksProperty(LwpObjectStream* pStrm) : +m_pBreaks(NULL) +{ + LwpObjectID aBreaks; + aBreaks.ReadIndexed(pStrm); + + if (!aBreaks.IsNull()) + { + m_pBreaks = static_cast<LwpBreaksOverride*> + (static_cast<LwpBreaksPiece*>(aBreaks.obj())->GetOverride()); + } +} + +LwpParaBulletProperty::LwpParaBulletProperty(LwpObjectStream* pStrm) : +m_pBullet(new LwpBulletOverride) +{ + m_pBullet->Read(pStrm); +} + +LwpParaBulletProperty::~LwpParaBulletProperty() +{ + if (m_pBullet) + { + delete m_pBullet; + } +} + +LwpParaNumberingProperty::LwpParaNumberingProperty(LwpObjectStream * pStrm) +{ + LwpObjectID aNumberingPiece; + aNumberingPiece.ReadIndexed(pStrm); + if (aNumberingPiece.IsNull()) + { + return; + } + + m_pNumberingOverride = static_cast<LwpNumberingOverride*> + (static_cast<LwpNumberingPiece*>(aNumberingPiece.obj(VO_NUMBERINGPIECE))->GetOverride()); + +} +//end////////////////////////////////////////////////////////////////////// + +LwpParaTabRackProperty::LwpParaTabRackProperty(LwpObjectStream* pFile) +{ + LwpObjectID aTabRack; + aTabRack.ReadIndexed(pFile); + m_pTabOverride =static_cast<LwpTabOverride*>(static_cast<LwpTabPiece*>(aTabRack.obj())->GetOverride()); +} + +LwpParaTabRackProperty::~LwpParaTabRackProperty() +{ +} + +LwpParaBackGroundProperty::LwpParaBackGroundProperty(LwpObjectStream* pFile) +{ + LwpObjectID background; + background.ReadIndexed(pFile); + m_pBackground = static_cast<LwpBackgroundOverride*>( + static_cast<LwpBackgroundPiece*>(background.obj())->GetOverride()); +} + +LwpParaBackGroundProperty::~LwpParaBackGroundProperty() +{ +} diff --git a/lotuswordpro/source/filter/lwpparaproperty.hxx b/lotuswordpro/source/filter/lwpparaproperty.hxx new file mode 100644 index 000000000000..fde603bbbf99 --- /dev/null +++ b/lotuswordpro/source/filter/lwpparaproperty.hxx @@ -0,0 +1,319 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ +#ifndef _LWPPARAPROPERTY_HXX_ +#define _LWPPARAPROPERTY_HXX_ + +#include "lwpobj.hxx" +#include "lwpobjstrm.hxx" +#include "lwpdllist.hxx" + +#include "lwpoverride.hxx" +#include "lwppiece.hxx" + +/* paragraph property ID's */ +#define PP_OUTLINE_SHOW 0x53484f4cUL /* "SHOW" */ +#define PP_OUTLINE_HIDE 0x48494445UL /* "HIDE" */ +#define PP_LOCAL_ALIGN 0x414c494eUL /* "ALIN" */ +#define PP_LOCAL_INDENT 0x494e444eUL /* "INDN" */ +#define PP_LOCAL_SPACING 0x5350434eUL /* "SPCN" */ +#define PP_LOCAL_TABRACK 0x54414253UL /* "TABS" */ +#define PP_LOCAL_BREAKS 0x42524b53UL /* "BRKS" */ +#define PP_LOCAL_BULLET 0x42554c4cUL /* "BULL" */ +#define PP_LOCAL_BORDER 0x424f5244UL /* "BORD" */ +#define PP_LOCAL_BACKGROUND 0x4241434bUL /* "BACK" */ +#define PP_LOCAL_NUMBERING 0x4e4d4252UL /* "NMBR" */ +#define PP_LOCAL_KINSOKU 0x4b494e53UL /* "KINS" */ +#define PP_PROPLIST 0x50524f50UL /* "PROP" */ + +class LwpParaProperty : public LwpDLList +{ +public: + LwpParaProperty(){}; + virtual ~LwpParaProperty(void){}; + virtual sal_uInt32 GetType(void) = 0; + inline LwpParaProperty* GetNext(void); + inline LwpParaProperty* GetPrevious(void); + + static LwpParaProperty* ReadPropertyList(LwpObjectStream* pFile,LwpObject* Whole); + +}; + +inline LwpParaProperty* LwpParaProperty::GetNext(void) +{ + return static_cast<LwpParaProperty*>(LwpDLList::GetNext()); +} + +inline LwpParaProperty* LwpParaProperty::GetPrevious(void) +{ + return static_cast<LwpParaProperty*>(LwpDLList::GetPrevious()); +} + +//align/indent/spacing +//TO DO:border/backgroud etc + + +class LwpParaAlignProperty : public LwpParaProperty +{ +public: +// LwpParaAlignProperty(LwpParaAlignProperty* pOther); + LwpParaAlignProperty(LwpObjectStream* pFile); + virtual ~LwpParaAlignProperty(void); + LwpAlignmentOverride* GetAlignment(void); + sal_uInt32 GetType(void); + +private: +// LwpAlignmentPiece m_Alignment; + LwpAlignmentOverride* m_pAlignment; +}; + +inline LwpAlignmentOverride* LwpParaAlignProperty::GetAlignment(void) +{ +// return static_cast<LwpAlignmentOverride*>(m_Alignment.m_pOverride); + return m_pAlignment; //add by 1-24 +} + +class LwpParaIndentProperty : public LwpParaProperty +{ +public: + LwpParaIndentProperty(LwpObjectStream* pFile); + virtual ~LwpParaIndentProperty(void); + LwpIndentOverride* GetIndent(void); + sal_uInt32 GetType(void); + //add by , 03/22/2005 + inline LwpObjectID GetIndentID(); + //end add + +private: + //add by , 03/22/2005 + LwpObjectID m_aIndentID; + //end add + LwpIndentOverride* m_pIndent; +}; +inline LwpObjectID LwpParaIndentProperty::GetIndentID() +{ + return m_aIndentID; +} +inline LwpIndentOverride* LwpParaIndentProperty::GetIndent(void) +{ + return m_pIndent; +} + +class LwpParaSpacingProperty : public LwpParaProperty +{ +public: + LwpParaSpacingProperty(LwpObjectStream* pFile); + virtual ~LwpParaSpacingProperty(void); + LwpSpacingOverride* GetSpacing(void); + sal_uInt32 GetType(void); +private: + LwpSpacingOverride* m_pSpacing; + +}; + +inline LwpSpacingOverride* LwpParaSpacingProperty::GetSpacing(void) +{ + return m_pSpacing; +} + +//add by , 01/25/2005//////////////////////////////////////////// +class LwpParaBorderOverride; +class LwpParaBorderProperty : public LwpParaProperty +{ +public: + LwpParaBorderProperty(LwpObjectStream* pStrm); + + inline sal_uInt32 GetType(); + + inline LwpParaBorderOverride* GetLocalParaBorder(); + +private: + LwpParaBorderOverride* m_pParaBorderOverride; +}; + +inline LwpParaBorderOverride* LwpParaBorderProperty::GetLocalParaBorder() +{ + return m_pParaBorderOverride; +} + +inline sal_uInt32 LwpParaBorderProperty::GetType() +{ + return PP_LOCAL_BORDER; +} + +class LwpParaBreaksProperty : public LwpParaProperty +{ +public: + LwpParaBreaksProperty(LwpObjectStream* pStrm); + + inline sal_uInt32 GetType(); + + inline LwpBreaksOverride* GetLocalParaBreaks(); + +private: + LwpBreaksOverride* m_pBreaks; + +}; + +inline sal_uInt32 LwpParaBreaksProperty::GetType() +{ + return PP_LOCAL_BREAKS; +} +inline LwpBreaksOverride* LwpParaBreaksProperty::GetLocalParaBreaks() +{ + return m_pBreaks; +} + + +class LwpParaBulletProperty : public LwpParaProperty +{ +public: + LwpParaBulletProperty(LwpObjectStream* pStrm); + + virtual ~LwpParaBulletProperty(); + + inline sal_uInt32 GetType(); + + inline LwpBulletOverride* GetLocalParaBullet(); + +private: + LwpBulletOverride* m_pBullet; +}; + +inline sal_uInt32 LwpParaBulletProperty::GetType() +{ + return PP_LOCAL_BULLET; +} +inline LwpBulletOverride* LwpParaBulletProperty::GetLocalParaBullet() +{ + return m_pBullet; +} + + +class LwpParaNumberingProperty : public LwpParaProperty +{ +public: + LwpParaNumberingProperty(LwpObjectStream* pStrm); + + inline sal_uInt32 GetType(); + + inline LwpNumberingOverride* GetLocalNumbering() const; +private: + LwpNumberingOverride* m_pNumberingOverride; +}; +inline sal_uInt32 LwpParaNumberingProperty::GetType() +{ + return PP_LOCAL_NUMBERING; +} +inline LwpNumberingOverride* LwpParaNumberingProperty::GetLocalNumbering() const +{ + return m_pNumberingOverride; +} +//end add///////////////////////////////////////////////////////////// + + +class LwpParaTabRackProperty : public LwpParaProperty +{ +public: + LwpParaTabRackProperty(LwpObjectStream* pStrm); + ~LwpParaTabRackProperty(void); + inline sal_uInt32 GetType(); + + inline LwpTabOverride* GetTab(); //should add by , note by 1/28 + +private: + LwpTabOverride* m_pTabOverride; +}; + +inline LwpTabOverride* LwpParaTabRackProperty::GetTab() +{ + return m_pTabOverride; +} + +inline sal_uInt32 LwpParaTabRackProperty::GetType(void) +{ + return PP_LOCAL_TABRACK; +} + + +class LwpParaBackGroundProperty : public LwpParaProperty +{ +public: + LwpParaBackGroundProperty(LwpObjectStream* pFile); + virtual ~LwpParaBackGroundProperty(void); + LwpBackgroundOverride* GetBackground(void); + sal_uInt32 GetType(void); +private: + LwpBackgroundOverride* m_pBackground; +}; + +inline LwpBackgroundOverride* LwpParaBackGroundProperty::GetBackground(void) +{ + return m_pBackground; +} + +inline sal_uInt32 LwpParaBackGroundProperty::GetType() +{ + return PP_LOCAL_BACKGROUND; +} + +#endif diff --git a/lotuswordpro/source/filter/lwpparastyle.cxx b/lotuswordpro/source/filter/lwpparastyle.cxx new file mode 100644 index 000000000000..4d254f21db56 --- /dev/null +++ b/lotuswordpro/source/filter/lwpparastyle.cxx @@ -0,0 +1,795 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + + +#include "lwpparastyle.hxx" +#include "lwpfilehdr.hxx" +#include "lwpoverride.hxx" +#include "lwpparaborderoverride.hxx" +#include "lwpbreaksoverride.hxx" +#include "lwpnumberingoverride.hxx" +#include "lwptaboverride.hxx" +#include "lwpbackgroundoverride.hxx" +#include "xfilter/xfdefs.hxx" +#include "xfilter/xfparastyle.hxx" +#include "xfilter/xfborders.hxx" +#include "lwpfont.hxx" +#include "lwpfoundry.hxx" +#include "lwppiece.hxx" +#include "lwpshadow.hxx" +#include "lwpborderstuff.hxx" +#include "lwpmargins.hxx" +#include "lwptabrack.hxx" + +#include "lwpsilverbullet.hxx" + + +LwpParaStyle::LwpParaStyle(LwpObjectHeader& objHdr, LwpSvStream* pStrm) : +LwpTextStyle(objHdr, pStrm), m_pKinsokuOptsOverride(new LwpKinsokuOptsOverride), +m_pBulletOverride(new LwpBulletOverride) +{ +} + +LwpParaStyle::~LwpParaStyle() +{ + if (m_pKinsokuOptsOverride) + { + delete m_pKinsokuOptsOverride; + } + + if (m_pBulletOverride) + { + delete m_pBulletOverride; + } +} + +void LwpParaStyle::Read() +{ + LwpTextStyle::Read(); + + if (LwpFileHeader::m_nFileRevision < 0x000B) + { + // read many overrides + LwpAlignmentOverride aAlignOverride; + aAlignOverride.Read(m_pObjStrm); + + LwpSpacingOverride aSpacingOverride; + aSpacingOverride.Read(m_pObjStrm); + + LwpIndentOverride aIndentOverride; + aIndentOverride.Read(m_pObjStrm); + + LwpParaBorderOverride aPBOverride; + aPBOverride.Read(m_pObjStrm); + + LwpBreaksOverride aBreaksOverride; + aBreaksOverride.Read(m_pObjStrm); + + LwpNumberingOverride aNumberingOverride; + aNumberingOverride.Read(m_pObjStrm); + + LwpTabOverride aTabOverride; + aTabOverride.Read(m_pObjStrm); + + } + else + { + m_AlignmentStyle.ReadIndexed(m_pObjStrm); + m_SpacingStyle.ReadIndexed(m_pObjStrm); + m_IndentStyle.ReadIndexed(m_pObjStrm); + m_BorderStyle.ReadIndexed(m_pObjStrm); + m_BreaksStyle.ReadIndexed(m_pObjStrm); + m_NumberingStyle.ReadIndexed(m_pObjStrm); + m_TabStyle.ReadIndexed(m_pObjStrm); + + m_pKinsokuOptsOverride->Read(m_pObjStrm); + m_pBulletOverride->Read(m_pObjStrm); + + if (m_pObjStrm->CheckExtra()) + { + m_BackgroundStyle.ReadIndexed(m_pObjStrm); + m_pObjStrm->SkipExtra(); + } + + + } +} + +void LwpParaStyle::Apply(XFParaStyle *pParaStyle) +{ + assert(pParaStyle); + LwpVirtualPiece *pPiece = NULL; + //alignment: + pPiece = (LwpVirtualPiece*)m_AlignmentStyle.obj(); + if( pPiece ) + { + LwpAlignmentOverride *pAlign = (LwpAlignmentOverride*)pPiece->GetOverride(); + if( pAlign ) + ApplyAlignment(pParaStyle,pAlign); + } + + //don't known top and bottom indent now. + pPiece = (LwpVirtualPiece*)m_IndentStyle.obj(); + if( pPiece ) + { + LwpIndentOverride *pIndent = (LwpIndentOverride*)pPiece->GetOverride(); + if( pIndent ) + { + if (!m_pBulletOverride->IsInValid())//Add by ,for remove bullet indent in named bullet style + { + LwpIndentOverride* pNewIndent = new LwpIndentOverride; + *pNewIndent = *pIndent; + pNewIndent->SetMFirst(0); + pNewIndent->SetMRest(0); + ApplyIndent(NULL,pParaStyle,pNewIndent); + delete pNewIndent; + } + else + ApplyIndent(NULL,pParaStyle,pIndent); + } + } + //shadow & borders. + pPiece = (LwpVirtualPiece*)m_BorderStyle.obj(); + if( pPiece ) + { + LwpParaBorderOverride *pBorder = (LwpParaBorderOverride*)pPiece->GetOverride(); + if( pBorder ) + { + this->ApplyParaBorder(pParaStyle, pBorder); + } + } + + pPiece = (LwpVirtualPiece*)m_SpacingStyle.obj(); + if (pPiece) + { + LwpSpacingOverride *pSpacing = (LwpSpacingOverride*)pPiece->GetOverride(); + if( pSpacing) + ApplySpacing(NULL,pParaStyle,pSpacing); + } + + //paragraph background. + pPiece = (LwpVirtualPiece*)m_BackgroundStyle.obj(); + if( pPiece ) + { + LwpBackgroundOverride *pBack = (LwpBackgroundOverride*)pPiece->GetOverride(); + if( pBack ) + { + LwpColor color = pBack->GetBackColor(); + XFColor aXFColor( color.To24Color() ); + pParaStyle->SetBackColor( aXFColor ); + } + } + + // 01/28/2005 + //add tab style + pPiece = (LwpVirtualPiece*)m_TabStyle.obj(); + if( pPiece ) + { + LwpTabOverride *pTab=(LwpTabOverride*)pPiece->GetOverride(); + if(pTab) + { + ApplyTab(pParaStyle,pTab); + } + } + //add by 2005/02/16 + pPiece = (LwpVirtualPiece*)m_BreaksStyle.obj(); + if( pPiece ) + { + LwpBreaksOverride *pBreak=(LwpBreaksOverride*)pPiece->GetOverride(); + if(pBreak) + { + ApplyBreaks(pParaStyle,pBreak); + } + } + //add end +} + +void LwpParaStyle::ApplySubBorder(LwpBorderStuff* pBorderStuff, LwpBorderStuff::BorderType eType, XFBorders* pXFBorders) +{ + enumXFBorder eXFBorderSide = enumXFBorderNone; + switch (eType) + { + case LwpBorderStuff::LEFT: + eXFBorderSide = enumXFBorderLeft; + break; + case LwpBorderStuff::RIGHT: + eXFBorderSide = enumXFBorderRight; + break; + case LwpBorderStuff::TOP: + eXFBorderSide = enumXFBorderTop; + break; + case LwpBorderStuff::BOTTOM: + eXFBorderSide = enumXFBorderBottom; + break; + } + + LwpColor aColor = pBorderStuff->GetSideColor(eType); + float fWidth = pBorderStuff->GetSideWidth(eType); + sal_uInt16 nType = pBorderStuff->GetSideType(eType); + + switch (nType) + { + default://fall through! + case 0x14: //single fall through! + case 0x17: //treble + pXFBorders->SetWidth(eXFBorderSide, fWidth); + break; + case 0x15: //double , fall through! + case 0x16: //thick double + pXFBorders->SetDoubleLine(eXFBorderSide, sal_True, sal_False); + pXFBorders->SetWidthOutter(eXFBorderSide, static_cast<float>(fWidth*0.333)); + pXFBorders->SetWidthSpace(eXFBorderSide, static_cast<float>(fWidth*0.334)); + pXFBorders->SetWidthInner(eXFBorderSide, static_cast<float>(fWidth*0.333)); +// pXFBorders->SetWidth(eXFBorderSide, fWidth); + break; + case 0x18: //thick-thin + pXFBorders->SetDoubleLine(eXFBorderSide, sal_True, sal_False); + pXFBorders->SetWidthOutter(eXFBorderSide, static_cast<float>(fWidth*0.5)); + pXFBorders->SetWidthInner(eXFBorderSide, static_cast<float>(fWidth*0.25)); + pXFBorders->SetWidthSpace(eXFBorderSide, static_cast<float>(fWidth*0.25)); + break; + case 0x19: //thin-thick + pXFBorders->SetDoubleLine(eXFBorderSide, sal_True, sal_False); + pXFBorders->SetWidthInner(eXFBorderSide, static_cast<float>(fWidth*0.7)); + pXFBorders->SetWidthOutter(eXFBorderSide, static_cast<float>(fWidth*0.15)); + pXFBorders->SetWidthSpace(eXFBorderSide, static_cast<float>(fWidth*0.15)); + break; + } + + if (aColor.IsValidColor()) + { + XFColor aXFColor(aColor.To24Color()); + pXFBorders->SetColor(eXFBorderSide, aXFColor ); + } +} + +void LwpParaStyle::ApplyParaBorder(XFParaStyle* pParaStyle, LwpParaBorderOverride* pBorder) +{ + //convert LwpShadow: + LwpShadow *pShadow = pBorder->GetShadow(); + if( pShadow ) + { + LwpColor color = pShadow->GetColor(); + float offsetX = pShadow->GetOffsetX(); + float offsetY = pShadow->GetOffsetY(); + + if( offsetX && offsetY && color.IsValidColor() ) + { + XFColor aXFColor(color.To24Color()); + sal_Bool left = sal_False; + sal_Bool top = sal_False; + if( offsetX < 0 ) + left = sal_True; + if( offsetY < 0 ) + top = sal_True; + if( left ) + { + if( top ) + pParaStyle->SetShadow(enumXFShadowLeftTop,-offsetX,aXFColor); + else + pParaStyle->SetShadow(enumXFShadowLeftBottom,-offsetX,aXFColor); + } + else + { + if( top ) + pParaStyle->SetShadow(enumXFShadowRightTop,offsetX,aXFColor); + else + pParaStyle->SetShadow(enumXFShadowRightBottom,offsetX,aXFColor); + } + } + } + + //convert to XFBorders obejct: + LwpBorderStuff *pBorderStuff = pBorder->GetBorderStuff(); + if( pBorderStuff && pBorderStuff->GetSide() != 0 ) + { + XFBorders *pXFBorders = new XFBorders(); + pParaStyle->SetBorders(pXFBorders); + + LwpMargins* pMargins = pBorder->GetMargins(); + + // apply 4 borders respectively + LwpBorderStuff::BorderType pType[] = { LwpBorderStuff::LEFT, LwpBorderStuff::RIGHT, + LwpBorderStuff::TOP, LwpBorderStuff::BOTTOM }; + float pMarginValue[4]; + + for (sal_uInt8 nC = 0; nC < 4; nC++) + { + if (pBorderStuff->HasSide(pType[nC])) + { + this->ApplySubBorder(pBorderStuff, pType[nC], pXFBorders); + + //get border spacing to text content + if (pMargins) + { + pMarginValue[nC] = static_cast<float>(pMargins->GetMarginsValue(nC)); + } + } + + } + + //apply border spacing to text content + pParaStyle->SetPadding(pMarginValue[0], pMarginValue[1], pMarginValue[2], pMarginValue[3]); + + } +} + +void LwpParaStyle::ApplyBreaks(XFParaStyle* pParaStyle, LwpBreaksOverride* pBreaks) +{ + if (pBreaks->IsKeepWithNext()) + { + pParaStyle->SetBreaks(enumXFBreakKeepWithNext); + } + if (pBreaks->IsPageBreakBefore()) + { + pParaStyle->SetBreaks(enumXFBreakBefPage); + } + if (pBreaks->IsPageBreakAfter()) + { + pParaStyle->SetBreaks(enumXFBreakAftPage); + } + if (pBreaks->IsColumnBreakBefore()) + { + pParaStyle->SetBreaks(enumXFBreakBefColumn); + } + if (pBreaks->IsColumnBreakAfter()) + { + pParaStyle->SetBreaks(enumXFBreakAftColumn); + } +} + +void LwpParaStyle::ApplyAlignment(XFParaStyle* pParaStyle, LwpAlignmentOverride* pAlign) +{ + enumXFAlignType alignType = enumXFAlignStart; + LwpAlignmentOverride::AlignType type; + + type = pAlign->GetAlignType(); + pParaStyle->SetNumberRight(sal_False);//to identify its align attribute + switch(type) + { + case LwpAlignmentOverride::ALIGN_LEFT: + alignType = enumXFAlignStart; + break; + case LwpAlignmentOverride::ALIGN_RIGHT: + alignType = enumXFAlignEnd; + break; + case LwpAlignmentOverride::ALIGN_CENTER: + alignType = enumXFAlignCenter; + break; + case LwpAlignmentOverride::ALIGN_NUMERICLEFT://if non-number in table,ALIGN_NUMERICLEFT/RIGHT are useless + alignType = enumXFAlignStart; //note by 1/28 + break; + case LwpAlignmentOverride::ALIGN_JUSTIFY: + case LwpAlignmentOverride::ALIGN_JUSTIFYALL: + alignType = enumXFAlignJustify; + break; + case LwpAlignmentOverride::ALIGN_NUMERICRIGHT: + pParaStyle->SetNumberRight(sal_True);//to identify its align attribute + alignType = enumXFAlignEnd; + break; + } + pParaStyle->SetAlignType(alignType); +} + +void LwpParaStyle::ApplyIndent(LwpPara* pPara, XFParaStyle* pParaStyle, LwpIndentOverride* pIndent) +{ + LwpPara* pParentPara; + if (pPara) + pParentPara = pPara->GetParent(); + else + pParentPara = NULL; + + LwpIndentOverride* pTotalIndent = new LwpIndentOverride; + if (pIndent->IsUseRelative() && pParentPara) + { + LwpIndentOverride* pParentIndent = pParentPara->GetIndent(); + if (!pParentIndent) + return; + *pTotalIndent = *pIndent; + + //add by ,for bullet only + if (pPara) + { + if (pPara->GetBulletFlag()) + { + pTotalIndent->SetMAll(pParentIndent->GetMAll() + pTotalIndent->GetMAll()); + pTotalIndent->SetMRight(pParentIndent->GetMRight()+ pTotalIndent->GetMRight()); + pParaStyle->SetMargins(LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits( + pTotalIndent->GetMAll())), pTotalIndent->GetRight()); + pPara->SetIndent(pTotalIndent); + return; + } + } + //end add + sal_uInt16 relative = pParentIndent->GetRelative(); + + sal_Int32 Amount = pParentIndent->GetMAll(); + + if (relative == LwpIndentOverride::RELATIVE_FIRST) + Amount += pParentIndent->GetMFirst(); + else if (relative == LwpIndentOverride::RELATIVE_REST) + Amount += pParentIndent->GetMRest(); + pTotalIndent->SetMAll(Amount + pTotalIndent->GetMAll()); + pTotalIndent->SetMRight(pParentIndent->GetMRight()+ pTotalIndent->GetMRight()); + + pParaStyle->SetIndent(pTotalIndent->GetFirst()); + pParaStyle->SetMargins(pTotalIndent->GetLeft(), pTotalIndent->GetRight()); + pPara->SetIndent(pTotalIndent); + + } + else + { + *pTotalIndent = *pIndent; + //add by + if (pPara) + { + if (pPara->GetBulletFlag()) + { +// pParaStyle->SetIndent(LwpTools::ConvertFromUnits(pIndent->GetMAll())); + pParaStyle->SetMargins(LwpTools::ConvertToMetric( + LwpTools::ConvertFromUnits(pIndent->GetMAll())), pIndent->GetRight()); + pPara->SetIndent(pTotalIndent); + return; + } + } + //end add + + pParaStyle->SetIndent(pIndent->GetFirst()); + pParaStyle->SetMargins(pIndent->GetLeft(), pIndent->GetRight()); + if (pPara) + { + pPara->SetIndent(pTotalIndent); + } + } +} + +void LwpParaStyle::ApplySpacing(LwpPara* pPara, XFParaStyle* pParaStyle, LwpSpacingOverride* pSpacing) +{ + LwpSpacingCommonOverride* spacing = pSpacing->GetSpacing(); + LwpSpacingCommonOverride* aboveline = pSpacing->GetAboveLineSpacing(); + LwpSpacingCommonOverride* abovepara = pSpacing->GetAboveSpacing(); + LwpSpacingCommonOverride* belowpara = pSpacing->GetBelowSpacing(); + + LwpSpacingCommonOverride::SpacingType type = spacing->GetType(); + sal_Int32 amount = spacing->GetAmount(); + sal_Int32 multiple = spacing->GetMultiple(); + enumLHType xftype; + double height; + + switch(type) + { + case LwpSpacingCommonOverride::SPACING_DYNAMIC: + { + xftype = enumLHPercent; + height = double(multiple)/65536L*100; + pParaStyle->SetLineHeight(xftype,height); + } + break; + case LwpSpacingCommonOverride::SPACING_LEADING: + { + xftype = enumLHSpace; + height = LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(amount)); + pParaStyle->SetLineHeight(xftype,height); + } + break; + case LwpSpacingCommonOverride::SPACING_CUSTOM: + { + xftype = enumLHHeight; + height = LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(sal_Int32(float(multiple)/65536L*amount))); + pParaStyle->SetLineHeight(xftype,height); + } + break; + case LwpSpacingCommonOverride::SPACING_NONE: + break; + } + +//TO DO: Above Line need to be processed!!!!!!! what it means?????? 1-26 + + type = abovepara->GetType(); + amount = abovepara->GetAmount(); + multiple = abovepara->GetMultiple(); + double above_val =-1; + switch(type) + { + case LwpSpacingCommonOverride::SPACING_DYNAMIC: +// above_val = LINE_HEIGHT*float(multiple)/65536L*100; //TO DO: 1-26 + break; + case LwpSpacingCommonOverride::SPACING_LEADING: + break; + case LwpSpacingCommonOverride::SPACING_CUSTOM: + above_val = LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(sal_Int32(float(multiple)/65536L*amount))); + break; + case LwpSpacingCommonOverride::SPACING_NONE: + break; + } + + type = belowpara->GetType(); + amount = belowpara->GetAmount(); + multiple = belowpara->GetMultiple(); + double below_val=-1; + switch(type) + { + case LwpSpacingCommonOverride::SPACING_DYNAMIC: +// below_val = LINE_HEIGHT*float(multiple)/65536L*100;//TO DO: 1-26 + break; + case LwpSpacingCommonOverride::SPACING_LEADING: + break; + case LwpSpacingCommonOverride::SPACING_CUSTOM: + below_val = LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(sal_Int32(float(multiple)/65536L*amount))); + break; + case LwpSpacingCommonOverride::SPACING_NONE: + break; + } + + if (pPara) + { + if (below_val != -1) + pPara->SetBelowSpacing(below_val); + LwpPara* pPrePara = static_cast<LwpPara*>(pPara->GetPrevious()->obj()); + if (pPrePara && above_val != -1) + { + above_val += pPrePara->GetBelowSpacing(); + + } + + } + pParaStyle->SetMargins(-1,-1,above_val,below_val); +} +/************************************************************************** + * @short: + * @descr: + * @param: + * @param: + * @return: +**************************************************************************/ +void LwpParaStyle::ApplyTab(XFParaStyle *pParaStyle, LwpTabOverride *pTab) +{ + LwpObjectID* pTabRackID = pTab->GetTabRackID(); + if(pTabRackID->IsNull()) + { + //assert(false); + return; + } + + LwpTabRack* pTabRack = static_cast<LwpTabRack*>(pTabRackID->obj()); + if(!pTabRack) + { + //assert(false); + return; + } + + pParaStyle->ClearTabStyles(); + //Get margin left value + double dMarginLeft = pParaStyle->GetMargins().GetLeft(); + + sal_uInt16 nNumTabs = pTabRack->GetNumTabs(); + for(sal_uInt16 nIndex=0; nIndex<nNumTabs; nIndex++) + { + //get tab type + LwpTab* pTab = pTabRack->Lookup(nIndex); + if(!pTab) + return; + + enumXFTab eType; + LwpTab::TabType type = pTab->GetTabType(); + switch(type) + { + case LwpTab::TT_LEFT: + eType = enumXFTabLeft; + break; + case LwpTab::TT_CENTER: + eType = enumXFTabCenter; + break; + case LwpTab::TT_RIGHT: + eType = enumXFTabRight; + break; + case LwpTab::TT_NUMERIC: + eType = enumXFTabChar; + break; + } + + //get position + sal_uInt32 nPos = pTab->GetPosition(); + //different feature between SODC and lwp, the tab length must minus the margin left of para. + double fLen = LwpTools::ConvertFromUnitsToMetric(nPos) - dMarginLeft; + + //get leader type + sal_Unicode cLeader; + LwpTab::LeaderType leader= pTab->GetLeaderType(); + switch(leader) + { + case LwpTab::TL_NONE: + cLeader = 0x20; //space + break; + case LwpTab::TL_HYPHEN: //'-' + cLeader = 0xAD; + break; + case LwpTab::TL_DOT: //'.' + cLeader = 0x2E; + break; + case LwpTab::TL_LINE: //'_' + cLeader = 0x5F; + break; + } + + sal_Unicode cAlignChar = static_cast<sal_Unicode>(pTab->GetAlignChar()); + + pParaStyle->AddTabStyle(eType,fLen,cLeader,cAlignChar); + } + +} + + +void LwpParaStyle::RegisterStyle() +{ + XFParaStyle* pStyle = new XFParaStyle(); + + //Set name + OUString styleName = GetName()->str(); + pStyle->SetStyleName(styleName); + + //Create font + LwpFontManager* pFontMgr = m_pFoundry->GetFontManger(); + XFFont* pFont = pFontMgr->CreateFont(m_nFinalFontID); + pStyle->SetFont(pFont); + + //Set other paragraph properties... + + Apply(pStyle); + //Add style + LwpStyleManager* pStyleMgr = m_pFoundry->GetStyleManager(); + pStyleMgr->AddStyle(*GetObjectID(), pStyle); + +/* // add list style for bullet + if (!m_pBulletOverride) + { + return; + } + LwpSilverBullet* pSilverBullet = static_cast<LwpSilverBullet*>(m_pBulletOverride->GetSilverBullet().obj()); + if (!pSilverBullet) + { + return; + } + + pSilverBullet->SetFoundry(m_pFoundry); + pSilverBullet->RegisterStyle();*/ +} + +LwpAlignmentOverride* LwpParaStyle::GetAlignment() +{ + if (m_AlignmentStyle.obj()!= NULL) + return static_cast<LwpAlignmentOverride*>(static_cast<LwpAlignmentPiece*>(m_AlignmentStyle.obj())->GetOverride()); + else + return NULL; +} + +LwpIndentOverride* LwpParaStyle::GetIndent() +{ + if (m_IndentStyle.obj() != NULL) + return static_cast<LwpIndentOverride*>(static_cast<LwpIndentPiece*>(m_IndentStyle.obj())->GetOverride()); + else + return NULL; +} + +LwpSpacingOverride* LwpParaStyle::GetSpacing() +{ + if (m_SpacingStyle.obj() != NULL) + return static_cast<LwpSpacingOverride*>(static_cast<LwpSpacingPiece*>(m_SpacingStyle.obj())->GetOverride()); + else + return NULL; +} + +LwpParaBorderOverride* LwpParaStyle::GetParaBorder() const +{ + if(m_BorderStyle.IsNull()) return NULL; + return static_cast<LwpParaBorderOverride*> + (static_cast<LwpParaBorderPiece*>(m_BorderStyle.obj(VO_PARABORDERPIECE))->GetOverride()); +} + +LwpBreaksOverride* LwpParaStyle::GetBreaks() const +{ + if(m_BreaksStyle.IsNull()) return NULL; + return static_cast<LwpBreaksOverride*> + (static_cast<LwpBreaksPiece*>(m_BreaksStyle.obj(VO_BREAKSPIECE))->GetOverride()); +} + +LwpBulletOverride* LwpParaStyle::GetBulletOverride() const +{ + return m_pBulletOverride; +} + +LwpNumberingOverride* LwpParaStyle::GetNumberingOverride() const +{ + if(m_NumberingStyle.IsNull()) return NULL; + return static_cast<LwpNumberingOverride*> + (static_cast<LwpNumberingPiece*>(m_NumberingStyle.obj(VO_NUMBERINGPIECE))->GetOverride()); +} + + +/************************************************************************** + * @short: + * @descr: + * @param: + * @param: + * @return: +**************************************************************************/ +LwpTabOverride* LwpParaStyle::GetTabOverride() const +{ + if(m_TabStyle.obj() != NULL) + return (LwpTabOverride*)static_cast<LwpTabPiece*>(m_TabStyle.obj())->GetOverride(); + else + return NULL; +} + +sal_Bool LwpParaStyle::IsNumberRight() +{ + LwpAlignmentOverride* pAlign = GetAlignment(); + if (pAlign) + { + LwpAlignmentOverride::AlignType type; + type = pAlign->GetAlignType(); + if (type == LwpAlignmentOverride::ALIGN_NUMERICRIGHT) + return sal_True; + } + return sal_False; +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwpparastyle.hxx b/lotuswordpro/source/filter/lwpparastyle.hxx new file mode 100644 index 000000000000..2fab0a1ec619 --- /dev/null +++ b/lotuswordpro/source/filter/lwpparastyle.hxx @@ -0,0 +1,130 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPPARASTYLE_HXX +#define _LWPPARASTYLE_HXX + +#include "lwpcharacterstyle.hxx" +#include "lwppiece.hxx" +#include "lwpborderstuff.hxx" +#include "lwppara.hxx" + +class LwpKinsokuOptsOverride; +class LwpBulletOverride; +class XFParaStyle; +class XFBorders; + +class LwpParaStyle : public LwpTextStyle +{ +public: + LwpParaStyle(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + + virtual ~LwpParaStyle(); + + void Read(); + + virtual void Apply(XFParaStyle *pStrm); + // 01/26/2005 + void ApplyParaBorder(XFParaStyle* pParaStyle, LwpParaBorderOverride* pBorder); + void ApplyBreaks(XFParaStyle* pParaStyle, LwpBreaksOverride* pBreaks); + //end + static void ApplyAlignment(XFParaStyle* pParaStyle, LwpAlignmentOverride* pAlign); + static void ApplyIndent(LwpPara* pPara, XFParaStyle* pParaStyle, LwpIndentOverride* pIndent); + static void ApplySpacing(LwpPara* pPara, XFParaStyle* pParaStyle, LwpSpacingOverride* pSpacing); + + // 2005/01/28 + static void ApplyTab(XFParaStyle* pParaStyle, LwpTabOverride* pTab); + + void RegisterStyle(); + + LwpAlignmentOverride* GetAlignment();//add by 1-24 + LwpIndentOverride* GetIndent(); + LwpSpacingOverride* GetSpacing(); + LwpParaBorderOverride* GetParaBorder() const; + LwpBreaksOverride* GetBreaks() const; + LwpTabOverride* GetTabOverride() const; + LwpBulletOverride* GetBulletOverride() const; + LwpNumberingOverride* GetNumberingOverride() const; + + sal_Bool IsNumberRight(); +public: + //add by , 01/27/2004 + static void ApplySubBorder(LwpBorderStuff* pBorderStuff, LwpBorderStuff::BorderType eType, XFBorders* pXFBorders); + //end + +private: + //style IDs + LwpObjectID m_AlignmentStyle; + LwpObjectID m_SpacingStyle; + LwpObjectID m_IndentStyle; + LwpObjectID m_BorderStyle; + LwpObjectID m_BreaksStyle; + LwpObjectID m_NumberingStyle; + LwpObjectID m_TabStyle; + LwpObjectID m_BackgroundStyle; + + LwpKinsokuOptsOverride* m_pKinsokuOptsOverride; + LwpBulletOverride* m_pBulletOverride; +}; + +#endif diff --git a/lotuswordpro/source/filter/lwppiece.hxx b/lotuswordpro/source/filter/lwppiece.hxx new file mode 100644 index 000000000000..0941b3dfa878 --- /dev/null +++ b/lotuswordpro/source/filter/lwppiece.hxx @@ -0,0 +1,202 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPPIECE_HXX +#define _LWPPIECE_HXX + +#include "lwpobj.hxx" +#include "lwpoverride.hxx" +#include "lwpobjstrm.hxx" +#include "lwpdlvlist.hxx" +#include "lwpbreaksoverride.hxx" +#include "lwpparaborderoverride.hxx" +#include "lwpnumberingoverride.hxx" +#include "lwpcharborderoverride.hxx" +#include "lwpbackgroundoverride.hxx" +#include "lwptaboverride.hxx" + +class LwpOverride; +class LwpDLVList; + +class LwpVirtualPiece : public LwpDLVList +{ +public: + LwpVirtualPiece(LwpObjectHeader& objHdr, LwpSvStream* pStrm):LwpDLVList(objHdr, pStrm) + { + m_pOverride = NULL; + } + + virtual ~LwpVirtualPiece() + { + if( m_pOverride ) + delete m_pOverride; + } + + virtual void Read() + { + LwpDLVList::Read(); + if( m_pOverride ) + m_pOverride->Read(m_pObjStrm); + } + + LwpOverride* GetOverride() + { + return m_pOverride; + } +protected: + LwpOverride *m_pOverride; +}; + + +class LwpParaBorderPiece : public LwpVirtualPiece +{ +public: + LwpParaBorderPiece(LwpObjectHeader& objHdr, LwpSvStream* pStrm):LwpVirtualPiece(objHdr, pStrm) + { + m_pOverride = new LwpParaBorderOverride(); + } +}; + +class LwpBreaksPiece : public LwpVirtualPiece +{ +public: + LwpBreaksPiece(LwpObjectHeader& objHdr, LwpSvStream* pStrm):LwpVirtualPiece(objHdr, pStrm) + { + m_pOverride = new LwpBreaksOverride(); + } +}; + +class LwpNumberingPiece : public LwpVirtualPiece +{ +public: + LwpNumberingPiece(LwpObjectHeader& objHdr, LwpSvStream* pStrm):LwpVirtualPiece(objHdr, pStrm) + { + m_pOverride = new LwpNumberingOverride(); + } +}; + +class LwpTabPiece : public LwpVirtualPiece +{ +public: + LwpTabPiece(LwpObjectHeader& objHdr, LwpSvStream* pStrm):LwpVirtualPiece(objHdr, pStrm) + { + m_pOverride = new LwpTabOverride(); + } +}; + + +class LwpBackgroundPiece : public LwpVirtualPiece +{ +public: + LwpBackgroundPiece(LwpObjectHeader& objHdr, LwpSvStream* pStrm):LwpVirtualPiece(objHdr, pStrm) + { + m_pOverride = new LwpBackgroundOverride(); + } +}; + +class LwpAlignmentPiece : public LwpVirtualPiece +{ +public: + LwpAlignmentPiece(LwpObjectHeader& objHdr, LwpSvStream* pStrm):LwpVirtualPiece(objHdr, pStrm) + { + m_pOverride = new LwpAlignmentOverride(); + } +}; + +class LwpIndentPiece : public LwpVirtualPiece +{ +public: + LwpIndentPiece(LwpObjectHeader& objHdr, LwpSvStream* pStrm):LwpVirtualPiece(objHdr, pStrm) + { + m_pOverride = new LwpIndentOverride(); + } +}; + +class LwpSpacingPiece : public LwpVirtualPiece +{ +public: + LwpSpacingPiece(LwpObjectHeader& objHdr, LwpSvStream* pStrm):LwpVirtualPiece(objHdr, pStrm) + { + m_pOverride = new LwpSpacingOverride(); + } +}; + +class LwpAmikakePiece : public LwpVirtualPiece +{ +public: + LwpAmikakePiece(LwpObjectHeader& objHdr, LwpSvStream* pStrm):LwpVirtualPiece(objHdr, pStrm) + { + m_pOverride = new LwpAmikakeOverride(); + } +}; + +class LwpCharacterBorderPiece : public LwpVirtualPiece +{ +public: + LwpCharacterBorderPiece(LwpObjectHeader& objHdr, LwpSvStream* pStrm):LwpVirtualPiece(objHdr, pStrm) + { + m_pOverride = new LwpCharacterBorderOverride(); + } +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwpproplist.cxx b/lotuswordpro/source/filter/lwpproplist.cxx new file mode 100644 index 000000000000..05b1c37c835d --- /dev/null +++ b/lotuswordpro/source/filter/lwpproplist.cxx @@ -0,0 +1,151 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ + +#include "lwpproplist.hxx" + +LwpPropListElement::LwpPropListElement(LwpObjectHeader &objHdr, LwpSvStream *pStrm) +:LwpDLVList(objHdr,pStrm) +{ +} + +LwpPropListElement* LwpPropListElement::GetNext() +{ + return static_cast<LwpPropListElement*>(LwpDLVList::GetNext()->obj()); +} + +void LwpPropListElement::Read() +{ + LwpDLVList::Read(); + m_Name.Read(m_pObjStrm); + m_Value.Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); +} + +sal_Bool LwpPropListElement::IsNamed(OUString name) +{ + return name.equals(m_Name.str()); +} + +OUString LwpPropList::GetNamedProperty(OUString name) +{ + LwpPropListElement* pProp = FindPropByName(name); + if (pProp) + { + return pProp->GetValue().str(); + } + return OUString(A2OUSTR("")); +} + +LwpPropListElement* LwpPropList::FindPropByName(OUString name) +{ + LwpPropListElement* pElement = GetFirst(); + + while(pElement) + { + if (pElement->IsNamed(name)) + return pElement; + pElement = pElement->GetNext(); + } + return NULL; +} + +void LwpPropList::Read(LwpObjectStream* pObjStrm) +{ + LwpDLVListHead::Read(pObjStrm); +} + +LwpPropListElement* LwpPropList::GetFirst() +{ + return static_cast<LwpPropListElement*>(LwpDLVListHead::GetFirst()->obj()); +} + +OUString LwpPropList::EnumNamedProperty(OUString& name,OUString& value) +{ + LwpPropListElement* pElement; + if (name.getLength()==0) + { + pElement = GetFirst(); + if (pElement) + { + value = pElement->GetValue().str(); + name = pElement->GetName().str(); + pElement = pElement->GetNext(); + return pElement->GetName().str(); + } + else + return A2OUSTR(""); + + } + else + { + pElement = FindPropByName(name); + if (pElement) + { + value = pElement->GetValue().str(); + pElement = pElement->GetNext(); + if(pElement) + return pElement->GetName().str(); + } + return A2OUSTR(""); + } +} diff --git a/lotuswordpro/source/filter/lwpproplist.hxx b/lotuswordpro/source/filter/lwpproplist.hxx new file mode 100644 index 000000000000..af732dcadf5b --- /dev/null +++ b/lotuswordpro/source/filter/lwpproplist.hxx @@ -0,0 +1,99 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ + +#ifndef _LWPPROPLIST_HXX_ +#define _LWPPROPLIST_HXX_ + +#include "lwpobj.hxx" +#include "lwpdlvlist.hxx" +#include "lwpatomholder.hxx" + +class LwpPropListElement : public LwpDLVList +{ +public: + LwpPropListElement(LwpObjectHeader &objHdr, LwpSvStream *pStrm); + ~LwpPropListElement(){}; + void Read(); + sal_Bool IsNamed(OUString name); + LwpPropListElement* GetNext(); + LwpAtomHolder GetValue(){return m_Value;} + LwpAtomHolder GetName(){return m_Name;} +private: + LwpAtomHolder m_Name; + LwpAtomHolder m_Value; +}; + +class LwpPropList : public LwpDLVListHead +{ +public: + LwpPropList(){}; + ~LwpPropList(){}; + void Read(LwpObjectStream* pObjStrm); + LwpPropListElement* GetFirst(); + OUString GetNamedProperty(OUString name); + OUString EnumNamedProperty(OUString& name,OUString& value); +private: + LwpPropListElement* FindPropByName(OUString name); +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpprtinfo.cxx b/lotuswordpro/source/filter/lwpprtinfo.cxx new file mode 100644 index 000000000000..16e6bf53a704 --- /dev/null +++ b/lotuswordpro/source/filter/lwpprtinfo.cxx @@ -0,0 +1,105 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "lwpprtinfo.hxx" + +LwpPrinterInfo::LwpPrinterInfo(LwpObjectStream* pStrm) +{ + Read(pStrm); +} +/** + * @descr read printer info in VO_DOCUMENT + */ +void LwpPrinterInfo::Read(LwpObjectStream* pStrm) +{ + //Just skip now + Skip(pStrm); +} +/** + * @descr skip printer info in VO_DOCUMENT + */ +void LwpPrinterInfo::Skip(LwpObjectStream *pStrm) +{ + sal_uInt16 platform; + pStrm->QuickRead(&platform, sizeof(platform)); + + //Skip the size and the buffer + sal_uInt32 size; + pStrm->QuickRead(&size, sizeof(size)); + pStrm->SeekRel(static_cast<sal_uInt16>(size)); + + //Skip others printer infor + pStrm->SeekRel(6*sizeof(sal_uInt16)+sizeof(sal_uInt32)+sizeof(sal_uInt16)); + + //Skip the next five LwpAtomHolder + { + LwpAtomHolder toSkip; + toSkip.Skip(pStrm); + toSkip.Skip(pStrm); + toSkip.Skip(pStrm); + toSkip.Skip(pStrm); + toSkip.Skip(pStrm); + } + + sal_uInt16 count; + pStrm->QuickRead(&count, sizeof(count)); + //Skip each selected division + LwpAtomHolder toSkip; + while(count--) + { + toSkip.Skip(pStrm); + pStrm->SkipExtra(); + } + pStrm->SkipExtra(); +} diff --git a/lotuswordpro/source/filter/lwpprtinfo.hxx b/lotuswordpro/source/filter/lwpprtinfo.hxx new file mode 100644 index 000000000000..e658d863714a --- /dev/null +++ b/lotuswordpro/source/filter/lwpprtinfo.hxx @@ -0,0 +1,92 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPPRINTERINFO_HXX +#define _LWPPRINTERINFO_HXX + +#include "lwpatomholder.hxx" +#include "lwpobjstrm.hxx" +/** + * @brief printer info used in VO_DOCUMENT + * not parsed yet +*/ +class LwpPrinterInfo +{ +public: + LwpPrinterInfo(LwpObjectStream* pStrm); + ~LwpPrinterInfo(){}; +private: + LwpAtomHolder m_OutputFile; + LwpAtomHolder cSelectedDivisions; + + LwpAtomHolder m_Output; + LwpAtomHolder m_Name; + LwpAtomHolder m_Driver; + LwpAtomHolder m_Queue; + LwpAtomHolder m_SelectedPages; + +public: + void Read(LwpObjectStream* pStrm); + void Skip(LwpObjectStream *pStrm); +}; +#endif diff --git a/lotuswordpro/source/filter/lwppttntbl.hxx b/lotuswordpro/source/filter/lwppttntbl.hxx new file mode 100644 index 000000000000..ec4beaf050d3 --- /dev/null +++ b/lotuswordpro/source/filter/lwppttntbl.hxx @@ -0,0 +1,145 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* +* Change History +* 2005-06-01 created +************************************************************************/ +/** + * @file + * For LWP filter architecture prototype + * WordPro Pattern Table + */ + +#ifndef _LTPATTERNTABLE_HXX +#define _LTPATTERNTABLE_HXX + +static sal_uInt8 s_pLwpPatternTab[][8] = { //Id Name + { 0xDF, 0xAF, 0x77, 0x77, 0x77, 0x77, 0xFA, 0xFD },//0 Transparent + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },//1 SolidForeground + { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },//2 SolidBackground + { 0x7F, 0xFF, 0xF7, 0xFF, 0x7F, 0xFF, 0xF7, 0xFF },//3 BACK_10PCTDOTS(31 GrayScale4thLightest) + { 0x77, 0xFF, 0xDD, 0xFF, 0x77, 0xFF, 0xDD, 0xFF },//4 BACK_30PCTDOTS(30 GrayScale5thLightest) + { 0x6F, 0xFF, 0xB5, 0xFF, 0xB5, 0xFF, 0xDA, 0xFF },//5 BACK_50PCTDOTS + { 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD },//6 + { 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22 },//7 + { 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88 },//8 + { 0x22, 0x00, 0x88, 0x00, 0x22, 0x00, 0x88, 0x00 },//9 + { 0x80, 0x00, 0x08, 0x00, 0x80, 0x00, 0x08, 0x00 },//10 + { 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00 },//11 + { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },//12 + { 0xB1, 0x30, 0x03, 0x1B, 0xD8, 0xC0, 0x0C, 0x8D },//13 + { 0x80, 0x10, 0x02, 0x20, 0x01, 0x08, 0x40, 0x04 },//14 + { 0x33, 0x99, 0xCC, 0x66, 0x33, 0x99, 0xCC, 0x66 },//15 + { 0x77, 0xBB, 0xDD, 0xEE, 0x77, 0xBB, 0xDD, 0xEE },//16 + { 0x6F, 0xB7, 0xDB, 0xED, 0xF6, 0x7B, 0xBD, 0xDE },//17 + { 0x5F, 0xAF, 0xD7, 0xEB, 0xF5, 0xFA, 0x7D, 0xBE },//18 + { 0xEA, 0x75, 0xBA, 0x5D, 0xAE, 0x57, 0xAB, 0xD5 },//19 + { 0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD, 0xFE },//20 + { 0xCC, 0x99, 0x33, 0x66, 0xCC, 0x99, 0x33, 0x66 },//21 + { 0xEE, 0xDD, 0xBB, 0x77, 0xEE, 0xDD, 0xBB, 0x77 },//22 + { 0xDE, 0xBD, 0x7B, 0xF6, 0xED, 0xDB, 0xB7, 0x6F },//23 + { 0xFA, 0xF5, 0xEB, 0xD7, 0xAF, 0x5F, 0xBE, 0x7D },//24 + { 0x57, 0xAE, 0x5D, 0xBA, 0x75, 0xEA, 0xD5, 0xAB },//25 + { 0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F },//26 + { 0x44, 0xAA, 0x11, 0xAA, 0x44, 0xAA, 0x11, 0xAA },//27 + { 0xBB, 0x55, 0xEE, 0x55, 0xBB, 0x55, 0xEE, 0x55 },//28 + { 0x7E, 0xBD, 0xDB, 0xE7, 0xE7, 0xDB, 0xBD, 0x7E },//29 + { 0xF9, 0xF6, 0x6F, 0x9F, 0x9F, 0x6F, 0xF6, 0xF9 },//30 + { 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF },//31 + { 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00 },//32 + { 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF },//33 + { 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },//34 + { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 },//35 + { 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99 },//36 + { 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB },//37 + { 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE },//38 + { 0xFF, 0x55, 0xFF, 0x55, 0xFF, 0x55, 0xFF, 0x55 },//39 + { 0xBB, 0xBB, 0x00, 0xBB, 0xBB, 0xBB, 0x00, 0xBB },//40 + { 0x00, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD },//41 + { 0x22, 0x00, 0x20, 0x00, 0xAA, 0x00, 0x20, 0x00 },//42 + { 0x40, 0xA0, 0x00, 0x00, 0x04, 0x0A, 0x00, 0x00 },//43 + { 0x01, 0x80, 0x00, 0x08, 0x10, 0x20, 0x00, 0x02 },//44 + { 0xED, 0xED, 0x0C, 0xC0, 0xDE, 0xDE, 0xC0, 0x0C },//45 + { 0xC1, 0xE2, 0x77, 0x2E, 0x1C, 0x3A, 0x77, 0xA3 },//46 + { 0x00, 0xF7, 0xF7, 0xF7, 0x00, 0x7F, 0x7F, 0x7F },//47 + { 0x7C, 0xBB, 0xC7, 0xEF, 0xDF, 0xBF, 0x7F, 0xFE },//48 + { 0xFF, 0x33, 0xFF, 0xCC, 0xFF, 0x33, 0xFF, 0xCC },//49 + { 0xCC, 0xCC, 0x33, 0x33, 0x33, 0x33, 0xCC, 0xCC },//50 + { 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F },//51 + { 0xC3, 0xC3, 0xC3, 0xC3, 0x3C, 0x3C, 0x3C, 0x3C },//52 + { 0x33, 0x33, 0xCC, 0xCC, 0x33, 0x33, 0xCC, 0xCC },//53 + { 0x08, 0x08, 0x14, 0x22, 0xC9, 0x22, 0x14, 0x08 },//54 + { 0x0A, 0x04, 0x04, 0x55, 0xA0, 0x40, 0x40, 0x55 },//55 + { 0x01, 0x01, 0x03, 0x84, 0x48, 0x30, 0x0C, 0x02 },//56 + { 0x28, 0xC7, 0x01, 0x01, 0x82, 0x7C, 0x10, 0x10 },//57 + { 0x40, 0x80, 0x01, 0x02, 0x04, 0x8A, 0x55, 0xFF },//58 + { 0xC7, 0xC7, 0xBB, 0x4C, 0x7C, 0x7C, 0xBB, 0xC4 },//59 + { 0x8A, 0x05, 0x02, 0x00, 0x02, 0x05, 0x8A, 0x55 },//60 + { 0x28, 0x44, 0x82, 0x11, 0x00, 0x55, 0x00, 0x11 },//61 + { 0x81, 0x41, 0x60, 0x70, 0x78, 0x70, 0x60, 0x41 },//62 + { 0xEE, 0x57, 0xAB, 0x55, 0xEE, 0x5D, 0xBA, 0x75 },//63 + +// + { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },//2 SolidBackground + { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },//2 SolidBackground + { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },//2 SolidBackground + { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },//2 SolidBackground + { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },//2 SolidBackground + { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },//2 SolidBackground + { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },//2 SolidBackground + { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },//2 SolidBackground +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpresource.hxx b/lotuswordpro/source/filter/lwpresource.hxx new file mode 100644 index 000000000000..5b26de03422d --- /dev/null +++ b/lotuswordpro/source/filter/lwpresource.hxx @@ -0,0 +1,65 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _RESOURCE_HXX +#define _RESOURCE_HXX + +#define IMPLEMENTATION_NAME "com.ibm.ILWPImportFilter" + +const char STR_WORDPRO[] = "Wordpro"; +const char STR_IMPLEMENTATION_NAME[] = IMPLEMENTATION_NAME; +const char STR_SERVICE_NAME[] = "com.sun.star.document.ImportFilter"; +const char STR_WRITER_IMPORTER_NAME[] = "com.sun.star.comp.Writer.XMLImporter"; + +#endif diff --git a/lotuswordpro/source/filter/lwprowlayout.cxx b/lotuswordpro/source/filter/lwprowlayout.cxx new file mode 100644 index 000000000000..9fd2a8f8a2f7 --- /dev/null +++ b/lotuswordpro/source/filter/lwprowlayout.cxx @@ -0,0 +1,491 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - row layouts + */ +/************************************************************************* + * Change History + April 2005 Created + ************************************************************************/ +#include "lwprowlayout.hxx" +#include "lwptable.hxx" +#include "lwpglobalmgr.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xfrow.hxx" +#include "xfilter/xfrowstyle.hxx" +#include "xfilter/xftablestyle.hxx" +#include "xfilter/xftable.hxx" +#include "xfilter/xfcell.hxx" +#include "xfilter/xfcellstyle.hxx" + +LwpRowLayout::LwpRowLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpVirtualLayout(objHdr, pStrm) +{ + m_ConnCellList.clear(); +} + +LwpRowLayout::~LwpRowLayout() +{} + +/** + * @short register row style + * @param + * @param + * @param + * @return + */ +void LwpRowLayout::SetRowMap(void) +{ + LwpObjectID *pCellID= GetChildHead(); + LwpCellLayout * pCellLayout = static_cast<LwpCellLayout *>(pCellID->obj()); + + while(pCellLayout) + { + pCellLayout->SetCellMap(); + + pCellID = pCellLayout->GetNext(); + pCellLayout = static_cast<LwpCellLayout *>(pCellID->obj()); + } +} +/** + * @short register row style + * @param + * @param + * @param + * @return + */ +void LwpRowLayout::RegisterStyle() +{ + // register row style + XFRowStyle *pRowStyle = new XFRowStyle(); + + if (m_nDirection & 0x0030) + { + pRowStyle->SetMinRowHeight((float)LwpTools::ConvertFromUnitsToMetric(cheight)); + } + else + { + pRowStyle->SetRowHeight((float)LwpTools::ConvertFromUnitsToMetric(cheight)); + } + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_StyleName = pXFStyleManager->AddStyle(pRowStyle)->GetStyleName(); + + LwpTableLayout* pTableLayout = GetParentTableLayout(); + LwpTable * pTable = NULL; + if (pTableLayout) + { + pTable = pTableLayout->GetTable(); + } + // register cells' style + LwpObjectID *pCellID= GetChildHead(); + LwpCellLayout * pCellLayout = static_cast<LwpCellLayout *>(pCellID->obj()); + + while(pCellLayout) + { + pCellLayout->SetFoundry(m_pFoundry); + pCellLayout->RegisterStyle(); + pCellID = pCellLayout->GetNext(); + pCellLayout = static_cast<LwpCellLayout *>(pCellID->obj()); + } + +} +/** + * @short register row style + * @param + * @param + * @param + * @return + */ +void LwpRowLayout::Read() +{ + #define MAXUNIT (0x7fffffffL) // Highest positive UNIT value + LwpObjectStream* pStrm = m_pObjStrm; + + LwpVirtualLayout::Read(); + + //skip CLiteLayout data; + LwpAtomHolder ContentClass; + ContentClass.Read(pStrm); + pStrm->SkipExtra(); + + // Row layout content + crowid = pStrm->QuickReaduInt16(); + cheight = pStrm->QuickReadInt32(); + cLeaderDotCount = (sal_uInt8)pStrm->QuickReaduInt16(); // was written as lushort. + cLeaderDotY = MAXUNIT; // Sentinel meaning "not calculated yet" + cRowFlags = (sal_uInt8)pStrm->QuickReaduInt16(); // was written as lushort. + + pStrm->SkipExtra(); +} + +/** + * @short Parse rows with connect cell + * @param pXFTable - pointer to created XFTable + */ +void LwpRowLayout::ConvertRow(XFTable* pXFTable,sal_uInt8 nStartCol,sal_uInt8 nEndCol) +{ + XFRow* pXFRow = new XFRow; + + LwpTableLayout* pTableLayout = GetParentTableLayout(); + LwpTable* pTable = pTableLayout->GetTable(); + + //calculate the connected cell position + sal_Int32 nMarkConnCell; + nMarkConnCell = FindMarkConnCell(nStartCol,nEndCol); + + //if there is no connected cell + if (nMarkConnCell == -1) + { + ConvertCommonRow(pXFTable,nStartCol,nEndCol); + return; + } + + //register connect row style + sal_uInt16 nRowMark = crowid + GetCurMaxSpannedRows(nStartCol,nEndCol); + RegisterCurRowStyle(pXFRow,nRowMark); + + sal_Bool bIsRight = sal_False; + sal_Bool bIsTop = sal_False; + + //if there is connected cell + for (sal_uInt8 i=nStartCol; i<nEndCol; ) + { + XFCell* pXFCell; + sal_uInt8 nColMark; + + if (nMarkConnCell == -1) + nColMark = nEndCol; + else + nColMark = m_ConnCellList[nMarkConnCell]->GetColID(); + + if (nColMark > i)//create subtable + { + pXFCell = new XFCell; + pXFCell->SetColumnSpaned(nColMark-i); + XFTable* pSubTable = new XFTable; + pTableLayout->ConvertTable(pSubTable,crowid,nRowMark,i,nColMark); + pXFCell->Add(pSubTable); + i = nColMark; + } + else + { + sal_uInt8 nColID = m_ConnCellList[nMarkConnCell]->GetColID() + +m_ConnCellList[nMarkConnCell]->GetNumcols()-1; + pXFCell = m_ConnCellList[nMarkConnCell]->ConvertCell( + *pTable->GetObjectID(), + crowid+m_ConnCellList[nMarkConnCell]->GetNumrows()-1, + m_ConnCellList[nMarkConnCell]->GetColID()); + + //set all cell in this merge cell to cellsmap + for (sal_uInt16 nRowLoop = crowid;nRowLoop<nRowMark ;nRowLoop++) + for (sal_uInt8 nColLoop = i;nColLoop<nColID+1;nColLoop++) + pTableLayout->SetCellsMap(nRowLoop,nColLoop,pXFCell); + + i += m_ConnCellList[nMarkConnCell]->GetNumcols(); + nMarkConnCell = FindNextMarkConnCell(static_cast<sal_uInt16>(nMarkConnCell),nEndCol); + } + + if (pXFCell) + pXFRow->AddCell(pXFCell); + } + pXFTable->AddRow(pXFRow); +} + +/** + * @short register row style in SODC table + * @param pXFRow - pointer of row + * @param nRowMark - spanned row number + */ +void LwpRowLayout::RegisterCurRowStyle(XFRow* pXFRow,sal_uInt16 nRowMark) +{ + XFRowStyle* pRowStyle; + XFRowStyle* pNewStyle = new XFRowStyle; + double fHeight; + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + pRowStyle = static_cast<XFRowStyle*>(pXFStyleManager->FindStyle(m_StyleName)); + if (!pRowStyle) + return; + fHeight = pRowStyle->GetRowHeight(); + + *pNewStyle = *pRowStyle; + std::map<sal_uInt16,LwpRowLayout*>::iterator iter; + LwpTableLayout* pTableLayout = GetParentTableLayout(); + if (!pTableLayout) + return; + std::map<sal_uInt16,LwpRowLayout*> RowsMap = pTableLayout->GetRowsMap(); + + for (sal_uInt16 i=crowid+1; i<nRowMark;i++) + { + iter = RowsMap.find(i); + if (iter == RowsMap.end()) + { + pRowStyle = static_cast<XFRowStyle*>( + pXFStyleManager->FindStyle(pTableLayout->GetDefaultRowStyleName())); + fHeight += pRowStyle->GetRowHeight(); + } + else + { + pRowStyle = static_cast<XFRowStyle*>( + pXFStyleManager->FindStyle(iter->second->GetStyleName())); + fHeight+=pRowStyle->GetRowHeight(); + } + } + + if (m_nDirection & 0x0030) + { + pNewStyle->SetMinRowHeight((float)fHeight); + } + else + { + pNewStyle->SetRowHeight((float)fHeight); + } + + pXFRow->SetStyleName(pXFStyleManager->AddStyle(pNewStyle)->GetStyleName()); +} + +/** + * @short find max merge cell in a given column range + * @param nStartCol - start column ID + * @param nEndCol - end column ID + */ +sal_Int32 LwpRowLayout::FindMarkConnCell(sal_uInt8 nStartCol,sal_uInt8 nEndCol) +{ + if (m_ConnCellList.size() == 0) + return -1; + + sal_uInt16 nSpannRows = 1; + sal_Int32 nMarkConnCell = -1; + + for (sal_uInt16 i=0;i<m_ConnCellList.size();i++) + { + if (m_ConnCellList[i]->GetColID()>=nEndCol) + break; + if (m_ConnCellList[i]->GetColID()>=nStartCol) + { + if (m_ConnCellList[i]->GetNumrows()>nSpannRows) + { + nSpannRows = m_ConnCellList[i]->GetNumrows(); + nMarkConnCell = i; + } + } + } + return nMarkConnCell; +} + +/** + * @short find next merge cell with the same spanned row number with current merge cell + * @param nStartCol - start column ID + * @param nEndCol - end column ID + */ +sal_Int32 LwpRowLayout::FindNextMarkConnCell(sal_uInt16 nMarkConnCell,sal_uInt8 nEndCol) +{ + sal_uInt16 nMaxRows = m_ConnCellList[nMarkConnCell]->GetNumrows(); + + for (sal_uInt16 i=nMarkConnCell+1;i<m_ConnCellList.size();i++) + { + if (m_ConnCellList[i]->GetColID()>=nEndCol) + break; + if (m_ConnCellList[i]->GetNumrows() == nMaxRows) + { + return i; + } + } + return -1; +} +/** + * @short get max spanned row numbers in a given column range + * @param nStartCol - start column ID + * @param nEndCol - end column ID + */ +sal_uInt16 LwpRowLayout::GetCurMaxSpannedRows(sal_uInt8 nStartCol,sal_uInt8 nEndCol) +{ + sal_Int32 nMarkConnCell = FindMarkConnCell(nStartCol,nEndCol); + if (nMarkConnCell == -1) + return 1; + else + return m_ConnCellList[nMarkConnCell]->GetNumrows(); +} +/** + * @short convert row with rowlayout,but no merge cells + * @param pXFTable - pointer of table + * @param nStartCol - start column ID + * @param nEndCol - end column ID + */ +void LwpRowLayout::ConvertCommonRow(XFTable* pXFTable,sal_uInt8 nStartCol,sal_uInt8 nEndCol) +{ + XFRow* pRow = new XFRow; + pRow->SetStyleName(m_StyleName); + + XFCell * pCell; + LwpTableLayout* pTableLayout = GetParentTableLayout(); + LwpTable* pTable = pTableLayout->GetTable(); + sal_Bool bIsRight = sal_False; + sal_Bool bIsTop = sal_False; + sal_uInt8 nCellStartCol,nCellEndCol; + + for (sal_uInt8 i = nStartCol; i < nEndCol ; i++) + { + // add row to table + LwpObjectID *pCellID= GetChildHead(); + LwpCellLayout * pCellLayout = static_cast<LwpCellLayout *>(pCellID->obj()); + nCellStartCol = i;//mark the begin position of cell + nCellEndCol = i;//mark the end position of cell + while(pCellLayout) + { + if (pCellLayout->GetColID() == i) + { + if (pCellLayout->GetLayoutType() == LWP_CONNECTED_CELL_LAYOUT) + { + LwpConnectedCellLayout* pConnCell = static_cast<LwpConnectedCellLayout*>(pCellLayout); + nCellEndCol = i+pConnCell->GetNumcols()-1; + i = nCellEndCol; + } + pCell = pCellLayout->ConvertCell(*pTable->GetObjectID(),crowid,i); + break; + } + pCellID = pCellLayout->GetNext(); + pCellLayout = static_cast<LwpCellLayout *>(pCellID->obj()); + } + if (!pCellLayout) + { + // if table has default cell layout, use it to ConvertCell + // otherwise use blank cell + LwpCellLayout * pDefaultCell = pTableLayout->GetDefaultCellLayout(); + if (pDefaultCell) + { + pCell = pDefaultCell->ConvertCell( + *pTable->GetObjectID(),crowid, i); + } + else + { + pCell = new XFCell; + } + } + pRow->AddCell(pCell); + + for (sal_uInt8 j=nCellStartCol;j<=nCellEndCol;j++) + pTableLayout->SetCellsMap(crowid,j,pCell);//set to cellsmap + } + + pXFTable->AddRow(pRow); +} +/** + * @short collect merge cell info when register row styles + */ +void LwpRowLayout::CollectMergeInfo() +{ + LwpObjectID *pCellID= GetChildHead(); + LwpCellLayout * pCellLayout = static_cast<LwpCellLayout *>(pCellID->obj()); + + while(pCellLayout) + { + if (pCellLayout->GetLayoutType() == LWP_CONNECTED_CELL_LAYOUT) + { + LwpConnectedCellLayout* pConnCell = static_cast<LwpConnectedCellLayout*>(pCellLayout); + m_ConnCellList.push_back(pConnCell); + } + pCellID = pCellLayout->GetNext(); + pCellLayout = static_cast<LwpCellLayout *>(pCellID->obj()); + } +} +/** + * @short split merge cells in this row + * @param nEffectRows - max spanned number of prevoius row + */ +void LwpRowLayout::SetCellSplit(sal_uInt16 nEffectRows) +{ + LwpConnectedCellLayout* pConnCell; + for (sal_uInt32 i=0; i<m_ConnCellList.size(); i++) + { + pConnCell = m_ConnCellList[i]; + sal_uInt16 nRowSpan = pConnCell->GetRowID()+pConnCell->GetNumrows(); + if ( nRowSpan > nEffectRows ) + { + pConnCell->SetNumrows(nEffectRows - pConnCell->GetRowID()); + } + } +} +/** + * @short check if the row has merge cell + */ +sal_Bool LwpRowLayout::GetMergeCellFlag() +{ + if (m_ConnCellList.size() == 0) + return sal_False; + else + return sal_True; +} + + +LwpRowHeadingLayout::LwpRowHeadingLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpRowLayout(objHdr, pStrm) +{} + +LwpRowHeadingLayout::~LwpRowHeadingLayout() +{} +void LwpRowHeadingLayout::Read() +{ + LwpRowLayout::Read(); + + cRowLayout.ReadIndexed(m_pObjStrm); + m_pObjStrm->SkipExtra(); +} + +LwpRowLayout * LwpRowHeadingLayout::GetRowLayout() +{ + LwpRowLayout * pRow = static_cast<LwpRowLayout *>(cRowLayout.obj()); + return pRow; +} diff --git a/lotuswordpro/source/filter/lwprowlayout.hxx b/lotuswordpro/source/filter/lwprowlayout.hxx new file mode 100644 index 000000000000..852d8cbe5734 --- /dev/null +++ b/lotuswordpro/source/filter/lwprowlayout.hxx @@ -0,0 +1,134 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - row layouts + */ +/************************************************************************* + * Change History + April 2005 Created + ************************************************************************/ +#ifndef _LWPROWLAYOUT_HXX +#define _LWPROWLAYOUT_HXX + +#include "lwplayout.hxx" +#include "lwptablelayout.hxx" +#include "lwpcelllayout.hxx" + +class XFCell; +class XFRow; +class XFTable; +class LwpTableLayout; +class XFRowStyle; +/** + * @brief + * VO_ROWLAYOUT obj + */ +class LwpRowLayout : public LwpVirtualLayout +{ +public: + LwpRowLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpRowLayout(); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_ROW_LAYOUT;}; + sal_uInt16 GetRowID() { return crowid;}; + virtual void RegisterStyle(); + inline LwpTableLayout * GetParentTableLayout(){return static_cast<LwpTableLayout *>(GetParent()->obj());}; + void SetRowMap(void); +protected: + void Read(); + sal_uInt16 crowid; + sal_Int32 cheight; // Minimum height if height is automatic. + sal_uInt8 cLeaderDotCount; // dfb - # of cells with leader dots + sal_Int32 cLeaderDotY; + sal_uInt8 cRowFlags; + enum // for cRowFlags + { + RF_HAS_BORDER = 0x01, + RF_VALID_HAS_BORDER = 0x02, + RF_LEADER_COUNT_VALID = 0x4 + }; +private: + std::vector<LwpConnectedCellLayout*> m_ConnCellList; + sal_Int32 FindMarkConnCell(sal_uInt8 nStartCol,sal_uInt8 nEndCol); + sal_Int32 FindNextMarkConnCell(sal_uInt16 nMarkConnCell,sal_uInt8 nEndCol); + +public: + void ConvertRow(XFTable* pXFTable,sal_uInt8 nStartCol,sal_uInt8 nEndCol); + void ConvertCommonRow(XFTable* pXFTable,sal_uInt8 nStartCol,sal_uInt8 nEndCol); + void CollectMergeInfo(); + void SetCellSplit(sal_uInt16 nEffectRows); + sal_Bool GetMergeCellFlag(); + sal_uInt16 GetCurMaxSpannedRows(sal_uInt8 nStartCol,sal_uInt8 nEndCol); + void RegisterCurRowStyle(XFRow* pXFRow,sal_uInt16 nRowMark); +}; + + +/** + * @brief + * VO_ROWHEADINGLAYOUT obj + */ +class LwpRowHeadingLayout : public LwpRowLayout +{ +public: + LwpRowHeadingLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpRowHeadingLayout(); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_ROW_HEADING_LAYOUT;} + LwpRowLayout * GetRowLayout(); +protected: + void Read(); + LwpObjectID cRowLayout; +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpsdwdrawheader.hxx b/lotuswordpro/source/filter/lwpsdwdrawheader.hxx new file mode 100644 index 000000000000..44ed8f9dc931 --- /dev/null +++ b/lotuswordpro/source/filter/lwpsdwdrawheader.hxx @@ -0,0 +1,297 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/***************************************************************************** + * Change History + * Mar 2005 Created + ****************************************************************************/ +/** + * @file + * For LWP filter architecture prototype + * The file declares structures and enums used by Lwp-Drawing-Module + */ + +#ifndef _LWPSDWRAWHEADER_HXX +#define _LWPSDWRAWHEADER_HXX + +#include "lwpheader.hxx" +#include "lwptools.hxx" + +const sal_uInt8 DRAW_FACESIZE = 32; +const double THRESHOLD = 0.0001; + +enum DrawObjectType +{ + OT_UNDEFINED, + OT_SELECT = 0, + OT_HAND = 1, + OT_LINE = 2, + OT_PERPLINE = 3, + OT_POLYLINE = 4, + OT_POLYGON = 5, + OT_RECT = 6, + OT_SQUARE = 7, + OT_RNDRECT = 8, + OT_RNDSQUARE = 9, + OT_OVAL = 10, + OT_CIRCLE = 11, + OT_ARC = 12, + OT_TEXT = 13, + OT_GROUP = 14, + OT_CHART = 15, + OT_METAFILE = 16, + OT_METAFILEIMG = 17, + OT_BITMAP = 18, + OT_TEXTART = 19, + OT_BIGBITMAP = 20 +}; + +enum DrawFillType +{ + FT_TRANSPARENT = 0, + FT_VLTGRAY = 1, + FT_LTGRAY = 2, + FT_GRAY = 3, + FT_DKGRAY = 4, + FT_SOLID = 5, + FT_HORZHATCH = 6, + FT_VERTHATCH = 7, + FT_FDIAGHATCH = 8, + FT_BDIAGHATCH = 9, + FT_CROSSHATCH = 10, + FT_DIAGCROSSHATCH = 11, + FT_PATTERN = 12 +}; + +enum DrawLineStyle +{ + LS_SOLID = 0, + LS_DASH = 1, + LS_DOT = 2, + LS_DASHDOT = 3, + LS_DASHDOTDOT = 4, + LS_NULL = 5, + LS_INSIDEFRAME = 6 +}; + +// Text Attributes as stored in Draw files V1.2 and earlier +enum DrawTextAttribute +{ + TA_BOLD = 0x0001, /* bolded font */ + TA_ITALIC = 0x0002, /* italic font */ + TA_UNDERLINE = 0x0004, /* underlined font */ + TA_WORDUNDERLINE = 0x0008, /* broken underline */ + TA_ALLCAPS = 0x0010, /* capitalized font */ + TA_SMALLCAPS = 0x0020, /* all small capital letters */ + TA_DOUBLEUNDER = 0x0040, /* double underline */ + TA_STRIKETHRU = 0x0080, /* strikethru */ + TA_SUPERSCRIPT = 0x0100, /* superscript */ + TA_SUBSCRIPT = 0x0200 /* subscript */ +}; + +enum DrawArrowHead +{ + AH_ARROW_NONE = 0, + AH_ARROW_FULLARROW = 1, + AH_ARROW_HALFARROW = 2, + AH_ARROW_LINEARROW = 3, + AH_ARROW_INVFULLARROW = 4, + AH_ARROW_INVHALFARROW = 5, + AH_ARROW_INVLINEARROW = 6, + AH_ARROW_TEE = 7, + AH_ARROW_SQUARE = 8, + AH_ARROW_CIRCLE = 9 +}; + +struct SdwPoint +{ + sal_Int16 x; + sal_Int16 y; +}; + +struct SdwColor +{ + sal_uInt8 nR; + sal_uInt8 nG; + sal_uInt8 nB; + sal_uInt8 unused; +}; + +struct SdwClosedObjStyleRec +{ + sal_uInt8 nLineWidth; + sal_uInt8 nLineStyle; + SdwColor aPenColor; + SdwColor aForeColor; + SdwColor aBackColor; + sal_uInt16 nFillType; + sal_uInt8 pFillPattern[8]; +}; + +struct SdwDrawObjHeader +{ +// sal_uInt8 nType +// sal_uInt8 nFlags; + sal_uInt16 nRecLen; + sal_Int16 nLeft; + sal_Int16 nTop; + sal_Int16 nRight; + sal_Int16 nBottom; +// sal_uInt16 nextObj; +// sal_uInt16 prevObj; +}; + +struct SdwLineRecord +{ + sal_Int16 nStartX; + sal_Int16 nStartY; + sal_Int16 nEndX; + sal_Int16 nEndY; + sal_uInt8 nLineWidth; + sal_uInt8 nLineEnd; + sal_uInt8 nLineStyle; + SdwColor aPenColor; +}; + +struct SdwPolyLineRecord +{ + sal_uInt8 nLineWidth; + sal_uInt8 nLineEnd; + sal_uInt8 nLineStyle; + SdwColor aPenColor; + sal_uInt16 nNumPoints; +}; + +struct SdwArcRecord +{ + sal_uInt8 nLineWidth; + sal_uInt8 nLineEnd; + sal_uInt8 nLineStyle; + SdwColor aPenColor; +}; + +struct SdwTextBoxRecord +{ + sal_Int16 nTextWidth; + sal_Int16 nTextHeight; + sal_Int16 nTextSize; + SdwColor aTextColor; + sal_uInt8 tmpTextFaceName[DRAW_FACESIZE]; + sal_uInt16 nTextAttrs; + sal_uInt16 nTextCharacterSet; + sal_Int16 nTextRotation; + sal_Int16 nTextExtraSpacing; + sal_uInt8* pTextString; +}; + +struct SdwFMPATH +{ + sal_uInt16 n; + SdwPoint* pPts; +}; + +struct SdwTextArt : public SdwTextBoxRecord +{ + sal_uInt8 nIndex; + sal_Int16 nRotation; + sal_uInt16 nTextLen; + SdwFMPATH aPath[2]; +}; + +struct SdwBmpRecord +{ + sal_uInt16 nTranslation; + sal_uInt16 nRotation; + sal_uInt32 nFileSize; +}; + +struct BmpInfoHeader +{ + sal_uInt32 nHeaderLen; + sal_uInt16 nWidth; + sal_uInt16 nHeight; + sal_uInt16 nPlanes; + sal_uInt16 nBitCount; +}; + +struct BmpInfoHeader2 +{ + sal_uInt32 nHeaderLen; + sal_uInt32 nWidth; + sal_uInt32 nHeight; + sal_uInt16 nPlanes; + sal_uInt16 nBitCount; +}; + +struct DrawingOffsetAndScale +{ + double fOffsetX; + double fOffsetY; + double fScaleX; + double fScaleY; + double fLeftMargin; + double fTopMargin; + + DrawingOffsetAndScale() + { + fOffsetX = 0.00; + fOffsetY = 0.00; + fScaleX = 1.00; + fScaleY = 1.00; + fLeftMargin = 0.00; + fTopMargin = 0.00; + } +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpsdwfileloader.cxx b/lotuswordpro/source/filter/lwpsdwfileloader.cxx new file mode 100644 index 000000000000..9115a9ca1890 --- /dev/null +++ b/lotuswordpro/source/filter/lwpsdwfileloader.cxx @@ -0,0 +1,148 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/***************************************************************************** + * Change History + * Mar 2005 revised for new processing procedure. + * Jan 2005 created + ****************************************************************************/ +#include "lwpsdwfileloader.hxx" +#include "lwpsdwgrouploaderv0102.hxx" + +#include "xfilter/xfframe.hxx" + +LwpSdwFileLoader::LwpSdwFileLoader(SvStream* pStream, LwpGraphicObject* pGraphicObj, + IXFStream* pOutputStream) +:m_pStream(pStream), m_pGraphicObj(pGraphicObj), m_pOutputStream(pOutputStream) +{ + pStream->Seek(0); +} + +LwpSdwFileLoader::~LwpSdwFileLoader(void) +{ +} +/* +void LwpSdwFileLoader::LoadObjectList(void) +{ + unsigned char BinSignature[2]; + m_pStream->Read(BinSignature,2); + + if (BinSignature[0] == 'S' && BinSignature[1] == 'M') + { + unsigned short nVersion; + m_pStream->Read(&nVersion,2); + + m_pStream->Seek(0); + if (nVersion<0x0102) + { + assert(false); + } + if (nVersion>=0x0102) + { + LwpSdwGroupLoaderV0102 sdwGroupLoader(m_pStream, m_pGraphicObj, m_pOutputStream); + sdwGroupLoader.LoadDrawGroupObject(); + } + } +} +void LwpSdwFileLoader::RegisterStyle() +{ + unsigned char BinSignature[2]; + m_pStream->Read(BinSignature,2); + + if (BinSignature[0] == 'S' && BinSignature[1] == 'M') + { + unsigned short nVersion; + m_pStream->Read(&nVersion,2); + + m_pStream->Seek(0); + if (nVersion<0x0102) + { + assert(false); + } + if (nVersion>=0x0102) + { + LwpSdwGroupLoaderV0102 sdwGroupLoader(m_pStream, m_pGraphicObj, m_pOutputStream); + sdwGroupLoader.RegisterGroupStyle(); + } + } +} +*/ +// add by ,03/25/2005 +/** + * @descr entry of lwp-drawing objects. + * @param pDrawObjVector a container which will contains the created drawing object of XF-Model. + */ +void LwpSdwFileLoader::CreateDrawObjects(vector <XFFrame*>* pDrawObjVector) +{ + unsigned char BinSignature[2]; + m_pStream->Read(BinSignature,2); + + if (BinSignature[0] == 'S' && BinSignature[1] == 'M') + { + unsigned short nVersion; + m_pStream->Read(&nVersion,2); + + m_pStream->Seek(0); + if (nVersion<0x0102) + { + assert(false); + } + if (nVersion>=0x0102) + { + LwpSdwGroupLoaderV0102 sdwGroupLoader(m_pStream, m_pGraphicObj, m_pOutputStream); + sdwGroupLoader.BeginDrawObjects(pDrawObjVector); + } + } +} +// end add
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwpsdwfileloader.hxx b/lotuswordpro/source/filter/lwpsdwfileloader.hxx new file mode 100644 index 000000000000..a082720a4cde --- /dev/null +++ b/lotuswordpro/source/filter/lwpsdwfileloader.hxx @@ -0,0 +1,86 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/***************************************************************************** + * Change History + * Mar 2005 revised for new processing procedure. + * Jan 2005 created + ****************************************************************************/ +#include <assert.h> +#include <tools/stream.hxx> +#include "lwpheader.hxx" +#include "xfilter/ixfstream.hxx" +#include <vector> +using namespace std; + +class XFFrame; +class LwpGraphicObject; +class LwpSdwFileLoader +{ +private: + SvStream* m_pStream; + IXFStream* m_pOutputStream; + LwpGraphicObject* m_pGraphicObj; +public: + LwpSdwFileLoader(SvStream* pStream, LwpGraphicObject* pGraphicObj, + IXFStream* pOutputStream=NULL); + ~LwpSdwFileLoader(void); +public: +// void LoadObjectList(void); +// void RegisterStyle(void); + + // add by ,03/25/2005 + void CreateDrawObjects(vector <XFFrame*>* pDrawObjVector); + // end add +}; diff --git a/lotuswordpro/source/filter/lwpsdwgrouploaderv0102.cxx b/lotuswordpro/source/filter/lwpsdwgrouploaderv0102.cxx new file mode 100644 index 000000000000..daa446e17322 --- /dev/null +++ b/lotuswordpro/source/filter/lwpsdwgrouploaderv0102.cxx @@ -0,0 +1,410 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/***************************************************************************** + * Change History + * Mar 2005 revised for new processing procedure. + * Jan 2005 created + ****************************************************************************/ +#include "lwpsdwgrouploaderv0102.hxx" +#include "lwpdrawobj.hxx" +#include "lwptools.hxx" +#include "lwpcharsetmgr.hxx" +#include "lwpgrfobj.hxx" +#include "lwpframelayout.hxx" + +#include "xfilter/xfcolor.hxx" +#include "xfilter/xfdrawline.hxx" +#include "xfilter/xfdrawpath.hxx" +#include "xfilter/xfdrawpolyline.hxx" +#include "xfilter/xfdrawrect.hxx" +#include "xfilter/xfdrawellipse.hxx" +#include "xfilter/xfdrawpolygon.hxx" +#include "xfilter/xfdrawgroup.hxx" +#include "xfilter/xfdrawcircle.hxx" +#include "xfilter/xfdrawstyle.hxx" +#include "xfilter/xfdrawlinestyle.hxx" +#include "xfilter/xfparagraph.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xfdrawgroup.hxx" + +LwpSdwGroupLoaderV0102::LwpSdwGroupLoaderV0102(SvStream* pStream, LwpGraphicObject* pGraphicObj, + IXFStream* pOutputStream) +:m_pStream(pStream), m_pGraphicObj(pGraphicObj), m_pOutputStream(pOutputStream) +{ +} +LwpSdwGroupLoaderV0102::~LwpSdwGroupLoaderV0102(void) +{ +} + +// add by , 03/25/2005 +/** + * @descr entry of lwp-drawing objects. the functin begins to parse the sdw-drawing bento stream and create + * the corresponding drawing objects. + * @param pDrawObjVector a container which will contains the created drawing object of XF-Model. + */ +void LwpSdwGroupLoaderV0102::BeginDrawObjects(std::vector <XFFrame*>* pDrawObjVector) +{ + // save the container + m_pDrawObjVector = pDrawObjVector; + + //flag + unsigned char BinSignature[2]; + m_pStream->Read(BinSignature,2); + if (BinSignature[0] != 'S' || BinSignature[1] != 'M') + { + assert(false); + return; + } + //version + unsigned short nVersion; + m_pStream->Read(&nVersion,2); + if (nVersion<0x0102) + { + assert(false); + return; + } + // topObj, botObj + m_pStream->SeekRel(4); + //record count + unsigned short nRecCount; + m_pStream->Read(&nRecCount,2); + // selCount + m_pStream->SeekRel(2); + //boundrect + unsigned short left,top,right,bottom; + m_pStream->Read(&left,2); + m_pStream->Read(&top,2); + m_pStream->Read(&right,2); + m_pStream->Read(&bottom,2); + // fileSize + m_pStream->SeekRel(2); + + //for calculating transformation params. + LwpFrameLayout* pMyFrameLayout = static_cast<LwpFrameLayout*>(m_pGraphicObj->GetLayout(NULL)); + if (pMyFrameLayout) + { + LwpLayoutScale* pMyScale = pMyFrameLayout->GetLayoutScale(); + LwpLayoutGeometry* pFrameGeo = pMyFrameLayout->GetGeometry(); + if (pMyScale && pFrameGeo) + { + // original drawing size + long nWidth = 0, nHeight = 0; + m_pGraphicObj->GetGrafOrgSize(nWidth, nHeight); + double fGrafOrgWidth = (double)nWidth/TWIPS_PER_CM; + double fGrafOrgHeight = (double)nHeight/TWIPS_PER_CM; + + // get margin values + double fLeftMargin = pMyFrameLayout->GetMarginsValue(MARGIN_LEFT); +// double fRightMargin = pMyFrameLayout->GetMarginsValue(MARGIN_RIGHT); + double fTopMargin = pMyFrameLayout->GetMarginsValue(MARGIN_TOP); +// double fBottomMargin = pMyFrameLayout->GetMarginsValue(MARGIN_BOTTOM); + + // frame size + double fFrameWidth = LwpTools::ConvertFromUnitsToMetric(pFrameGeo->GetWidth()); + double fFrameHeight = LwpTools::ConvertFromUnitsToMetric(pFrameGeo->GetHeight()); + + // get frame offset + LwpPoint* pOffset = pMyScale->GetOffset(); + double fOffsetX = LwpTools::ConvertFromUnitsToMetric(pOffset->GetX()); + double fOffsetY = LwpTools::ConvertFromUnitsToMetric(pOffset->GetY()); + + // get scale mode + sal_uInt16 nScalemode = pMyScale->GetScaleMode(); + + if (nScalemode & LwpLayoutScale::CUSTOM) + { + m_aTransformData.fScaleX = + LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleWidth()) / fGrafOrgWidth; + m_aTransformData.fScaleY = + LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleHeight()) / fGrafOrgHeight; + } + else if (nScalemode & LwpLayoutScale::PERCENTAGE) + { + double fScalePercentage = (double)pMyScale->GetScalePercentage() / 1000; + m_aTransformData.fScaleX = fScalePercentage; + m_aTransformData.fScaleY = fScalePercentage; + } + else if (nScalemode & LwpLayoutScale::FIT_IN_FRAME) + { + double fWidth0 = (double)right / TWIPS_PER_CM; + double fHeight0 = (double)bottom / TWIPS_PER_CM; + + double fWidth1 = LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleWidth()); + double fHeight1 = LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleHeight()); + + double fScaleX = fWidth1 / fWidth0; + double fScaleY = fHeight1 / fHeight0; + + if (nScalemode & LwpLayoutScale::MAINTAIN_ASPECT_RATIO) + { + m_aTransformData.fScaleX = std::min(fScaleX, fScaleY); + m_aTransformData.fScaleY = m_aTransformData.fScaleX; + } + else + { + m_aTransformData.fScaleX = fWidth1 / fWidth0; + m_aTransformData.fScaleY = fHeight1 / fHeight0; + } + } + + // placement: centered + if (pMyFrameLayout->GetScaleCenter()) + { + Rectangle aBoundRect(left*m_aTransformData.fScaleX + fLeftMargin, + top*m_aTransformData.fScaleY + fTopMargin, + right * m_aTransformData.fScaleX, + bottom * m_aTransformData.fScaleY); + Point aCenter = aBoundRect.Center(); + + double fNewCenterX = (double(left)/TWIPS_PER_CM + fFrameWidth/*-fOffsetX*/) / 2; + double fNewCenterY = (double(top)/TWIPS_PER_CM + fFrameHeight/*-fOffsetY*/) / 2; + + m_aTransformData.fOffsetX = fNewCenterX - (double)aCenter.X()/TWIPS_PER_CM; + m_aTransformData.fOffsetY = fNewCenterY -(double)aCenter.Y()/TWIPS_PER_CM; + } + else + { + m_aTransformData.fOffsetX = fOffsetX; + m_aTransformData.fOffsetY = fOffsetY; + } + + m_aTransformData.fOffsetX += fLeftMargin; + m_aTransformData.fOffsetY += fTopMargin; + m_aTransformData.fLeftMargin = fLeftMargin; + m_aTransformData.fTopMargin = fTopMargin; + } + } + + //load draw object + for (unsigned short i = 0; i < nRecCount; i++) + { + XFFrame* pXFDrawObj = this->CreateDrawObject(); + + if (pXFDrawObj) + { + pDrawObjVector->push_back(pXFDrawObj); + } + } +} + +/** + * @descr when we encounter a group object the function will be called to create a XF-drawgroup object + * the corresponding drawing objects. + * @param pDrawObjVector a container which will contains the created drawing object of XF-Model. + */ +XFDrawGroup* LwpSdwGroupLoaderV0102::CreateDrawGroupObject(void) +{ + //flag + unsigned char BinSignature[2]; + m_pStream->Read(BinSignature,2); + if (BinSignature[0] != 'S' || BinSignature[1] != 'M') + { + assert(false); + return NULL; + } + //version + unsigned short nVersion; + m_pStream->Read(&nVersion,2); + if (nVersion<0x0102) + { + assert(false); + return NULL; + } + // topObj, botObj + m_pStream->SeekRel(4); + //record count + unsigned short nRecCount; + m_pStream->Read(&nRecCount,2); + // selCount + m_pStream->SeekRel(2); + //boundrect + unsigned short left,top,right,bottom; + m_pStream->Read(&left,2); + m_pStream->Read(&top,2); + m_pStream->Read(&right,2); + m_pStream->Read(&bottom,2); + // fileSize + m_pStream->SeekRel(2); + + XFDrawGroup* pXFDrawGroup = new XFDrawGroup(); + + //load draw object + for (unsigned short i = 0; i < nRecCount; i++) + { + XFFrame* pXFDrawObj = this->CreateDrawObject(); + + if (pXFDrawObj) + { + if (pXFDrawObj->GetFrameType() == enumXFFrameImage) + { + m_pDrawObjVector->push_back(pXFDrawObj); + } + else + { + pXFDrawGroup->Add(pXFDrawObj); + } + } + } + + return pXFDrawGroup; +} + +/** + * @descr Create the XF-drawing objects according to the object type read from bento stream. + * @return the created XF-drawing objects. + */ +XFFrame* LwpSdwGroupLoaderV0102::CreateDrawObject(void) +{ + //record type + unsigned char recType; + m_pStream->Read(&recType,1); + + LwpDrawObj* pDrawObj = NULL; + XFFrame* pRetObjct = NULL; + + switch(recType) + { + case OT_PERPLINE://fall-through + case OT_LINE: + { + pDrawObj = new LwpDrawLine(m_pStream, &m_aTransformData); + break; + } + case OT_POLYLINE: + { + pDrawObj = new LwpDrawPolyLine(m_pStream, &m_aTransformData); + break; + } + case OT_POLYGON: + { + pDrawObj = new LwpDrawPolygon(m_pStream, &m_aTransformData); + pDrawObj->SetObjectType(OT_POLYGON); + break; + } + case OT_SQUARE://fall-through + case OT_RECT: + { + pDrawObj = new LwpDrawRectangle(m_pStream, &m_aTransformData); + break; + } + case OT_RNDSQUARE://fall-through + case OT_RNDRECT: + { + pDrawObj = new LwpDrawRectangle(m_pStream, &m_aTransformData); + pDrawObj->SetObjectType(OT_RNDRECT); + break; + } + case OT_CIRCLE://fall-through + case OT_OVAL: + { + pDrawObj = new LwpDrawEllipse(m_pStream, &m_aTransformData); + break; + } + case OT_ARC: + { + pDrawObj = new LwpDrawArc(m_pStream, &m_aTransformData); + break; + } + case OT_TEXT: + { + pDrawObj = new LwpDrawTextBox(m_pStream); + break; + } + case OT_TEXTART: + { + pDrawObj = new LwpDrawTextArt(m_pStream, &m_aTransformData); + pDrawObj->SetObjectType(OT_TEXTART); + break; + } + case OT_GROUP: + { + m_pStream->SeekRel(2); + // read out the object header + pDrawObj = new LwpDrawGroup(m_pStream); + + pRetObjct = this->CreateDrawGroupObject(); + + // set anchor type + pRetObjct->SetAnchorType(enumXFAnchorFrame); + break; + } + case OT_CHART://fall-through + case OT_METAFILE://fall-through + case OT_METAFILEIMG: + { + LwpDrawMetafile aMeta(m_pStream); + break; + } + case OT_BITMAP: + pDrawObj = new LwpDrawBitmap(m_pStream); + pDrawObj->SetObjectType(OT_BITMAP); + break; + } + + // we don't need create the corresponding XF-object of a group object. + if (pDrawObj && recType != OT_GROUP) + { + pRetObjct = pDrawObj->CreateXFDrawObject(); + } + + if (pDrawObj) + { + delete pDrawObj; + pDrawObj = NULL; + } + + return pRetObjct; +} +// end add diff --git a/lotuswordpro/source/filter/lwpsdwgrouploaderv0102.hxx b/lotuswordpro/source/filter/lwpsdwgrouploaderv0102.hxx new file mode 100644 index 000000000000..328ed2d9db80 --- /dev/null +++ b/lotuswordpro/source/filter/lwpsdwgrouploaderv0102.hxx @@ -0,0 +1,94 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/***************************************************************************** + * Change History + * Mar 2005 revised for new processing procedure. + * Jan 2005 created + ****************************************************************************/ +#include <tools/stream.hxx> +#include "lwpheader.hxx" +#include "assert.h" +#include "xfilter/ixfstream.hxx" +#include "lwpsdwdrawheader.hxx" + +class XFFrame; +class XFDrawGroup; +class LwpGraphicObject; +class LwpSdwGroupLoaderV0102 +{ +private: + SvStream* m_pStream; + IXFStream* m_pOutputStream; + LwpGraphicObject* m_pGraphicObj; + std::vector <XFFrame*>* m_pDrawObjVector; + + DrawingOffsetAndScale m_aTransformData; + +public: + LwpSdwGroupLoaderV0102(SvStream* pStream, LwpGraphicObject* pGraphicObj, + IXFStream* pOutputStream); + ~LwpSdwGroupLoaderV0102(void); +public: +// void LoadDrawGroupObject(void); +// void LoadDrawObject(void); +// void RegisterGroupStyle(void); +// void RegisterStyle(void); + + // add by ,03/25/2005 + void BeginDrawObjects(std::vector <XFFrame*>* pDrawObjVector); + XFDrawGroup* CreateDrawGroupObject(void); + XFFrame* CreateDrawObject(void); + // end add +}; diff --git a/lotuswordpro/source/filter/lwpsdwrect.cxx b/lotuswordpro/source/filter/lwpsdwrect.cxx new file mode 100644 index 000000000000..de4d9d7ba55b --- /dev/null +++ b/lotuswordpro/source/filter/lwpsdwrect.cxx @@ -0,0 +1,230 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/***************************************************************************** + * Change History + * Mar 2005 Revised for lwpfilter + ****************************************************************************/ +/** + * @file + * For LWP filter architecture prototype + * Implementation file of SdwRectangle. + */ +#include "lwpsdwrect.hxx" + +/************************************************************************** + * @date: 11/19/2004 + * @short: Default constructor +**************************************************************************/ +SdwRectangle::SdwRectangle() : m_bRotated(sal_False) +{ + for (UINT16 i = 0; i < 4; i++) + { + m_nRectCorner[0] = Point(0, 0); + } +} +/************************************************************************** + * @date: 11/19/2004 + * @short: Constructor + * @param: aPt0~aPt3 four corner points of a rectangle. +**************************************************************************/ +SdwRectangle::SdwRectangle(const Point& rPt0, const Point& rPt1, + const Point& rPt2, const Point& rPt3) : m_bRotated(sal_True) +{ + m_nRectCorner[0] = rPt0; + m_nRectCorner[1] = rPt1; + m_nRectCorner[2] = rPt2; + m_nRectCorner[3] = rPt3; + + if (rPt0.Y() == rPt1.Y() && rPt0.Y() < rPt3.Y()) + { + m_bRotated = sal_False; + } +} + +/************************************************************************** + * @date: 12/15/2004 + * @short: Copy constructor +**************************************************************************/ +SdwRectangle::SdwRectangle(const SdwRectangle& rOther) +{ + m_nRectCorner[0] = rOther.m_nRectCorner[0]; + m_nRectCorner[1] = rOther.m_nRectCorner[1]; + m_nRectCorner[2] = rOther.m_nRectCorner[2]; + m_nRectCorner[3] = rOther.m_nRectCorner[3]; + + m_bRotated = rOther.IsRectRotated(); +} +/************************************************************************** + * @date: 11/19/2004 + * @short: Destructor +**************************************************************************/ +SdwRectangle::~SdwRectangle() +{ +} +/************************************************************************** + * @date: 11/19/2004 + * @short: Get the flag whether if the rectangle has been rotated. + * @return: m_bRotated rotation flag. +**************************************************************************/ +sal_Bool SdwRectangle::IsRectRotated() const +{ + return m_bRotated; +} +/************************************************************************** + * @date: 11/19/2004 + * @short: Calculate and return center point of the rectangle. + * @return: center point +**************************************************************************/ +Point SdwRectangle::GetRectCenter() const +{ + long nX = (long)((double)(m_nRectCorner[0].X() + m_nRectCorner[2].X())/2 + 0.5); + long nY = (long)((double)(m_nRectCorner[0].Y() + m_nRectCorner[2].Y())/2 + 0.5); + + return Point(nX, nY); +} +/************************************************************************** + * @date: 11/19/2004 + * @short: Calculate width of the rectangle. + * @return: rectangle width. +**************************************************************************/ +long SdwRectangle::GetWidth() const +{ + long nX0 = m_nRectCorner[0].X(); + long nY0 = m_nRectCorner[0].Y(); + long nX1 = m_nRectCorner[1].X(); + long nY1 = m_nRectCorner[1].Y(); + + return (long)CalcDistBetween2Points(nX0, nY0, nX1, nY1); +} +/************************************************************************** + * @date: 11/19/2004 + * @short: Calculate height of the rectangle. + * @return: rectangle height. +**************************************************************************/ +long SdwRectangle::GetHeight() const +{ + long nX1 = m_nRectCorner[1].X(); + long nY1 = m_nRectCorner[1].Y(); + long nX2 = m_nRectCorner[2].X(); + long nY2 = m_nRectCorner[2].Y(); + + return (long)CalcDistBetween2Points(nX1, nY1, nX2, nY2); +} +/************************************************************************** + * @date: 11/19/2004 + * @short: Calculate coordinate of the original rectangle. + * @return: a prz rectangle +**************************************************************************/ +Rectangle SdwRectangle::GetOriginalRect() const +{ + if (m_bRotated) + { + long nHeight = GetHeight(); + long nWidth = GetWidth(); + Point aCenter = GetRectCenter(); + + Point aLT(aCenter.X()-(long)((double)nWidth/2+0.5), + aCenter.Y()-(long)((double)nHeight/2+0.5)); + Point aRT(aLT.X()+nWidth, aLT.Y()); + Point aLB(aLT.X(), aLT.Y()-nHeight); + Point aRB(aLT.X()+nWidth, aLT.Y()+nHeight); + + return Rectangle(aLT, aRB); + } + else + { + return Rectangle(m_nRectCorner[3], m_nRectCorner[1]); + } +} +/************************************************************************** + * @date: 11/19/2004 + * @short: Calculate rotation angle of the rectangle. + * @return: rotation angle. +**************************************************************************/ +double SdwRectangle::GetRotationAngle() const +{ + if (!m_bRotated) + { + return 0.00; + } + + double fX1 = (double)(m_nRectCorner[1].X()); + double fY1 = (double)(m_nRectCorner[1].Y()); + double fX2 = (double)(m_nRectCorner[2].X()); + double fY2 = (double)(m_nRectCorner[2].Y()); + double fMidX = (fX1 + fX2) / 2; + double fMidY = (fY1 + fY2) / 2; + + Point aCenter = GetRectCenter(); + double fCenterX = (double)aCenter.X(); + double fCenterY = (double)aCenter.Y(); + + double fAngle = atan2((fMidY - fCenterY), (fMidX - fCenterX)); + + return -fAngle; +} + +double SdwRectangle::CalcDistBetween2Points(long nX1, long nY1, long nX2, long nY2) +{ + return sqrt((double)((nX1-nX2)*(nX1-nX2) + (nY1-nY2)*(nY1-nY2))); +} + +Rectangle SdwRectangle::GetOriginalRect(const Point& rCenter, long nHalfWidth, long nHalfHeight) +{ + Point aLT(rCenter.X()-nHalfWidth, rCenter.Y()-nHalfHeight); + Point aRB(rCenter.X()+nHalfWidth, rCenter.Y()+nHalfHeight); + + return Rectangle(aLT, aRB); +} diff --git a/lotuswordpro/source/filter/lwpsdwrect.hxx b/lotuswordpro/source/filter/lwpsdwrect.hxx new file mode 100644 index 000000000000..986de8c530fe --- /dev/null +++ b/lotuswordpro/source/filter/lwpsdwrect.hxx @@ -0,0 +1,128 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/***************************************************************************** + * Change History + * Mar 2005 Revised for lwpfilter + ****************************************************************************/ +/** + * @file + * For LWP filter architecture prototype + * Implementation file of SdwRectangle. + */ +#ifndef _SDWRECTANGLE_HXX +#define _SDWRECTANGLE_HXX + +#include "lwpheader.hxx" +#include <tools/gen.hxx> + +/** + * @brief + * SdwRectangle: Not like rectangle in SODC, rectagles in Word Pro are + * defined by 4 points. So they can be any posture in the two-dimensional + * coordinate system. The class is used to describ such rectangles. + * The foure corner points must be save in menber variable:m_nRectCorner + * one after another. We assume the input order(the same order in .lwp files) + * is as below: + * + * y ^ m_nRectCorner[3] m_nRectCorner[2] + * | |--------------------| + * | | | + * | | | + * | |--------------------| + * | m_nRectCorner[0] m_nRectCorner[1] + * | + * |-------------------------------------------------------> + * (0,0) x + * + */ +class SdwRectangle +{ +private: + sal_Bool m_bRotated; + +public: + Point m_nRectCorner[4]; + +public: + + SdwRectangle(); + + SdwRectangle(const Point& rPt0, const Point& rPt1, + const Point& rPt2, const Point& rPt3); + + SdwRectangle(const SdwRectangle& rOther); + + ~SdwRectangle(); + +public: + sal_Bool IsRectRotated() const; + + Point GetRectCenter() const ; + + long GetWidth() const; + + long GetHeight() const; + + Rectangle GetOriginalRect() const; + + double GetRotationAngle() const; + + static double CalcDistBetween2Points(long nX1, long nY1, long nX2, long nY2); + + static Rectangle GetOriginalRect(const Point& rCenter, long nHalfWidth, long nHalfHeight); + +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpsection.cxx b/lotuswordpro/source/filter/lwpsection.cxx new file mode 100644 index 000000000000..1a4890205324 --- /dev/null +++ b/lotuswordpro/source/filter/lwpsection.cxx @@ -0,0 +1,155 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpcolor.hxx" +#include "lwpatomholder.hxx" +#include "lwplayout.hxx" +#include "lwpdlvlist.hxx" +#include "lwpobj.hxx" +#include "lwpsection.hxx" +#include "xfilter/xfsection.hxx" + +LwpOrderedObject::LwpOrderedObject(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpDLNFVList(objHdr, pStrm) +{} + +/** + * @descr: read object information + * + */ +void LwpOrderedObject::Read() +{ + LwpDLNFVList::Read(); + + m_ListList.ReadIndexed(m_pObjStrm); + m_Para.ReadIndexed(m_pObjStrm); + m_pObjStrm->SkipExtra(); +} + +LwpSection::LwpSection(LwpObjectHeader &objHdr, LwpSvStream *pStrm) + : LwpOrderedObject(objHdr, pStrm) +{} + +LwpSection::~LwpSection() +{ + +} + +/** + * @descr: read object information + * + */ +void LwpSection::Read() +{ + LwpOrderedObject::Read(); + m_pObjStrm->QuickRead(&m_Flags, sizeof(m_Flags)); + m_PageLayout.ReadIndexed(m_pObjStrm); + m_Color.Read(m_pObjStrm); + m_AtomHolder.Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); +} + +/** + * @descr: do nothing + * + */ +void LwpSection::Parse(IXFStream *pOutputStream) +{ + +} + +LwpIndexSection::LwpIndexSection(LwpObjectHeader &objHdr, LwpSvStream *pStrm) + : LwpSection(objHdr, pStrm) +{} + +LwpIndexSection::~LwpIndexSection() +{ +} + +/** + * @descr: read object information + * + */ +void LwpIndexSection::Read() +{ + LwpSection::Read(); + m_TextMarker.Read(m_pObjStrm); + m_ParentName.Read(m_pObjStrm); + m_DivisionName.Read(m_pObjStrm); + m_SectionName.Read(m_pObjStrm); + m_pObjStrm->QuickRead(&m_nForm, sizeof(m_nForm)); + m_pObjStrm->QuickRead(&m_nFlags, sizeof(m_nFlags)); + m_pObjStrm->SkipExtra(); +} + +sal_Bool LwpIndexSection::IsFormatRunin() +{ + return (m_nFlags & RUN_IN); + +} + +sal_Bool LwpIndexSection::IsFormatSeparator() +{ + return (m_nFlags & SEPARATORS); + +} diff --git a/lotuswordpro/source/filter/lwpsection.hxx b/lotuswordpro/source/filter/lwpsection.hxx new file mode 100644 index 000000000000..f53d103256c2 --- /dev/null +++ b/lotuswordpro/source/filter/lwpsection.hxx @@ -0,0 +1,172 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPSECTION_HXX +#define _LWPSECTION_HXX +#include "lwppagelayout.hxx" + +/** + * @brief COrderedObject class in .lwp file + * + */ +class LwpDLNFVList; +class LwpOrderedObject : public LwpDLNFVList +{ +public: + LwpOrderedObject(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpOrderedObject(){}; + void Read(); + LwpObjectID* GetPosition(){ return &m_Para;}; + LwpObjectID* GetListList(){ return &m_ListList;}; +protected: + LwpObjectID m_ListList;//lwplistlist object, + LwpObjectID m_Para; +}; + +/** + * @brief VO_SECTION object in .lwp file + * + */ +class LwpColor; +class LwpAtomHolder; +class LwpSection : public LwpOrderedObject +{ +public: + LwpSection(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpSection(); + inline sal_uInt16 GetFlags(); + inline LwpPageLayout* GetPageLayout(); + inline LwpColor* GetColor(); + inline LwpAtomHolder* GetAtomHolder(); + void Parse(IXFStream* pOutputStream); + OUString GetSectionName(){return m_AtomHolder.str();} + +protected: + void Read(); +private: + sal_uInt16 m_Flags; + LwpObjectID m_PageLayout; + LwpColor m_Color; + LwpAtomHolder m_AtomHolder; + +}; + +/** + * @descr Get flage value + * + */ +inline sal_uInt16 LwpSection::GetFlags() +{ + return m_Flags; +} + +/** + * @descr Get page layout pointer + * + */ +inline LwpPageLayout* LwpSection::GetPageLayout() +{ + return static_cast<LwpPageLayout*>(m_PageLayout.obj()); +} + +/** + * @descr get section tab color + * + */ +inline LwpColor* LwpSection::GetColor() +{ + return &m_Color; +} + +/** + * @descr get section atom holder pointer + * + */ +inline LwpAtomHolder* LwpSection::GetAtomHolder() +{ + return &m_AtomHolder; +} + + +class LwpIndexSection : public LwpSection +{ +public: + LwpIndexSection(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpIndexSection(); + sal_Bool IsFormatRunin(); + sal_Bool IsFormatSeparator(); +protected: + void Read(); +private: + enum{ + SEPARATORS = 0x01, + RUN_IN = 0X02, + }; + LwpAtomHolder m_TextMarker; + LwpAtomHolder m_ParentName; + LwpAtomHolder m_DivisionName; + LwpAtomHolder m_SectionName; + sal_uInt16 m_nForm; + sal_uInt16 m_nFlags; +}; +#endif diff --git a/lotuswordpro/source/filter/lwpshadow.hxx b/lotuswordpro/source/filter/lwpshadow.hxx new file mode 100644 index 000000000000..3009e46a17cf --- /dev/null +++ b/lotuswordpro/source/filter/lwpshadow.hxx @@ -0,0 +1,120 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-13 Created + ************************************************************************/ +#ifndef _LWPSHADOW_HXX +#define _LWPSHADOW_HXX + +#include "lwpcolor.hxx" +#include "lwptools.hxx" + +class LwpShadow +{ +public: + LwpShadow():m_nDirX(0),m_nDirY(0){} +public: + void Read(LwpObjectStream *pStrm) + { + m_aColor.Read(pStrm); + pStrm->QuickRead(&m_nDirX, sizeof(m_nDirX)); + pStrm->QuickRead(&m_nDirY, sizeof(m_nDirY)); + pStrm->SkipExtra(); + } + + double GetOffsetX(); + + double GetOffsetY(); + + LwpColor GetColor(); + + //add by , 01/26/2005 + inline void operator = (const LwpShadow& rOther); + //end add + +private: + LwpColor m_aColor; + sal_Int32 m_nDirX; + sal_Int32 m_nDirY; +}; + +inline double LwpShadow::GetOffsetX() +{ + // return 0.102; + return LwpTools::ConvertFromUnitsToMetric(m_nDirX); +} + +inline double LwpShadow::GetOffsetY() +{ + return LwpTools::ConvertFromUnitsToMetric(m_nDirY); +} + +inline LwpColor LwpShadow::GetColor() +{ + return m_aColor; +} + +inline void LwpShadow::operator = (const LwpShadow& rOther) +{ + m_aColor = rOther.m_aColor; + m_nDirX = rOther.m_nDirX; + m_nDirY = rOther.m_nDirY; +} +#endif diff --git a/lotuswordpro/source/filter/lwpsilverbullet.cxx b/lotuswordpro/source/filter/lwpsilverbullet.cxx new file mode 100644 index 000000000000..4040d327a2ed --- /dev/null +++ b/lotuswordpro/source/filter/lwpsilverbullet.cxx @@ -0,0 +1,486 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ +#include "lwpglobalmgr.hxx" +#include "lwpsilverbullet.hxx" +#include "lwpdoc.hxx" +#include "lwpdivinfo.hxx" +#include "lwpfoundry.hxx" +#include "lwpstory.hxx" +#include "lwppara.hxx" +#include "xfilter/xfliststyle.hxx" +#include "xfilter/xfstylemanager.hxx" + +LwpSilverBullet::LwpSilverBullet(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpDLNFVList(objHdr, pStrm), m_pAtomHolder(new LwpAtomHolder), m_pBulletPara(NULL) +{ +} + +LwpSilverBullet::~LwpSilverBullet() +{ + if (m_pAtomHolder) + { + delete m_pAtomHolder; + } +} + +void LwpSilverBullet::Read() +{ + LwpDLNFVList::Read(); + + m_pObjStrm->QuickRead(&m_nFlags, 2); + m_aStory.ReadIndexed(m_pObjStrm); + + sal_uInt16 nNumPos; + m_pObjStrm->QuickRead(&nNumPos, 2); + + for (sal_uInt8 nC = 0; nC < nNumPos; nC++) + { + m_pObjStrm->QuickRead(&m_pResetPositionFlags[nC], 1); + } + + m_pObjStrm->QuickRead(&m_nUseCount, 4); + + m_pAtomHolder->Read(m_pObjStrm); +} + +/** + * @short: Register bullet or numbering style-list and store the returned + * name from XFStyleManager. + * @descr: + */ +void LwpSilverBullet::RegisterStyle() +{ + XFListStyle* pListStyle = new XFListStyle(); + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + + this->GetBulletPara(); + + if (this->IsBulletOrdered() && this->HasName()) + { + ParaNumbering aParaNumbering; + XFNumFmt aFmt; + + //todo: find the flag in the file + sal_Bool bCumulative = sal_False; + + //get the numbeing format of level-1 + m_pBulletPara->GetParaNumber(1, &aParaNumbering); + if (aParaNumbering.pPrefix) + { + aFmt.SetPrefix(aParaNumbering.pPrefix->GetText()); + } + + + for (sal_uInt8 nPos = 1; nPos < 10; nPos++) + { + //get numbering format according to the position. + m_pBulletPara->GetParaNumber(nPos, &aParaNumbering); + LwpFribParaNumber* pParaNumber = aParaNumbering.pParaNumber; + if (pParaNumber) + { + if (pParaNumber->GetStyleID() != NUMCHAR_other) + { + m_pHideLevels[nPos] = aParaNumbering.nNumLevel; + sal_uInt16 nDisplayLevel = this->GetDisplayLevel(nPos); + bCumulative = (sal_Bool)(nDisplayLevel > 1); + rtl::OUString aPrefix = this->GetAdditionalName(nPos); + + XFNumFmt aFmt; + if (!bCumulative && aParaNumbering.pPrefix) + { + aFmt.SetPrefix(aPrefix + aParaNumbering.pPrefix->GetText()); + } + + aFmt.SetFormat(this->GetNumCharByStyleID(pParaNumber)); + + if (aParaNumbering.pSuffix) + { + aFmt.SetSuffix(aParaNumbering.pSuffix->GetText()); + } + + //set numbering format into the style-list. + pListStyle->SetListNumber(nPos, aFmt, pParaNumber->GetStart()+1); + + if (bCumulative && nPos > 1) + { + pListStyle->SetDisplayLevel(nPos, nDisplayLevel); + } + + } + else + { + rtl::OUString aPrefix, aSuffix; + if (aParaNumbering.pPrefix) + { + aPrefix = aParaNumbering.pPrefix->GetText(); + } + if (aParaNumbering.pSuffix) + { + aSuffix = aParaNumbering.pSuffix->GetText(); + } + + pListStyle->SetListBullet(nPos, this->GetNumCharByStyleID(pParaNumber).toChar(), + rtl::OUString::createFromAscii("Times New Roman"), aPrefix, aSuffix); + } + + pListStyle->SetListPosition(nPos, 0.0, 0.635, 0.0); + aParaNumbering.clear(); + } + } + } + else + { + //register bullet style-list +/* for (sal_uInt8 nC = 1; nC < 11; nC++) + { + pListStyle->SetListBullet(nC, this->GetBulletChar(), this->GetBulletFontName(), + this->GetPrefix(), this->GetSuffix()); + pListStyle->SetListPosition(nC, 0.0, 0.635, 0.0); + }*/ + + } + + //add style-list to style manager. + m_strStyleName = pXFStyleManager->AddStyle(pListStyle)->GetStyleName(); +} + +/** + * @short: Get the font name of the bullet. + * @descr: + * @return: Font name of the bullet. + */ +rtl::OUString LwpSilverBullet::GetBulletFontName() +{ + //foundry has been set? + if (!m_pFoundry) + { + return rtl::OUString::createFromAscii(""); + } + + LwpFontManager* pFontMgr = m_pFoundry->GetFontManger(); + if (!pFontMgr) + { + return rtl::OUString::createFromAscii(""); + } + + sal_uInt32 nBulletFontID = m_pBulletPara->GetBulletFontID(); + sal_uInt16 nFinalFont = static_cast<sal_uInt16>((nBulletFontID >> 16) & 0xFFFF); + + //final fontid is valid? + if (nFinalFont > 255 || nFinalFont == 0) + { + return rtl::OUString::createFromAscii(""); + } + + //get font name from font manager. + rtl::OUString aFontName = pFontMgr->GetNameByID(nBulletFontID); + + return aFontName; +} +/** + * @short: Get bullet character of the bullet vo_para. + * @descr: + * @return: An UChar32 bulle character. + */ +UChar32 LwpSilverBullet::GetBulletChar() +{ + rtl::OUString aBulletChar = m_pBulletPara->GetBulletChar(); + + return aBulletChar.toChar(); +} + +rtl::OUString LwpSilverBullet::GetPrefix() +{ + return rtl::OUString::createFromAscii(""); +} + +rtl::OUString LwpSilverBullet::GetSuffix() +{ + return rtl::OUString::createFromAscii(""); +} +/** + * @short: Get the LwpPara object through story id. + */ +LwpPara* LwpSilverBullet::GetBulletPara() +{ + if (!m_pBulletPara) + { + LwpStory* pStory = static_cast<LwpStory*>(m_aStory.obj(VO_STORY)); + if (!pStory) + { + return NULL; + } + + m_pBulletPara = static_cast<LwpPara*>(pStory->GetFirstPara()->obj(VO_PARA)); + } + + return m_pBulletPara; +} + +/** + * @short: Get numbering character of the bullet vo_para. + * @descr: + * @param: pParaNumber a pionter to the structure LwpFribParaNumber which + * includes numbering prefix, format and suffix. + * @return: An OUString object which store the numbering character. + */ +rtl::OUString LwpSilverBullet::GetNumCharByStyleID(LwpFribParaNumber* pParaNumber) +{ + if (!pParaNumber) + { + assert(false); + return rtl::OUString::createFromAscii(""); + } + + rtl::OUString strNumChar = rtl::OUString::createFromAscii("1"); + sal_uInt16 nStyleID = pParaNumber->GetStyleID(); + UChar32 uC = 0x0000; + + switch (nStyleID) + { + case NUMCHAR_1: + case NUMCHAR_01: + case NUMCHAR_Chinese4: + strNumChar = rtl::OUString::createFromAscii("1"); + break; + case NUMCHAR_A : + strNumChar = rtl::OUString::createFromAscii("A"); + break; + case NUMCHAR_a: + strNumChar = rtl::OUString::createFromAscii("a"); + break; + case NUMCHAR_I: + strNumChar = rtl::OUString::createFromAscii("I"); + break; + case NUMCHAR_i: + strNumChar = rtl::OUString::createFromAscii("i"); + break; + case NUMCHAR_other: + uC = static_cast<UChar32>(pParaNumber->GetNumberChar()); + strNumChar = rtl::OUString(uC); + break; + case NUMCHAR_Chinese1: + { + sal_Unicode sBuf[13] = {0x58f9,0x002c,0x0020,0x8d30,0x002c,0x0020,0x53c1,0x002c,0x0020,0x002e,0x002e,0x002e,0x0}; + strNumChar = rtl::OUString(sBuf); + } + break; + case NUMCHAR_Chinese2: + { + sal_Unicode sBuf[13] = {0x4e00,0x002c,0x0020,0x4e8c,0x002c,0x0020,0x4e09,0x002c,0x0020,0x002e,0x002e,0x002e,0x0}; + strNumChar = rtl::OUString(sBuf); + } + break; + case NUMCHAR_Chinese3: + { + sal_Unicode sBuf[13] = {0x7532,0x002c,0x0020,0x4e59,0x002c,0x0020,0x4e19,0x002c,0x0020,0x002e,0x002e,0x002e,0x0}; + strNumChar = rtl::OUString(sBuf); + } + break; + case NUMCHAR_none: + strNumChar = rtl::OUString::createFromAscii(""); + break; + default: + break; + }//mod end + return strNumChar; +} + +/** + * @short: To judge the silverbullet list is ordered or not. + * @descr: + * @return: sal_True if list is ordered, sal_False if list is unordered. + */ +sal_Bool LwpSilverBullet::IsBulletOrdered() +{ + return (sal_Bool)(m_pBulletPara->GetFribs()->HasFrib(FRIB_TAG_PARANUMBER) != NULL); +} + +/** + * @short: Calculate the displaylevel according to the position and hidelevels. + * @descr: + * @param: nPos position of the numbering. + * @return: displaylevel of the position passed in. + */ +sal_uInt16 LwpSilverBullet::GetDisplayLevel(sal_uInt8 nPos) +{ + if (nPos > 1) + { + sal_uInt16 nHideBit = (1 << nPos); + for (sal_uInt8 nC = nPos-1; nC > 0; nC--) + { + sal_uInt16 nAttrMask = ~m_pHideLevels[nC]; + if (!(nAttrMask & nHideBit)) + { + return static_cast<sal_uInt16>(nPos - nC); + } + } + } + + return static_cast<sal_uInt16>(nPos); +} + +/** + * @descr: Get the additional information, "Division name" or "Section Name" from document + * variable frib according to numbering position. Whether we should add a + * Division/Section name or not is determined by the hidelevels of the frib. + * @param: nPos position of the numbering. + * @return: Division or Section name. + */ +rtl::OUString LwpSilverBullet::GetAdditionalName(sal_uInt8 nPos) +{ + rtl::OUString aRet = rtl::OUString::createFromAscii(""); + sal_uInt16 nHideBit = (1 << nPos); + sal_Bool bDivisionName = sal_False; + sal_Bool bSectionName = sal_False; + + LwpFrib* pParaFrib = m_pBulletPara->GetFribs()->GetFribs(); + if (!pParaFrib) + { + return rtl::OUString::createFromAscii(""); + } + + while (pParaFrib) + { + if (pParaFrib->GetType() == FRIB_TAG_DOCVAR) + { + ModifierInfo* pMoInfo = pParaFrib->GetModifiers(); + if (!pMoInfo) + { + return rtl::OUString::createFromAscii(""); + } + sal_uInt16 nHideLevels = pMoInfo->aTxtAttrOverride.GetHideLevels(); + sal_uInt16 nType = static_cast<LwpFribDocVar*>(pParaFrib)->GetType(); + + if (~nHideLevels & nHideBit) + { + if (nType == 0x000D) + { + bDivisionName = sal_True; + } + else if (nType == 0x000E) + { + bSectionName= sal_True; + } + } + } + pParaFrib = pParaFrib->GetNext(); + } + + if (bDivisionName) + { + aRet += this->GetDivisionName(); + } + if (bSectionName) + { + aRet += this->GetSectionName(); + } + + return aRet; +} + +rtl::OUString LwpSilverBullet::GetDivisionName() +{ + if (!m_pFoundry) + { + return rtl::OUString::createFromAscii(""); + } + + rtl::OUString aRet = rtl::OUString::createFromAscii(""); + + LwpDocument* pDoc = m_pFoundry->GetDocument(); + if (pDoc) + { + LwpObjectID* pID = pDoc->GetDivInfoID(); + if (!pID->IsNull()) + { + aRet = static_cast<LwpDivInfo*>(pID->obj(VO_DIVISIONINFO))->GetDivName(); + } + } + + return aRet; +} + +rtl::OUString LwpSilverBullet::GetSectionName() +{ + LwpStory* pStory = static_cast<LwpStory*>(m_aStory.obj(VO_STORY)); + if (!pStory) + { + return rtl::OUString::createFromAscii(""); + } + + return pStory->GetSectionName(); +} + +sal_Bool LwpSilverBullet::HasName() +{ + LwpAtomHolder* pName = this->GetName(); + if (pName) + { + return (sal_Bool)(pName->str().getLength() != 0); + } + else + { + return sal_False; + } +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwpsilverbullet.hxx b/lotuswordpro/source/filter/lwpsilverbullet.hxx new file mode 100644 index 000000000000..7ae73e8e0ac0 --- /dev/null +++ b/lotuswordpro/source/filter/lwpsilverbullet.hxx @@ -0,0 +1,189 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPSILVERBULLET_HXX +#define _LWPSILVERBULLET_HXX + +#include "lwpheader.hxx" +#include "lwpobj.hxx" +#include "lwpdlvlist.hxx" +#include "lwpobjid.hxx" +#include "lwpatomholder.hxx" +//Added by yanjun for SS merge: 2007-12-21 +#include "unicode/utypes.h" +//End +const sal_uInt16 MAXNUMBERPOSITIONS = 10; //max number of positions +const sal_uInt16 NUMCHAR_none = 0x00; //none of numberchar +const sal_uInt16 NUMCHAR_1 = 0x01; //index for numberchar "1" +const sal_uInt16 NUMCHAR_A = 0x02; //index for numberchar "A" +const sal_uInt16 NUMCHAR_a = 0x03; //index for numberchar "a" +const sal_uInt16 NUMCHAR_I = 0x04; //index for numberchar "I" +const sal_uInt16 NUMCHAR_i = 0x05; //index for numberchar "i" +const sal_uInt16 NUMCHAR_other= 0x06; //index for numberchar "other" +const sal_uInt16 NUMCHAR_01 = 0x0B; //index for numberchar "01" + +const sal_uInt16 NUMCHAR_Chinese1 = 0x09; //index for numberchar "Ҽ" +const sal_uInt16 NUMCHAR_Chinese2 = 0x08; //index for numberchar "һ" +const sal_uInt16 NUMCHAR_Chinese3= 0x0A; //index for numberchar "" +const sal_uInt16 NUMCHAR_Chinese4 = 0x13; //index for numberchar "01" in chinese version +//add end + +class LwpStory; +class LwpAtomHolder; +class LwpPara; +class LwpFribParaNumber; + +class LwpSilverBullet : public LwpDLNFVList +{ +public: + LwpSilverBullet(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + + virtual ~LwpSilverBullet(); + + virtual void RegisterStyle(); + + void Read(); + + sal_Bool IsBulletOrdered(); + + rtl::OUString GetBulletFontName(); + + inline rtl::OUString GetBulletStyleName() const; + + UChar32 GetBulletChar(); + + rtl::OUString GetPrefix(); + + rtl::OUString GetSuffix(); + + inline rtl::OUString GetNumberingName(); + + inline LwpPara* GetNumberingPara(); + + sal_Bool HasName(); + + static rtl::OUString GetNumCharByStyleID(LwpFribParaNumber* pParaNumber); + + inline sal_Bool IsPosCumulative(sal_uInt16 nHideLevels); + inline sal_Bool IsLesserLevel(sal_uInt16 nPos); + inline sal_Bool IsNewSection(sal_uInt16 nPos); + + LwpPara* GetBulletPara(); + + sal_uInt16 GetDisplayLevel(sal_uInt8 nPos); + + rtl::OUString GetAdditionalName(sal_uInt8 nPos); + + rtl::OUString GetDivisionName(); + + rtl::OUString GetSectionName(); + +private: + sal_uInt16 m_nFlags; + LwpObjectID m_aStory; + sal_uInt8 m_pResetPositionFlags[MAXNUMBERPOSITIONS]; + sal_uInt32 m_nUseCount; + LwpAtomHolder* m_pAtomHolder; + + LwpPara* m_pBulletPara; + rtl::OUString m_strStyleName; + sal_uInt16 m_pHideLevels[10]; + +private: + enum // For m_pResetPositionFlags + { + LESSERLEVEL = 0x01, + LESSERSPECIFIC = 0x02, + NEWDIVISION = 0x04, + NEWSECTION = 0x08, + CUMULATIVE = 0x10 + }; +}; +inline rtl::OUString LwpSilverBullet::GetBulletStyleName() const +{ + return m_strStyleName; +} + +inline rtl::OUString LwpSilverBullet::GetNumberingName() +{ + return GetName()->str(); +} +inline LwpPara* LwpSilverBullet::GetNumberingPara() +{ + return m_pBulletPara; +} +inline sal_Bool LwpSilverBullet::IsPosCumulative(sal_uInt16 nHideLevels) +{ + sal_uInt16 AttrMask = ~nHideLevels; + return (sal_Bool)((AttrMask & (AttrMask - 1)) != 0); +} +inline sal_Bool LwpSilverBullet::IsLesserLevel(sal_uInt16 nPos) +{ + return (sal_Bool)((m_pResetPositionFlags[nPos] & LESSERLEVEL) != 0); +} +inline sal_Bool LwpSilverBullet::IsNewSection(sal_uInt16 nPos) +{ + return (sal_Bool)((m_pResetPositionFlags[nPos] & NEWSECTION) != 0); +} + +#endif diff --git a/lotuswordpro/source/filter/lwpslvlist.hxx b/lotuswordpro/source/filter/lwpslvlist.hxx new file mode 100644 index 000000000000..7fd946fc4a7e --- /dev/null +++ b/lotuswordpro/source/filter/lwpslvlist.hxx @@ -0,0 +1,89 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * single list. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-12 create and implement. + ************************************************************************/ + +#ifndef _LWPSLVLIST_HXX +#define _LWPSLVLIST_HXX + +#include "lwpobjstrm.hxx" +#include "lwpfilehdr.hxx" +#include "lwpobjid.hxx" + +class LwpSLVList +{ +public: + LwpSLVList(){} + LwpSLVList(LwpObjectStream* pStrm){Read(pStrm);}; +public: + void Read(LwpObjectStream* pStrm) + { + m_NextID.ReadIndexed(pStrm); + if( LwpFileHeader::m_nFileRevision < 0x0006 ) + pStrm->SkipExtra(); + } + LwpObjectID* GetNext(){return &m_NextID;} +public: +private: + LwpObjectID m_NextID; +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/lwpsortopt.cxx b/lotuswordpro/source/filter/lwpsortopt.cxx new file mode 100644 index 000000000000..689312fa7779 --- /dev/null +++ b/lotuswordpro/source/filter/lwpsortopt.cxx @@ -0,0 +1,105 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpsortopt.hxx" + +void LwpSortKey::Read(LwpObjectStream *pStrm) +{ + pStrm->QuickRead(&m_nField, sizeof(m_nField)); + pStrm->QuickRead(&m_nFlag, sizeof(m_nFlag)); + pStrm->QuickRead(&m_nWord, sizeof(m_nWord)); + pStrm->SkipExtra(); +} +LwpSortOption::LwpSortOption(LwpObjectStream* pStrm) +{ + Read(pStrm); +} +/** + * @descr Read sort option in VO_DOCUMNET from object stream + **/ +void LwpSortOption::Read(LwpObjectStream *pStrm) +{ + pStrm->QuickRead(&m_nCount, sizeof(m_nCount)); + pStrm->QuickRead(&m_nFlags, sizeof(m_nFlags)); + pStrm->QuickRead(&m_nText, sizeof(m_nText)); + for(sal_uInt8 i=0; i<3; i++) + { + m_Keys[i].Read(pStrm); + } + pStrm->SkipExtra(); +} +/** + * @descr skip the sort option + **/ +void LwpSortOption::Skip(LwpObjectStream *pStrm) +{ + pStrm->SeekRel(DiskSize()); +} +/** + * @descr return the disk size + **/ +sal_uInt16 LwpSortOption::DiskSize() +{ + sal_uInt16 keysize = 4 * sizeof(sal_uInt16); + return (3* keysize + (2 * sizeof(sal_uInt16)) + sizeof(sal_uInt8) + sizeof(sal_uInt16)); +} diff --git a/lotuswordpro/source/filter/lwpsortopt.hxx b/lotuswordpro/source/filter/lwpsortopt.hxx new file mode 100644 index 000000000000..0d4c53ce32cf --- /dev/null +++ b/lotuswordpro/source/filter/lwpsortopt.hxx @@ -0,0 +1,102 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPSORTOPTION_HXX +#define _LWPSORTOPTION_HXX + +#include "lwpheader.hxx" +#include "lwpobjstrm.hxx" + +/** + * @brief sort key class for LwpSortOption +*/ +class LwpSortKey +{ +private: + sal_uInt16 m_nField; + sal_uInt16 m_nFlag; + sal_uInt16 m_nWord; +public: + void Read(LwpObjectStream *pStrm); +}; +/** + * @brief sort options in VO_DOCUMENT + * only for read, not parsed now +*/ +class LwpSortOption +{ +public: + LwpSortOption(){}; + LwpSortOption(LwpObjectStream* pStrm); + ~LwpSortOption(){}; +public: + void Read(LwpObjectStream *pStrm); + void Skip(LwpObjectStream *pStrm); + sal_uInt16 DiskSize(); +private: + LwpSortKey m_Keys[3]; + sal_uInt16 m_nCount; + sal_uInt16 m_nFlags; + sal_uInt8 m_nText; +}; +#endif diff --git a/lotuswordpro/source/filter/lwpstory.cxx b/lotuswordpro/source/filter/lwpstory.cxx new file mode 100644 index 000000000000..06166af3e0dc --- /dev/null +++ b/lotuswordpro/source/filter/lwpstory.cxx @@ -0,0 +1,549 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * LwpStory: + 1. Word Pro object for paragraph list; + 2. the content of layout object + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ +#include "lwpglobalmgr.hxx" +#include "lwpstory.hxx" +#include "xfilter/xfstylemanager.hxx" + +LwpStory::LwpStory(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpContent(objHdr, pStrm),m_bPMModified(sal_False),m_pCurrentLayout(NULL), + m_pTabLayout(NULL),m_bDropcap(sal_False), m_pHyperlinkMgr(new LwpHyperlinkMgr) +{} + +LwpStory::~LwpStory() +{ + if (m_pHyperlinkMgr) + delete m_pHyperlinkMgr; +} +void LwpStory::Read() +{ + LwpContent::Read(); + m_ParaList.Read(m_pObjStrm); + m_FirstParaStyle.ReadIndexed(m_pObjStrm); + m_pObjStrm->SkipExtra(); +} + +#include "lwppara.hxx" +#include "lwpobjfactory.hxx" +/************************************************************************** + * @descr: Convert all the contents in current story + * @param: + * @param: + * @return: +**************************************************************************/ +void LwpStory::XFConvert(XFContentContainer* pCont) +{ + //process frame which anchor frame + XFConvertFrameInFrame(pCont); + //process para list + XFContentContainer* pParaCont = pCont; + LwpPara* pPara = static_cast<LwpPara*> ( GetFirstPara()->obj() ); + while(pPara) + { + pPara->SetFoundry(m_pFoundry); + pPara->XFConvert(pParaCont); + + //Get the xfcontainer for the next para + pParaCont = pPara->GetXFContainer(); + pPara = static_cast<LwpPara*> ( pPara->GetNext()->obj() ); + } + + //process frame which anchor is to cell after converter all the para + XFConvertFrameInCell(pCont); + XFConvertFrameInHeaderFooter(pCont); + + //Release Lwp Objects + LwpPara* pCur = static_cast<LwpPara*> (GetFirstPara()->obj()); + LwpPara* pNext; + while(pCur) + { + pCur->Release(); + pNext = static_cast<LwpPara*> ( pCur->GetNext()->obj() ); + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + LwpObjectFactory* pObjMgr = pGlobal->GetLwpObjFactory(); + pObjMgr->ReleaseObject(*pCur->GetObjectID()); + pCur = pNext; + } +} + +void LwpStory::RegisterStyle() +{ + LwpPara* pPara = static_cast<LwpPara*>( GetFirstPara()->obj() ); + while(pPara) + { + pPara->SetFoundry(m_pFoundry); + pPara->RegisterStyle(); + pPara = static_cast<LwpPara*>(pPara->GetNext()->obj()); + } +} + +void LwpStory::Parse(IXFStream* pOutputStream) +{ + m_pXFContainer = new XFContentContainer; + XFConvert(m_pXFContainer); + m_pXFContainer->ToXml(pOutputStream); + delete m_pXFContainer; + m_pXFContainer = NULL; + + //It seems that, currently, we do not need to process the child story + /*LwpObject* pChildStory = GetFirstStory()->obj(); + if(pChildStory) + { + pChildStory->SetFoundry(m_pFoundry); + pChildStory->Parse(pOutputStream); + }*/ + + //Don't process the next story +/* LwpObject* pNextStory = GetNextStory()->obj(); + if(pNextStory) + { + pNextStory->SetFoundry(m_pFoundry); + pNextStory->Parse(pOutputStream); + }*/ + +} + +#include "lwppagelayout.hxx" +/************************************************************************** + * @descr: Set current page layout. If pPageLayout is a mirro page layout, + use odd child page layout as current page layout. + * @param: + * @param: + * @return: +**************************************************************************/ +void LwpStory::SetCurrentLayout(LwpPageLayout *pPageLayout) +{ + LwpPageLayout* pLayout = pPageLayout->GetOddChildLayout(); + if(pLayout) + { + m_pCurrentLayout = pLayout; + m_pTabLayout = pLayout; + } + else + { + m_pCurrentLayout = pPageLayout; + m_pTabLayout = pPageLayout; + } + m_bPMModified = sal_True; +} + +void LwpStory::AddPageLayout(LwpPageLayout * pObject) +{ + m_LayoutList.push_back(pObject); +} +/************************************************************************** + * @descr: Get the next page layout relative to m_pCurrentLayout + * @param: + * @param: + * @return: +**************************************************************************/ +LwpPageLayout* LwpStory::GetNextPageLayout() +{ + std::vector<LwpPageLayout*>::iterator it; + for( it = m_LayoutList.begin(); it != m_LayoutList.end(); it++ ) + { + if(m_pCurrentLayout == *it) + { + if((it+1) !=m_LayoutList.end()) + { + return *(it+1); + } + } + } + return NULL; +} +/************************************************************************** + * @descr: Sort the pagelayout according to their position + * @param: + * @param: + * @return: +**************************************************************************/ +void LwpStory::SortPageLayout() +{ + //Get all the pagelayout and store in list + std::vector<LwpPageLayout*> aLayoutList; + LwpVirtualLayout* pLayout = GetLayout(NULL); + while(pLayout) + { + if(pLayout->IsPage()) + { + LwpLayout::UseWhenType eSectionType = static_cast<LwpPageLayout*>(pLayout)->GetUseWhenType(); + //for mirror page, the child is pagelayout + LwpVirtualLayout* pParent = pLayout->GetParentLayout(); + if(eSectionType != LwpLayout::StartWithinColume && !pParent->IsPage()) + { + aLayoutList.push_back(static_cast<LwpPageLayout*>(pLayout)); + } + } + pLayout = GetLayout(pLayout); + } + // sort the pagelayout according to their position + LwpPageLayout* pTemp = NULL; + std::vector<LwpPageLayout*>::iterator aIt; + std::vector<LwpPageLayout*>::iterator bIt; + for( aIt = aLayoutList.begin(); aIt != aLayoutList.end() -1; aIt++) + { + for( bIt = aIt +1; bIt != aLayoutList.end(); bIt ++) + { + if(**aIt < **bIt) + { + continue; + } + else + { + pTemp = *aIt; + *aIt = *bIt; + *bIt = pTemp; + } + } + } + + //put all the sorted layouts into list + m_LayoutList.clear(); + + for( aIt = aLayoutList.begin(); aIt != aLayoutList.end(); aIt++) + { + m_LayoutList.push_back(*aIt); + } +} + +/************************************************************************** + * @descr: whether need create a new section and reset column in current page layout + * @param: + * @param: + * @return: sal_True if need create a new section +**************************************************************************/ +sal_Bool LwpStory::IsNeedSection() +{ + sal_Bool bColumns = sal_False; + sal_Bool bNewSection = sal_False; + if(m_pCurrentLayout) + { + if(m_pCurrentLayout->HasColumns()) + { + //get the following pagelayout and its type + bColumns = sal_True; + LwpPageLayout* pNextLayout = GetNextPageLayout(); + if(pNextLayout) + { + //get layout type + LwpLayout::UseWhenType eWhenType = pNextLayout->GetUseWhenType(); + switch(eWhenType) + { + case LwpLayout::StartWithinColume://not support now + case LwpLayout::StartWithinPage: + { + bColumns =sal_False; + bNewSection = sal_True; + break; + } + case LwpLayout::StartOnNextPage: + case LwpLayout::StartOnOddPage://not support now + case LwpLayout::StartOnEvenPage://not support now + { + bColumns =sal_True; + bNewSection = sal_False; + break; + } + default: + break; + } + } + + //if bColumns is ture, the page layout doesn't need columns, set the xfcolumns to NULL in page master + if(!bColumns) + { + m_pCurrentLayout->ResetXFColumns(); + } + } + SetPMModified(sal_False); + } + return bNewSection; +} +/************************************************************************** + * @descr: process frame which anchor type is to page, frame or cell + * @param: + * @param: + * @return: +**************************************************************************/ +void LwpStory::XFConvertFrame(XFContentContainer* pCont) +{ + LwpVirtualLayout* pLayout = GetLayout(NULL); + while(pLayout) + { + LwpVirtualLayout* pFrameLayout = static_cast<LwpVirtualLayout*>(pLayout->GetChildHead()->obj()); + while(pFrameLayout) + { + if((pFrameLayout->IsAnchorPage()&&(pFrameLayout->IsFrame()||pFrameLayout->IsSuperTable()||pFrameLayout->IsGroupHead())) + ||(pFrameLayout->IsAnchorFrame())) + { + pFrameLayout->XFConvert(pCont); + } + pFrameLayout = static_cast<LwpVirtualLayout*>(pFrameLayout->GetNext()->obj()); + } + pLayout = GetLayout(pLayout); + } +} +/************************************************************************** + * @descr: process frame which anchor type is to cell + * @param: + * @param: + * @return: +**************************************************************************/ +void LwpStory::XFConvertFrameInCell(XFContentContainer* pCont) +{ + LwpVirtualLayout* pLayout = GetLayout(NULL); + while(pLayout) + { + LwpVirtualLayout* pFrameLayout = static_cast<LwpVirtualLayout*>(pLayout->GetChildHead()->obj()); + while(pFrameLayout) + { + + //if(pFrameLayout->IsAnchorCell()) + if(pFrameLayout->IsAnchorCell() && pFrameLayout->HasContent()) + { + //get the first xfpara + XFContentContainer* pXFFirtPara = static_cast<XFContentContainer*>(pCont->FindFirstContent(enumXFContentPara)); + if(pXFFirtPara) + pFrameLayout->XFConvert(pXFFirtPara); + } + pFrameLayout = static_cast<LwpVirtualLayout*>(pFrameLayout->GetNext()->obj()); + } + pLayout = GetLayout(pLayout); + } +} + +/************************************************************************** + * @descr: process frame which anchor type is to page + * @param: + * @param: + * @return: +**************************************************************************/ +void LwpStory::XFConvertFrameInPage(XFContentContainer* pCont) +{ + LwpVirtualLayout* pLayout = GetLayout(NULL); + while(pLayout) + { + LwpVirtualLayout* pFrameLayout = static_cast<LwpVirtualLayout*>(pLayout->GetChildHead()->obj()); + while(pFrameLayout) + { + if((pFrameLayout->IsAnchorPage() + &&(pFrameLayout->IsFrame() + ||pFrameLayout->IsSuperTable() + ||pFrameLayout->IsGroupHead()))) + { + pFrameLayout->XFConvert(pCont); + } + pFrameLayout = static_cast<LwpVirtualLayout*>(pFrameLayout->GetNext()->obj()); + } + pLayout = GetLayout(pLayout); + } +} +/************************************************************************** + * @descr: process frame which anchor type is to frame + * @param: + * @param: + * @return: +**************************************************************************/ +void LwpStory::XFConvertFrameInFrame(XFContentContainer* pCont) +{ + LwpVirtualLayout* pLayout = GetLayout(NULL); + while(pLayout) + { + LwpVirtualLayout* pFrameLayout = static_cast<LwpVirtualLayout*>(pLayout->GetChildHead()->obj()); + while(pFrameLayout) + { + if(pFrameLayout->IsAnchorFrame()) + { + pFrameLayout->XFConvert(pCont); + } + pFrameLayout = static_cast<LwpVirtualLayout*>(pFrameLayout->GetNext()->obj()); + } + pLayout = GetLayout(pLayout); + } +} +/************************************************************************** + * @descr: process frame which anchor type is to page and the frame is contained by header or footer + * @param: + * @param: + * @return: +**************************************************************************/ +void LwpStory::XFConvertFrameInHeaderFooter(XFContentContainer* pCont) +{ + LwpVirtualLayout* pLayout = GetLayout(NULL); + while(pLayout) + { + LwpVirtualLayout* pFrameLayout = static_cast<LwpVirtualLayout*>(pLayout->GetChildHead()->obj()); + while(pFrameLayout) + { + if(pFrameLayout->IsAnchorPage() && (pLayout->IsHeader() || pLayout->IsFooter())) + { + //The frame must be included by <text:p> + XFContentContainer* pXFFirtPara = static_cast<XFContentContainer*>(pCont->FindFirstContent(enumXFContentPara)); + if(pXFFirtPara) + pFrameLayout->XFConvert(pXFFirtPara); + } + pFrameLayout = static_cast<LwpVirtualLayout*>(pFrameLayout->GetNext()->obj()); + } + pLayout = GetLayout(pLayout); + } +} + +void LwpStory::AddXFContent(XFContent* pContent) +{ + if(m_pXFContainer) + m_pXFContainer->Add(pContent); +} + +XFContentContainer* LwpStory::GetXFContent() +{ + if(m_pXFContainer) + return m_pXFContainer; + else + return NULL; +} + +LwpPara* LwpStory::GetLastParaOfPreviousStory() +{ + LwpVirtualLayout* pVLayout = this->GetLayout(NULL); + if (pVLayout) + { + return pVLayout->GetLastParaOfPreviousStory(); + } + + return NULL; +} +/************************************************************************** + * @descr: get text from story + * @param: + * @param: + * @return: +**************************************************************************/ +OUString LwpStory::GetContentText(sal_Bool bAllText) +{ + if (bAllText)//convert all text fribs + { + OUString sText = A2OUSTR(""); + //process para list + LwpPara* pPara = static_cast<LwpPara*>(GetFirstPara()->obj()); + while (pPara) + { + pPara->SetFoundry(m_pFoundry); + sText += pPara->GetContentText(sal_True); + pPara = static_cast<LwpPara*>(pPara->GetNext()->obj()); + } + return sText; + } + else //only the first text frib + { + LwpObject* pObj = GetFirstPara()->obj(); + if(pObj) + { + LwpPara* pPara = static_cast<LwpPara*>(pObj); + if (pPara->GetNext()->obj() != NULL) + return A2OUSTR(""); + pPara->SetFoundry(m_pFoundry); + return pPara->GetContentText(); + } + return A2OUSTR(""); + } + +} +OUString LwpStory::RegisterFirstFribStyle() +{ + LwpPara* pPara = static_cast<LwpPara*>(GetFirstPara()->obj()); + pPara->SetFoundry(m_pFoundry); + LwpFribPtr* pFribs = pPara->GetFribs(); + if (pFribs) + { + LwpFrib* pFirstFrib = pFribs->GetFribs(); + pFirstFrib->RegisterStyle(m_pFoundry); + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + XFTextStyle* pBaseStyle = pXFStyleManager->FindTextStyle(pFirstFrib->GetStyleName()); + if (pBaseStyle == NULL) + return A2OUSTR(""); + XFTextStyle* pStyle = new XFTextStyle; + *pStyle = *pBaseStyle; + OUString sName = A2OUSTR("Ruby") + pFirstFrib->GetStyleName(); + pStyle->SetStyleName(sName); + pXFStyleManager->AddStyle(pStyle); + return sName; + } + return A2OUSTR(""); +} + +sal_Bool LwpStory::IsBullStyleUsedBefore(const rtl::OUString& rStyleName, const sal_uInt8& nPos) +{ + std::vector <NamePosPair>::reverse_iterator rIter; + for (rIter = m_vBulletStyleNameList.rbegin(); rIter != m_vBulletStyleNameList.rend(); rIter++) + { + rtl::OUString aName = (*rIter).first; + sal_uInt8 nPosition = (*rIter).second; + if ((*rIter).first == rStyleName && (*rIter).second == nPos) + { + return sal_True; + } + } + return sal_False; +} diff --git a/lotuswordpro/source/filter/lwpstory.hxx b/lotuswordpro/source/filter/lwpstory.hxx new file mode 100644 index 000000000000..0b9534642926 --- /dev/null +++ b/lotuswordpro/source/filter/lwpstory.hxx @@ -0,0 +1,201 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * LwpStory: + 1. Word Pro object for paragraph list; + 2. the content of layout object + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPSTORY_HXX +#define _LWPSTORY_HXX +#include "lwpcontent.hxx" + +class LwpPageLayout; +class LwpStory: public LwpContent +{ +public: + LwpStory(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpStory(); +private: + //File format members: + LwpDLVListHeadTail m_ParaList; + LwpObjectID m_FirstParaStyle; + + // for bullet , 05/23/2005 + typedef std::pair<rtl::OUString, sal_uInt8> NamePosPair; + std::vector <NamePosPair> m_vBulletStyleNameList; + + // , 02/16/2005 + sal_Bool m_bPMModified; + LwpPageLayout* m_pCurrentLayout; //for register page layout style + std::vector<LwpPageLayout*> m_LayoutList; + LwpLayout* m_pTabLayout; //for register tab style + + sal_Bool m_bDropcap; + LwpHyperlinkMgr* m_pHyperlinkMgr; + OUString m_CurrSectionName; + + XFContentContainer* m_pXFContainer; + +protected: + void Read(); + void XFConvertFrame(XFContentContainer* pCont); + void XFConvertFrameInCell(XFContentContainer* pCont); + void XFConvertFrameInFrame(XFContentContainer* pCont); + void XFConvertFrameInHeaderFooter(XFContentContainer* pCont); + +public: + void RegisterStyle(); + void Parse(IXFStream* pOutputStream); + virtual void XFConvert(XFContentContainer* pCont); + void XFConvertFrameInPage(XFContentContainer* pCont); + inline LwpDLVListHeadTail* GetParaList(); + inline LwpObjectID* GetFirstPara(); + inline LwpObjectID* GetLastPara(); + XFContentContainer* GetXFContent(); + void AddXFContent(XFContent* pContent); + + inline sal_Bool GetDropcapFlag(); + inline LwpPageLayout* GetCurrentLayout(); + inline LwpMiddleLayout* GetTabLayout();//for register tab style + inline OUString GetSectionName(); + inline LwpHyperlinkMgr* GetHyperlinkMgr(); + + inline sal_Bool IsPMModified(); + inline void SetPMModified(sal_Bool bPMModified); + inline void SetDropcapFlag(sal_Bool bFlag); + inline void SetTabLayout(LwpLayout* pLayout); + inline void SetSectionName(OUString StyleName); + + void SetCurrentLayout(LwpPageLayout* pPageLayout); + void AddPageLayout(LwpPageLayout* pObject); + LwpPageLayout* GetNextPageLayout(); + sal_Bool IsNeedSection(); + void SortPageLayout(); + + LwpPara* GetLastParaOfPreviousStory(); + + OUString GetContentText(sal_Bool bAllText = sal_False);//add by ,for CHB,05/5/25 + inline void AddBullStyleName2List(const rtl::OUString& rStyleName, const sal_uInt8& nPos); + sal_Bool IsBullStyleUsedBefore(const rtl::OUString& rStyleName, const sal_uInt8& nPos); + + OUString RegisterFirstFribStyle(); +}; + +LwpDLVListHeadTail* LwpStory::GetParaList() +{ + return &m_ParaList; +} +LwpObjectID* LwpStory::GetFirstPara() +{ + return m_ParaList.GetHead(); +} +LwpObjectID* LwpStory::GetLastPara() +{ + return m_ParaList.GetTail(); +} +sal_Bool LwpStory::GetDropcapFlag() +{ + return m_bDropcap; +} +LwpMiddleLayout* LwpStory::GetTabLayout() +{ + if(m_pTabLayout) + return m_pTabLayout; + return static_cast<LwpMiddleLayout*>(GetLayout(NULL)); +} +void LwpStory::SetPMModified(sal_Bool bPMModified) +{ + m_bPMModified = bPMModified; +} +void LwpStory::SetDropcapFlag(sal_Bool bFlag) +{ + m_bDropcap = bFlag; +} +void LwpStory::SetTabLayout(LwpLayout* pLayout) +{ + m_pTabLayout = pLayout; +} +void LwpStory::SetSectionName(OUString StyleName) +{ + m_CurrSectionName = StyleName; +} +OUString LwpStory::GetSectionName() +{ + return m_CurrSectionName; +} +sal_Bool LwpStory::IsPMModified() +{ + return m_bPMModified; +} +LwpPageLayout* LwpStory::GetCurrentLayout() +{ + return m_pCurrentLayout; +} +LwpHyperlinkMgr* LwpStory::GetHyperlinkMgr() +{ + return m_pHyperlinkMgr; +} +inline void LwpStory::AddBullStyleName2List(const rtl::OUString& rStyleName, const sal_uInt8& nPos) +{ + m_vBulletStyleNameList.push_back(std::make_pair(rStyleName, nPos)); +} + +#endif diff --git a/lotuswordpro/source/filter/lwpstyledef.hxx b/lotuswordpro/source/filter/lwpstyledef.hxx new file mode 100644 index 000000000000..3b7c44856c10 --- /dev/null +++ b/lotuswordpro/source/filter/lwpstyledef.hxx @@ -0,0 +1,257 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _LWPSTYLEDEF_H_ +#define _LWPSTYLEDEF_H_ + +#define INVALID_ATTR_ID 0 +#define EXTERNAL_ID 0x8000 +#define EXTERNAL_MASK 0x7FFF +#define MAX_DESIGNERBORDERS 18 + +#define BORDER_SOLID 1 +#define BORDER_SDASH 2 +#define BORDER_LDASH 3 +#define BORDER_WAVY 4 +#define BORDER_THKWAVY 5 +#define BORDER_LSDASH 6 +#define BORDER_LSSDASH 7 +#define BORDER_DOT 8 +#define BORDER_CIRCLE 9 +#define BORDER_DBLWAVY 10 +#define BORDER_DBLTHKWAVY 11 +#define BORDER_STAR 12 +#define BORDER_ROPE 13 +#define BORDER_DECO1 14 +#define BORDER_DECO2 15 +#define BORDER_RAIN 16 +#define BORDER_PIN 17 +#define BORDER_ROSE 18 +#define BORDER_SUNF 19 +#define BORDER_DECO3 20 +#define BORDER_WARNING 21 +// SPACE 22 +#define BORDER_GIRDER 23 + +// User defined bitmap borders (200 - 400) +//======================================== + +// scalable lines +#define BGRP_SOLID 20 +#define BGRP_DOUBLE_ONE 21 +#define BGRP_DOUBLE_TWO 22 +#define BGRP_121 23 +#define BGRP_31 24 +#define BGRP_13 25 +#define BGRP_WAVY 26 +#define BGRP_DBLWAVY 27 +#define BGRP_THICK_WAVY 28 +#define BGRP_THICK_DBLWAVY 29 +#define BGRP_SDASH 30 +#define BGRP_LDASH 31 +#define BGRP_LDASH_SDASH 32 +#define BGRP_LDASH_SDASH_SDASH 33 +#define BGRP_BUTTONUP 34 +#define BGRP_BUTTONDOWN 35 +#define BGRP_13SPACE 36 +#define BGRP_31SPACE 37 +#define BGRP_DIAGONAL 38 +#define BGRP_TARO 39 +#define BGRP_DOT 40 +#define BGRP_CIRCLE 41 +#define BGRP_STAR 42 +#define BGRP_ROPE 43 +#define BGRP_DECO1 44 +#define BGRP_DECO2 45 +#define BGRP_RAIN 46 +#define BGRP_PIN 47 +#define BGRP_ROSE 48 +#define BGRP_SUNF 49 +#define BGRP_DECO3 50 +#define BGRP_WARNING 51 +//SPACE 52 +#define BGRP_GIRDER 53 + +#define UNIT_4_96 ((UNIT)196608L) //INCHES(4/96) +#define UNIT_13_96 ((UNIT)638976L) //INCHES(13/96) +#define UNIT_14_96 ((UNIT)688128L) //INCHES(14/96) +#define UNIT_15_96 ((UNIT)737280L) //INCHES(15/96) +#define UNIT_17_96 ((UNIT)835584L) //INCHES(17/96) +#define UNIT_18_96 ((UNIT)884736L) //INCHES(18/96) +#define UNIT_19_96 ((UNIT)933888L) //INCHES(19/96) +#define UNIT_20_96 ((UNIT)983040L) //INCHES(20/96) +#define UNIT_21_96 ((UNIT)1032192L) //INCHES(21/96) +#define UNIT_22_96 ((UNIT)1081344L) //INCHES(22/96) +#define UNIT_25_96 ((UNIT)1228800L) //INCHES(25/96) +#define UNIT_28_96 ((UNIT)1376256L) //INCHES(28/96) +#define UNIT_34_96 ((UNIT)1671108L) //INCHES(34/96) +#define UNIT_42_96 ((UNIT)2064384L) //INCHES(42/96) +#define UNIT_44_96 ((UNIT)2162688L) //INCHES(44/96) +#define UNIT_48_96 ((UNIT)2359296L) //INCHES(48/96) +#define UNIT_56_96 ((UNIT)2752512L) //INCHES(56/96) +#define UNIT_64_96 ((UNIT)3145728L) //INCHES(64/96) + +#define ROPE_AMPLITUDE UNIT_18_96 +#define ROPE_PERIOD UNIT_20_96 +#define DECO1_AMPLITUDE UNIT_17_96 +#define DECO1_PERIOD UNIT_4_96 +#define DECO2_AMPLITUDE UNIT_18_96 +#define DECO2_PERIOD UNIT_64_96 +#define RAIN_AMPLITUDE UNIT_22_96 +#define RAIN_PERIOD UNIT_28_96 +#define PIN_AMPLITUDE UNIT_15_96 +#define PIN_PERIOD UNIT_4_96 +#define ROSE_AMPLITUDE UNIT_34_96 +#define ROSE_PERIOD UNIT_64_96 +#define SUNF_AMPLITUDE UNIT_25_96 +#define SUNF_PERIOD UNIT_48_96 +#define DECO3_AMPLITUDE UNIT_14_96 +#define DECO3_PERIOD UNIT_20_96 + +#define ROPE_JOIN_W UNIT_18_96 +#define ROPE_JOIN_H UNIT_18_96 +#define DECO1_JOIN_W UNIT_56_96 +#define DECO1_JOIN_H UNIT_44_96 +#define DECO2_JOIN_W UNIT_64_96 +#define DECO2_JOIN_H UNIT_64_96 +#define RAIN_JOIN_W UNIT_48_96 +#define RAIN_JOIN_H UNIT_48_96 +#define PIN_JOIN_W UNIT_42_96 +#define PIN_JOIN_H UNIT_42_96 +#define ROSE_JOIN_W UNIT_48_96 +#define ROSE_JOIN_H UNIT_48_96 +#define SUNF_JOIN_W UNIT_48_96 +#define SUNF_JOIN_H UNIT_48_96 +#define DECO3_JOIN_W UNIT_56_96 +#define DECO3_JOIN_H UNIT_56_96 + +// User defined bitmap border groups 200 - 400 +//============================================ + +/* background patterns */ +#define BACK_TRANSPARENT 0 +#define BACK_FILL 1 +#define BACK_PATTERN 2 +#define BACK_10PCTDOTS 3 +#define BACK_30PCTDOTS 4 +#define BACK_50PCTDOTS 5 +#define BACK_75PCTDOTS 6 +#define BACK_90PCTDOTS 7 +#define BACK_90PCTINVDOTS 8 +#define BACK_75PCTINVDOTS 9 +#define BACK_50PCTINVDOTS 10 +#define BACK_30PCTINVDOTS 11 +#define BACK_10PCTINVDOTS 12 +#define BACK_MARBLES 13 +#define BACK_STARRYNIGHT 14 +#define BACK_DIAGTHICK 15 +#define BACK_DIAGTHIN 16 +#define BACK_DIAGDOUBLE 17 +#define BACK_DIAGDOUBLENARROW 18 +#define BACK_DIAGTRIPLE 19 +#define BACK_DIAGSINGLEWIDE 20 +#define BACK_DIAGTHICKINV 21 +#define BACK_DIAGTHININV 22 +#define BACK_DIAGDOUBLEINV 23 +#define BACK_DIAGDOUBLENARROWINV 24 +#define BACK_DIAGTRIPLEINV 25 +#define BACK_DIAGSINGLEWIDEINV 26 +#define BACK_CHAINLINKSMALLINV 27 +#define BACK_CHAINLINKSMALL 28 +#define BACK_CHAINLINKMEDIUM 29 +#define BACK_CHAINLINKLARGE 30 +#define BACK_HORZSTRIPE1 31 +#define BACK_HORZSTRIPE2 32 +#define BACK_HORZSTRIPE3 33 +#define BACK_HORZSTRIPE4 34 +#define BACK_VERTSTRIPE1 35 +#define BACK_VERTSTRIPE2 36 +#define BACK_VERTSTRIPE3 37 +#define BACK_VERTSTRIPE4 38 +#define BACK_GRIDSMALL 39 +#define BACK_GRIDMEDIUM 40 +#define BACK_GRIDLARGE 41 +#define BACK_BOXDOT 42 +#define BACK_GOLFGREEN 43 +#define BACK_DITZ 44 +#define BACK_HORZWEAVE 45 +#define BACK_APPLEPIE 46 +#define BACK_BRICK 47 +#define BACK_DIAGBRICK 48 +#define BACK_CHECKER1 49 +#define BACK_CHECKER2 50 +#define BACK_CHECKER3 51 +#define BACK_CHECKER4 52 +#define BACK_CHECKER5 53 +#define BACK_SNOWFLAKE 54 +#define BACK_MARGARITA 55 +#define BACK_SIDEHARP 56 +#define BACK_SCALES 57 +#define BACK_TAYLOR 58 +#define BACK_BUBBLES 59 +#define BACK_ARGYLE 60 +#define BACK_INDIAN1 61 +#define BACK_INDIAN3 62 +#define BACK_PEACHPIE 63 +#define BACK_GRADIENT1 64 +#define BACK_GRADIENT2 65 +#define BACK_GRADIENT3 66 +#define BACK_GRADIENT4 67 +#define BACK_GRADIENT5 68 +#define BACK_GRADIENT6 69 +#define BACK_GRADIENT7 70 +#define BACK_GRADIENT8 71 + +#endif //STYLEDEF_H_ diff --git a/lotuswordpro/source/filter/lwpsvstream.cxx b/lotuswordpro/source/filter/lwpsvstream.cxx new file mode 100644 index 000000000000..790696985b65 --- /dev/null +++ b/lotuswordpro/source/filter/lwpsvstream.cxx @@ -0,0 +1,99 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "lwpsvstream.hxx" +#include <memory> + +const sal_uInt32 LwpSvStream::LWP_STREAM_BASE = 0x0010; + +LwpSvStream::LwpSvStream(SvStream* pStream, LwpSvStream * pCompressed) + : m_pStream(pStream), m_pCompressedStream(pCompressed) +{ +} + +/** + * @descr read nBytesToRead bytes to buf +*/ +sal_Int32 LwpSvStream::Read(void* buf, sal_Int32 nBytesToRead) +{ + return m_pStream->Read(buf,nBytesToRead); +} +/** + * @descr SeekRel in stream +*/ +sal_Int64 LwpSvStream::SeekRel(sal_Int64 pos) +{ + return m_pStream->SeekRel(pos); +} +/** + * @descr Get the current position in stream +*/ +sal_Int64 LwpSvStream::Tell() +{ + return m_pStream->Tell(); +} +/** + * @descr Seek to pos +*/ +sal_Int64 LwpSvStream::Seek(sal_Int64 pos) +{ + return m_pStream->Seek(pos); +} +/** + * @descr Return the stream data length +*/ +//sal_Int64 LwpSvStream::GetLength() +//{ +// return m_pStream->get +//} diff --git a/lotuswordpro/source/filter/lwpsvstream.hxx b/lotuswordpro/source/filter/lwpsvstream.hxx new file mode 100644 index 000000000000..34bab24332bf --- /dev/null +++ b/lotuswordpro/source/filter/lwpsvstream.hxx @@ -0,0 +1,99 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _SVSTREAM_HXX +#define _SVSTREAM_HXX + +#include "lwpheader.hxx" +#include "lwpunoheader.hxx" +#include <tools/stream.hxx> + +/** + * @brief encapsulate XInputStream to provide SvStream like interfaces +*/ +class LwpSvStream +{ +public: + LwpSvStream(SvStream* pStream, LwpSvStream * pCompressed = NULL); + sal_Int32 Read( void* bytes, sal_Int32 nBytesToRead ); + sal_Int64 SeekRel( sal_Int64 pos ); + sal_Int64 Tell(); + sal_Int64 Seek( sal_Int64 pos ); +// sal_Int64 GetLength(); + static const sal_uInt32 LWP_STREAM_BASE; + + // added by for small file feature + LwpSvStream * GetCompressedStream() + { + return m_pCompressedStream; + }; + SvStream * GetStream() + { + return m_pStream; + } + // end of added by + +private: + // when the file opened is small file, m_pStream is the decompressed stream + // when not, m_pStream contains the normal stream + SvStream* m_pStream; + + // added by for small file feature + // when the file opened is small file, this stream is + // for saving the compressed stream which is to be used for Chart/OLE as BENTO container + LwpSvStream * m_pCompressedStream; + // end of added by + +}; +#endif diff --git a/lotuswordpro/source/filter/lwptable.cxx b/lotuswordpro/source/filter/lwptable.cxx new file mode 100644 index 000000000000..ff072992f41c --- /dev/null +++ b/lotuswordpro/source/filter/lwptable.cxx @@ -0,0 +1,275 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - table object + */ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ + + #include "lwptable.hxx" + + LwpSuperTable::LwpSuperTable(LwpObjectHeader &objHdr, LwpSvStream* pStrm):LwpContent(objHdr, pStrm) +{} + +LwpSuperTable::~LwpSuperTable() +{} + +void LwpSuperTable::Read() +{ + LwpContent::Read(); + m_pObjStrm->SkipExtra(); + +} + void LwpSuperTable::Parse(IXFStream* pOutputStream) +{ +} + +//Added by for XFConvert refactor, 03/31/2005 +void LwpSuperTable::XFConvert(XFContentContainer* pCont) +{} +//End of Add +/*****************************************************************************/ + LwpTable::LwpTable(LwpObjectHeader &objHdr, LwpSvStream* pStrm):LwpContent(objHdr, pStrm) +{} + +LwpTable::~LwpTable() +{} + +void LwpTable::Read() +{ + LwpContent::Read(); + //m_RowCache.Read(m_pObjStrm); + //m_ColumnCache.Read(m_pObjStrm); + + //m_CPNotifyList.Read(m_pObjStrm); + //m_CPTempVersionedNotifyList.Read(m_pObjStrm); + + m_nRow = m_pObjStrm->QuickReaduInt16(); + m_nColumn = m_pObjStrm->QuickReaduInt16(); + + m_nHeight = m_pObjStrm->QuickReadInt32(); + m_nWidth = m_pObjStrm->QuickReadInt32(); + + m_nDefaultAutoGrowRowHeight = m_pObjStrm->QuickReadInt32(); + + m_nAttributes = m_pObjStrm->QuickReaduInt16(); + + m_Layout.ReadIndexed(m_pObjStrm); + + m_DefaultCellStyle.ReadIndexed(m_pObjStrm); + if (LwpFileHeader::m_nFileRevision >= 0x0007) + m_CPNotifyList.Read(m_pObjStrm); + + m_pObjStrm->SkipExtra(); +} + +sal_Bool LwpTable::IsNumberDown() +{ + if (m_nAttributes & NUMBER_DOWN) + return sal_True; + return sal_False; +} + + void LwpTable::Parse(IXFStream* pOutputStream) +{ +} + + LwpSuperTableLayout* LwpTable::GetSuperTableLayout() +{ + LwpTableLayout* pLayout = static_cast<LwpTableLayout*>(m_Layout.obj()); + if(pLayout) + return static_cast<LwpSuperTableLayout*>(pLayout->GetParent()->obj()); + + return NULL; +} + + /*****************************************************************************/ + LwpTableHeading::LwpTableHeading(LwpObjectHeader &objHdr, LwpSvStream* pStrm):LwpTable(objHdr, pStrm) +{} + +LwpTableHeading::~LwpTableHeading() +{} + +void LwpTableHeading::Read() +{ + m_pObjStrm->SkipExtra(); +} + void LwpTableHeading::Parse(IXFStream* pOutputStream) +{ +} + + /*****************************************************************************/ + LwpTableHint::LwpTableHint(LwpObjectHeader &objHdr, LwpSvStream* pStrm):LwpObject(objHdr, pStrm) +{} + +LwpTableHint::~LwpTableHint() +{} + +void LwpTableHint::Read() +{ + cListNext.ReadIndexed(m_pObjStrm); + if (LwpFileHeader::m_nFileRevision < 0x0006) + m_pObjStrm->SkipExtra(); + + // not implemented yet + //lbool Problem; + // ?Problem = cStart.QuickReadNonEmbedded(m_pObjStrm); + + cLayout.ReadIndexed(m_pObjStrm); + cContent.ReadIndexed(m_pObjStrm); + cFlags = m_pObjStrm->QuickReaduInt8(); + cParent.ReadIndexed(m_pObjStrm); + //cNumberHint.QuickRead (m_pObjStrm); + cLineNumber = m_pObjStrm->QuickReaduInt32(); + cPageHint.ReadIndexed (m_pObjStrm); + + m_pObjStrm->SkipExtra (); + + //CContentHint(pFile, pLoader); + + cRow = m_pObjStrm->QuickReaduInt16(); + cCellHint.Read (m_pObjStrm); + cRowContinued = (sal_Bool)m_pObjStrm->QuickReaduInt16(); + + cTable.ReadIndexed(m_pObjStrm); + //if (!cTable.PointerTest()) + // cTable = NullObjPtr; + + //cCellNumberHint.QuickRead (m_pObjStrm); + LwpObjectID cList; + cList.ReadIndexed(m_pObjStrm); + + m_pObjStrm->SkipExtra(); +} + void LwpTableHint::Parse(IXFStream* pOutputStream) +{ +} + + /*****************************************************************************/ +LwpParallelColumns::LwpParallelColumns(LwpObjectHeader &objHdr, LwpSvStream* pStrm):LwpTable(objHdr, pStrm) +{ +} + +LwpParallelColumns::~LwpParallelColumns() +{ +} + +void LwpParallelColumns::Read() +{ + LwpTable::Read(); + cDefaultLeftColumnStyle.ReadIndexed(m_pObjStrm); + cDefaultRightColumnStyle.ReadIndexed(m_pObjStrm); + + m_pObjStrm->SkipExtra(); +} + /*****************************************************************************/ +LwpGlossary::LwpGlossary(LwpObjectHeader &objHdr, LwpSvStream* pStrm):LwpParallelColumns(objHdr, pStrm) +{ +} + +LwpGlossary::~LwpGlossary() +{ +} +sal_uInt16 LwpGlossary::GetNumIndexRows(void) +{ + if (GetRow() > 0 && GetRow() <= MAX_NUM_ROWS) + return GetRow() - 1; // Minus one row for repeated heading. + return 0; +} + +void LwpGlossary::Read() +{ + LwpParallelColumns::Read(); + + sal_uInt16 FiledEntries = m_pObjStrm->QuickReaduInt16(); + sal_uInt16 NumIndexRows = GetNumIndexRows(); + + sal_uInt16 * cpIndex = NULL; + if (FiledEntries < NumIndexRows) + { + /* We'll have to do sequential (slow) searches. */ + m_pObjStrm->SeekRel( FiledEntries * sizeof(sal_uInt16)); + } + else + { + if (NumIndexRows) + { + sal_uInt16 EntriesRead, EntryCount; + sal_uInt16 *pRowID; + + cpIndex = new sal_uInt16[NumIndexRows]; + + if (cpIndex) + { + pRowID = cpIndex; + + EntriesRead = (FiledEntries > NumIndexRows)? NumIndexRows:FiledEntries; + + for (EntryCount = 1; EntryCount <= EntriesRead; EntryCount++) + *pRowID++ = m_pObjStrm->QuickReaduInt16(); + + if (FiledEntries > EntriesRead) + m_pObjStrm->SeekRel((FiledEntries - EntriesRead)* sizeof(sal_uInt16)); + } + } + else + m_pObjStrm->SeekRel(FiledEntries * sizeof(sal_uInt16)); + } + + m_pObjStrm->SkipExtra(); +} diff --git a/lotuswordpro/source/filter/lwptable.hxx b/lotuswordpro/source/filter/lwptable.hxx new file mode 100644 index 000000000000..c504c915f6d2 --- /dev/null +++ b/lotuswordpro/source/filter/lwptable.hxx @@ -0,0 +1,236 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - table object + */ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ +#ifndef _LWPTABLE_HXX_ +#define _LWPTABLE_HXX_ + +#include "lwpobj.hxx" +#include "lwpobjhdr.hxx" +#include "lwpobjid.hxx" +#include "lwpstory.hxx" +#include "lwppara.hxx" +#include "lwppagehint.hxx" +#include "lwptools.hxx" +#include "lwptablelayout.hxx" + +class LwpTableLayout; +/** + * @brief + * VO_SUPERTABLE object + */ +class LwpSuperTable: public LwpContent +{ +public: + LwpSuperTable(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpSuperTable(); + + virtual void Parse(IXFStream* pOutputStream); + //Added by for XFConvert refactor, 03/31/2005 + virtual void XFConvert(XFContentContainer* pCont); + //End of Add +protected: + void Read(); +}; +/** + * @brief + * for VO_TABLE object reading + */ +class LwpForkedNotifyList +{ +public: + LwpForkedNotifyList(){}; + ~LwpForkedNotifyList() {}; + void Read(LwpObjectStream* pObjStrm) + { + m_PersistentList.Read(pObjStrm); + }; + +protected: + LwpNotifyListPersistent m_PersistentList; +}; +/** + * @brief + * VO_TABLE object + */ +class LwpTable: public LwpContent +{ +public: + LwpTable(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpTable(); + + virtual void Parse(IXFStream* pOutputStream); + double GetWidth() {return LwpTools::ConvertFromUnitsToMetric(m_nWidth);}; + double GetHeight() {return LwpTools::ConvertFromUnitsToMetric(m_nHeight);}; + LwpObjectID * GetDefaultCellStyle() {return &m_DefaultCellStyle;}; + sal_uInt16 GetRow() {return m_nRow;}; + sal_uInt16 GetColumn() {return m_nColumn;}; + LwpTableLayout * GetTableLayout(){return static_cast<LwpTableLayout *>(GetLayout(NULL));}; + sal_Bool IsNumberDown(); + virtual sal_Bool IsTable(){ return sal_True;}; + LwpSuperTableLayout* GetSuperTableLayout(); +protected: + LwpDLVListHeadTail m_RowCache; + LwpDLVListHeadTail m_ColumnCache; + LwpNotifyListPersistent m_CPTempVersionedNotifyList; + LwpForkedNotifyList m_CPNotifyList; + + sal_uInt16 m_nRow, m_nColumn; + sal_Int32 m_nHeight; + sal_Int32 m_nWidth; + sal_Int32 m_nDefaultAutoGrowRowHeight; + sal_uInt16 m_nAttributes; + enum lTableAttributes + { + NUMBER_DOWN = 0x01, + SIZING_VIA_MOUSE_ENABLED = 0x02, + NUMBER_RESET = 0x04 + }; + + LwpObjectID m_Layout; + LwpObjectID m_DefaultCellStyle; // gCVirtualLayout + void Read(); +}; + +/** + * @brief + * + */ +class LwpTableHint : public LwpObject +{ +public: + LwpTableHint(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpTableHint(); + + virtual void Parse(IXFStream* pOutputStream); +protected: + void Read(); + sal_uInt16 cRow; + LwpContentHintHead cCellHint; + sal_Bool cRowContinued; + LwpObjectID cTable; + //CCellNumberHintHead cCellNumberHint; + + LwpObjectID cListNext; + + LwpFribPtr cStart; + LwpObjectID cLayout; // if the layout is complex then we + // store the parent not the left or + // right + LwpObjectID cContent; + sal_uInt8 cFlags; + LwpObjectID cParent; + //CNumberHintHead cNumberHint; + sal_uInt32 cLineNumber; + LwpObjectID cPageHint; // the page hint we belong to + + // cFlags + enum + { + HF_INVALID = 0x01, // hint should not be used to start flowing + HF_LASTPAGE = 0x02, // content ends with this hint + HF_REGISTERED = 0x04, // the hint has been registered with a + // paragraph + HF_DIDBULLET = 0x08, // We flowed bullet text right before + // the end of this stream + HF_PROBLEMPARA = 0x10 // This hint's paragraph changed from disk + }; + + +}; +/** + * @brief + * VO_TABLEHEADING object + */ +class LwpTableHeading : public LwpTable +{ +public: + LwpTableHeading(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpTableHeading(); + + virtual void Parse(IXFStream* pOutputStream); +protected: + void Read(); + +}; +class LwpParallelColumns : public LwpTable +{ +public: + LwpParallelColumns(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpParallelColumns(); +protected: + void Read(); + LwpObjectID cDefaultLeftColumnStyle; + LwpObjectID cDefaultRightColumnStyle; +}; +#define MAX_NUM_ROWS 8192 +class LwpGlossary : public LwpParallelColumns +{ +public: + LwpGlossary(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpGlossary(); +protected: + void Read(); + sal_uInt16 GetNumIndexRows(void); +}; + + +#endif diff --git a/lotuswordpro/source/filter/lwptablelayout.cxx b/lotuswordpro/source/filter/lwptablelayout.cxx new file mode 100644 index 000000000000..7e24ae78e6ba --- /dev/null +++ b/lotuswordpro/source/filter/lwptablelayout.cxx @@ -0,0 +1,1542 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - table layouts + */ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ +#include "lwpglobalmgr.hxx" +#include "lwptablelayout.hxx" +#include "lwpfoundry.hxx" +#include "lwpobjfactory.hxx" +#include "lwpholder.hxx" +#include "lwptable.hxx" +#include "lwptblcell.hxx" +#include "lwpnumericfmt.hxx" +#include "lwpdlvlist.hxx" +#include "lwppara.hxx" + +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xftablestyle.hxx" +#include "xfilter/xftable.hxx" +#include "xfilter/xfrow.hxx" +#include "xfilter/xfrowstyle.hxx" +#include "xfilter/xfcell.hxx" +#include "xfilter/xfcellstyle.hxx" +#include "xfilter/xfcolstyle.hxx" +#include "xfilter/xfframestyle.hxx" +#include "xfilter/xfframe.hxx" +#include "xfilter/xffloatframe.hxx" +#include "lwpframelayout.hxx" +#include "xfilter/xfparastyle.hxx" + +LwpSuperTableLayout::LwpSuperTableLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpPlacableLayout(objHdr, pStrm) +{ + m_pFrame = new LwpFrame(this); +} + +LwpSuperTableLayout::~LwpSuperTableLayout() +{ + if(m_pFrame) + { + delete m_pFrame; + } +} +/** + * @short Read super table layout record + */ +void LwpSuperTableLayout::Read() +{ + LwpPlacableLayout::Read(); + m_pObjStrm->SkipExtra(); + +} +/** + * @short Get child table layout + * @return pointer to table layout + */ +LwpTableLayout* LwpSuperTableLayout::GetTableLayout() +{ + LwpObjectID *pID = GetChildTail(); + + while(pID && !pID->IsNull()) + { + LwpVirtualLayout * pLayout = static_cast<LwpVirtualLayout *>(pID->obj()); + if (!pLayout) + { + break; + } + if (pLayout->GetLayoutType() == LWP_TABLE_LAYOUT) + { + return static_cast<LwpTableLayout *>(pLayout); + } + pID = pLayout->GetPrevious(); + } + + return NULL; +} +/** + * @short Get effective heading table layout, the one just before table layout is the only one which is effective + * @return LwpTableHeadingLayout* - pointer to table heading layout + */ +LwpTableHeadingLayout* LwpSuperTableLayout::GetTableHeadingLayout() +{ + LwpObjectID *pID = GetChildTail(); + + while(pID && !pID->IsNull()) + { + LwpVirtualLayout * pLayout = static_cast<LwpVirtualLayout *>(pID->obj()); + if (!pLayout) + { + break; + } + + if (pLayout->GetLayoutType() == LWP_TABLE_HEADING_LAYOUT) + { + return static_cast<LwpTableHeadingLayout *>(pLayout); + } + pID = pLayout->GetPrevious(); + } + + return NULL; +} +/** + * @short Register super table layout style + */ +void LwpSuperTableLayout::RegisterStyle() +{ + // if this layout is style of real table entry + LwpTableLayout* pTableLayout = GetTableLayout(); + if (pTableLayout != NULL) + { + pTableLayout->SetFoundry(m_pFoundry); + pTableLayout->RegisterStyle(); + } +} +/** + * @short Judge whether table size is according to content, borrowed from Word Pro code + * @param + * @return sal_Bool + */ +sal_Bool LwpSuperTableLayout::IsSizeRightToContent() +{ + /* Only "with paragraph above" tables can size right to content. */ + if (GetRelativeType() == LwpLayoutRelativityGuts::LAY_INLINE_NEWLINE) + return LwpPlacableLayout::IsSizeRightToContent(); + + return sal_False; +} +/** + * @short Judge whether table is justifiable, borrowed from Word Pro code + * @param + * @return sal_Bool + */ +sal_Bool LwpSuperTableLayout::IsJustifiable() +{ + return (GetRelativeType() != LwpLayoutRelativityGuts::LAY_INLINE_NEWLINE || IsSizeRightToContent()); +} +/** + * @short Get width of frame outside table + * @param pTableStyle - pointer of XFTableStyle + * @return double - table width + */ +double LwpSuperTableLayout::GetWidth() +{ + double dWidth = GetTableWidth(); + double dLeft = GetMarginsValue(MARGIN_LEFT); + double dRight = GetMarginsValue(MARGIN_RIGHT); + + return (dWidth + dLeft + dRight); +} +/** + * @short Get width of table + * @param pTableStyle - pointer of XFTableStyle + * @return double - table width + */ +double LwpSuperTableLayout::GetTableWidth() +{ + sal_Int32 nWidth = 0; + if(!IsJustifiable() || ((nWidth = LwpMiddleLayout::GetMinimumWidth()) <= 0)) + { + LwpTableLayout* pTableLayout = GetTableLayout(); + if(!pTableLayout) + { + assert(sal_False); + return 0; + } + LwpTable *pTable = pTableLayout->GetTable(); + if(!pTable) + { + assert(sal_False); + return 0; + } + double dDefaultWidth = pTable->GetWidth(); + sal_uInt16 nCol = pTable->GetColumn(); + + double dWidth = 0; + + for(sal_uInt16 i =0; i< nCol; i++) + { + LwpObjectID *pColumnID = pTableLayout->GetColumnLayoutHead(); + LwpColumnLayout * pColumnLayout = static_cast<LwpColumnLayout *>(pColumnID->obj()); + double dColumnWidth = dDefaultWidth; + while (pColumnLayout) + { + if(pColumnLayout->GetColumnID() == i) + { + dColumnWidth = pColumnLayout->GetWidth(); + break; + } + pColumnID = pColumnLayout->GetNext(); + pColumnLayout = static_cast<LwpColumnLayout *>(pColumnID->obj()); + } + dWidth += dColumnWidth; + } + + return dWidth; + } + + double dLeft = GetMarginsValue(MARGIN_LEFT); + double dRight = GetMarginsValue(MARGIN_RIGHT); + return LwpTools::ConvertFromUnitsToMetric(nWidth)-dLeft-dRight; + +} +/** + * @short Apply shadow to table + * @param pTableStyle - pointer of XFTableStyle + * @return + */ +void LwpSuperTableLayout::ApplyShadow(XFTableStyle *pTableStyle) +{ + // use shadow property of supertable + XFShadow* pXFShadow = GetXFShadow(); + if(pXFShadow) + { + pTableStyle->SetShadow(pXFShadow->GetPosition(), pXFShadow->GetOffset(), pXFShadow->GetColor()); + } +} +/** + * @short Apply pattern fill to table style + * @param pTableStyle - pointer of XFTableStyle + * @return + */ +void LwpSuperTableLayout::ApplyPatternFill(XFTableStyle* pTableStyle) +{ + XFBGImage* pXFBGImage = this->GetFillPattern(); + if (pXFBGImage) + { + pTableStyle->SetBackImage(pXFBGImage); + } +} + +/** + * @short Apply background to table style + * @param pTableStyle - pointer of XFTableStyle + * @return + */ +void LwpSuperTableLayout::ApplyBackGround(XFTableStyle* pTableStyle) +{ + if (this->IsPatternFill()) + { + ApplyPatternFill(pTableStyle); + } + else + { + ApplyBackColor(pTableStyle); + } +} +/** + * @short Apply back color to table + * @param pTableStyle - pointer of XFTableStyle + * @return + */ +void LwpSuperTableLayout::ApplyBackColor(XFTableStyle *pTableStyle) +{ + LwpColor* pColor = GetBackColor(); + if(pColor && pColor->IsValidColor()) + { + XFColor aColor(pColor->To24Color()); + pTableStyle->SetBackColor(aColor); + } +} +/** + * @short Apply watermark to table + * @param pTableStyle - pointer of XFTableStyle + * @return + */ +void LwpSuperTableLayout::ApplyWatermark(XFTableStyle *pTableStyle) +{ + XFBGImage* pBGImage = GetXFBGImage(); + if(pBGImage) + { + pTableStyle->SetBackImage(pBGImage); + } +} +/** + * @short Apply alignment to table + * @param pTableStyle - pointer of XFTableStyle + * @return + */ +void LwpSuperTableLayout::ApplyAlignment(XFTableStyle * pTableStyle) +{ + LwpPoint aPoint; + if (GetGeometry()) + aPoint = GetGeometry()->GetOrigin(); + //LwpPoint aPoint = GetOrigin(); + double dXOffset = LwpTools::ConvertFromUnitsToMetric(aPoint.GetX()); + + // add left padding to alignment distance + double dLeft = GetMarginsValue(MARGIN_LEFT); + + pTableStyle->SetAlign(enumXFAlignStart, dXOffset+ dLeft); +} +/** + * @short Add table to container + * @param pCont - pointer of container + * @return pCont + */ +void LwpSuperTableLayout::XFConvert(XFContentContainer* pCont) +{ + if ( LwpLayoutRelativityGuts::LAY_INLINE_NEWLINE == GetRelativeType() + && !GetContainerLayout()->IsCell()) + { + LwpTableLayout * pTableLayout = GetTableLayout(); + if (pTableLayout) + { + pTableLayout->XFConvert(pCont); + } + } + else if(IsRelativeAnchored()) + { + //anchor to paragraph except "with paragraph above" + XFConvertFrame(pCont); + } + else if(m_pFrame) + { + //anchor to page, frame, cell + m_pFrame->XFConvert(pCont); + } +} +/** + * @short convert frame which anchor to page + * @param + * @return + */ +void LwpSuperTableLayout::XFConvertFrame(XFContentContainer* pCont, sal_Int32 nStart , sal_Int32 nEnd , sal_Bool bAll) +{ + if(m_pFrame) + { + XFFrame* pXFFrame = NULL; + if(nEnd < nStart) + { + pXFFrame = new XFFrame(); + } + else + { + pXFFrame = new XFFloatFrame(nStart, nEnd, bAll); + } + + m_pFrame->Parse(pXFFrame, static_cast<sal_uInt16>(nStart)); + //parse table, and add table to frame + LwpTableLayout * pTableLayout = GetTableLayout(); + if (pTableLayout) + { + pTableLayout->XFConvert(pXFFrame); + } + //add frame to the container + pCont ->Add(pXFFrame); + } + +} +/** + * @short parse frame + * @param + * @return + */ +void LwpSuperTableLayout::ParseFrame(XFFrame * pXFFrame) +{ + if(m_pFrame) + { + m_pFrame->Parse(pXFFrame); + } +} +/** + * @short register frame style + * @param + * @return + */ +void LwpSuperTableLayout::RegisterFrameStyle() +{ + XFFrameStyle* pFrameStyle = new XFFrameStyle(); + m_pFrame->RegisterStyle(pFrameStyle); +} + +LwpTableLayout::LwpTableLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpLayout(objHdr, pStrm),m_pXFTable(NULL), m_nRows(0), m_nCols(0) +{ + m_CellsMap.clear(); + m_pColumns = NULL; +} + +LwpTableLayout::~LwpTableLayout() +{ + m_CellsMap.clear(); + + if (m_pColumns) + { + delete [] m_pColumns; + m_pColumns = NULL; + } +} +/** + * @short Get neighbour cell by specifying ROW+COL + * @param nRow + * @param nCol + * @return LwpCellLayout * + */ +LwpCellLayout * LwpTableLayout::GetCellByRowCol(sal_uInt16 nRow, sal_uInt16 nCol) +{ + if (nRow >= m_nRows || nCol >= m_nCols) + return NULL; + + return m_WordProCellsMap[nRow*m_nCols + nCol]; +} +/** + * @short traverse all table cells + * @param + * @param + * @param + */ +void LwpTableLayout::TraverseTable() +{ + sal_uInt32 iLoop, jLoop; + sal_uInt32 nCount = m_nRows*m_nCols; + + // new cell map nRow*nCOl and initialize + for(iLoop = 0;iLoop<nCount; iLoop++) + { + m_WordProCellsMap.push_back(GetDefaultCellLayout()); + } + + // set value + LwpObjectID *pRowID = GetChildHead(); + LwpRowLayout * pRowLayout = static_cast<LwpRowLayout *>(pRowID->obj()); + while (pRowLayout) + { + pRowLayout->SetRowMap(); + + // for 's analysis job + m_RowsMap[pRowLayout->GetRowID()] = pRowLayout; + pRowLayout->CollectMergeInfo(); + // end for 's analysis + + pRowID = pRowLayout->GetNext(); + pRowLayout = static_cast<LwpRowLayout *>(pRowID->obj()); + } +} + +/** + * @short search the cell map + * @param nRow - row id (0 based) + * @param nRow - row id (0 based) + * @return LwpObjectID * - pointer to cell story object ID + */ +LwpObjectID * LwpTableLayout::SearchCellStoryMap(sal_uInt16 nRow, sal_uInt16 nCol) +{ + if (nRow >= m_nRows || nCol >= m_nCols ) + { + return NULL; + } + + LwpCellLayout * pCell = GetCellByRowCol(nRow, nCol); + if (pCell) + { + // maybe connected cell layout + // maybe default cell layout + if (nRow != pCell->GetRowID() || nCol != pCell->GetColID()) + { + return NULL; + } + return pCell->GetContent(); + } + + return NULL; +} + +/** + * @short Get parent super table layout of table layout + * @return LwpSuperTableLayout * - pointer of parent super table layout + */ +LwpSuperTableLayout * LwpTableLayout::GetSuperTableLayout() +{ + return static_cast<LwpSuperTableLayout *>(GetParent()->obj()); +} +/** + * @short Get table pointer + * @return LwpTable * - content table pointer + */ +LwpTable * LwpTableLayout::GetTable() +{ + LwpTable *pTable = static_cast<LwpTable *>(m_Content.obj()); + return pTable; +} +/** + * @short Get column style name by column ID + * @param sal_uInt16 -- col id(0 based) + * @return OUString - name of column style + */ +OUString LwpTableLayout::GetColumnWidth(sal_uInt16 nCol) +{ + if (nCol >= m_nCols) + { + assert(sal_False); + return m_DefaultColumnStyleName; + } + + LwpColumnLayout * pCol = m_pColumns[nCol]; + if (pCol) + { + return pCol->GetStyleName(); + } + + return m_DefaultColumnStyleName; +} +/** + * @short analyze all columns to get whole table width and width of all columns + * @short and register all column styles + * @param none + */ +void LwpTableLayout::RegisterColumns() +{ + LwpTable * pTable = GetTable(); + LwpSuperTableLayout * pSuper = GetSuperTableLayout(); + + sal_uInt16 nCols = m_nCols; + + m_pColumns = new LwpColumnLayout *[nCols]; + sal_Bool * pWidthCalculated = new sal_Bool[nCols]; + for(sal_uInt16 i=0;i<nCols; i++) + { + pWidthCalculated[i] = sal_False; + m_pColumns[i] = NULL; + } + + double dDefaultColumn = pTable->GetWidth(); + sal_uInt16 nJustifiableColumn = nCols; + + double dTableWidth = pSuper->GetTableWidth(); + + // Get total width of justifiable columns + // NOTICE: all default columns are regarded as justifiable columns + LwpObjectID *pColumnID = GetColumnLayoutHead(); + LwpColumnLayout * pColumnLayout = static_cast<LwpColumnLayout *>(pColumnID->obj()); + while (pColumnLayout) + { + m_pColumns[pColumnLayout->GetColumnID()] = pColumnLayout; + if (!pColumnLayout->IsJustifiable()) + { + pWidthCalculated[pColumnLayout->GetColumnID()] = sal_True; + dTableWidth -= pColumnLayout->GetWidth(); + nJustifiableColumn --; + } + + pColumnID = pColumnLayout->GetNext(); + pColumnLayout = static_cast<LwpColumnLayout *>(pColumnID->obj()); + } + + // if all columns are not justifiable, the rightmost column will be changed to justifiable + if(nJustifiableColumn == 0) + { + nJustifiableColumn ++; + if (m_pColumns[nCols - 1]) + { + pWidthCalculated[nCols-1] = sal_False; + dTableWidth += m_pColumns[nCols-1]->GetWidth(); + } + else + { + // this can't happen + dTableWidth = dDefaultColumn; + assert(sal_False); + } + } + + // justifiable columns will share the remain width averagely + dDefaultColumn = dTableWidth/nJustifiableColumn; + + // register defualt column style + XFColStyle *pColStyle = new XFColStyle(); + pColStyle->SetWidth(static_cast<float>(dDefaultColumn)); + + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_DefaultColumnStyleName = pXFStyleManager->AddStyle(pColStyle)->GetStyleName(); + + // register existed column style + sal_uInt16 i=0; + for( i=0;i<nCols; i++) + { + if(m_pColumns[i]) + { + m_pColumns[i]->SetFoundry(m_pFoundry); + if(!pWidthCalculated[i]) + { + // justifiable ----register style with calculated value + m_pColumns[i]->SetStyleName(m_DefaultColumnStyleName); + } + else + { + // not justifiable ---- register style with original value + m_pColumns[i]->RegisterStyle(m_pColumns[i]->GetWidth()); + } + } + } + delete [] pWidthCalculated; +} +/** + * @short register all row styles + * @param none + */ +void LwpTableLayout::RegisterRows() +{ + LwpTable * pTable = GetTable(); + if (pTable == NULL) + { + assert(sal_False); + return; + } + + // register default row style + XFRowStyle * pRowStyle = new XFRowStyle(); + if (m_nDirection & 0x0030) + { + pRowStyle->SetMinRowHeight((float)pTable->GetHeight()); + } + else + { + pRowStyle->SetRowHeight((float)pTable->GetHeight()); + } + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_DefaultRowStyleName = pXFStyleManager->AddStyle(pRowStyle)->GetStyleName(); + + // register style of rows + LwpObjectID * pRowID = GetChildHead(); + LwpRowLayout * pRowLayout = static_cast<LwpRowLayout *>(pRowID->obj()); + while (pRowLayout) + { + pRowLayout->SetFoundry(m_pFoundry); + pRowLayout->RegisterStyle(); + + pRowID = pRowLayout->GetNext(); + pRowLayout = static_cast<LwpRowLayout *>(pRowID->obj()); + } +} +/** + * @short register table style, if needed, including frame style + * @param none + */ +void LwpTableLayout::RegisterStyle() +{ + // get super table layout + LwpSuperTableLayout * pSuper = GetSuperTableLayout(); + if(!pSuper) + { + assert(sal_False); + return; + } + + // get table + LwpTable * pTable = GetTable(); + if (pTable == NULL) + { + assert(sal_False); + return; + } + + // get row/column number of this table + m_nRows = pTable->GetRow(); + m_nCols = pTable->GetColumn(); + + // get default cell layout of current table + LwpObjectID * pID= pTable->GetDefaultCellStyle(); + if (pID) + { + m_pDefaultCellLayout = static_cast<LwpCellLayout *>(pID->obj()); + } + + // register columns styles + RegisterColumns(); + + // register style of whole table + XFTableStyle * pTableStyle = new XFTableStyle(); + + sal_uInt8 nType = pSuper->GetRelativeType(); + // If the table is not "with paragraph above" placement, create an frame style + // by supertable layout + if ( LwpLayoutRelativityGuts::LAY_INLINE_NEWLINE == nType + && !pSuper->GetContainerLayout()->IsCell()) + { + //with para above +// pSuper->ApplyBackColor(pTableStyle); + pSuper->ApplyBackGround(pTableStyle); + pSuper->ApplyWatermark(pTableStyle); + pSuper->ApplyShadow(pTableStyle); + pSuper->ApplyAlignment(pTableStyle); + pTableStyle->SetWidth(pSuper->GetTableWidth()); + } + else + { + pSuper->RegisterFrameStyle(); + pTableStyle->SetAlign(enumXFAlignCenter); + pTableStyle->SetWidth(pSuper->GetTableWidth()); + } + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_StyleName = pXFStyleManager->AddStyle(pTableStyle)->GetStyleName(); + + //convert to OO table now and register row stle + // traverse + TraverseTable(); + + SplitConflictCells(); + + // Register rows layouts, it must be after SplitConflictCells + RegisterRows(); + + // Parse table + Parse(); + + + //Comment:The old code doesn't check if the LwpFoundry pointer is NULL, + // So the NULL pointer cause sodc frozee. Add code to check the + // the pointer. + //New Code + if( GetFoundry() && GetTable() ) + + PutCellVals( GetFoundry(),*GetTable()->GetObjectID() ); +} +/** + * @short read table layout + * @param none + */ +void LwpTableLayout::Parse() +{ + // get super table layout + LwpSuperTableLayout * pSuper = GetSuperTableLayout(); + if(!pSuper) + { + assert(sal_False); + return; + } + + // set name of object + m_pXFTable = new XFTable; + m_pXFTable->SetTableName(pSuper->GetName()->str()); + // set table style + m_pXFTable->SetStyleName(m_StyleName); + + sal_uInt16 nRow = m_nRows; + sal_uInt8 nCol = (sal_uInt8)m_nCols; + + //process header rows + LwpTableHeadingLayout* pTableHeading; + pTableHeading = pSuper->GetTableHeadingLayout(); + sal_uInt16 nStartHeadRow; + sal_uInt16 nEndHeadRow; + sal_uInt16 nContentRow; + if (pTableHeading) + { + pTableHeading->GetStartEndRow(nStartHeadRow,nEndHeadRow); + if (nStartHeadRow != 0) + ConvertTable(m_pXFTable,0,nRow,0,nCol); + else + { + nContentRow = ConvertHeadingRow(m_pXFTable,nStartHeadRow,nEndHeadRow+1); + ConvertTable(m_pXFTable,nContentRow,nRow,0,nCol); + } + } + else + ConvertTable(m_pXFTable,0,nRow,0,nCol); +} + +/** + * @short read table layout + * @param none + */ +void LwpTableLayout::Read() +{ + LwpLayout::Read(); + + // before layout hierarchy rework! + if(LwpFileHeader::m_nFileRevision < 0x000b) + { + assert(sal_False); + } + m_ColumnLayout.ReadIndexed(m_pObjStrm); + + m_pObjStrm->SkipExtra(); +} + +/** + * @short Convert table + * @param + * @return pCont - container which will contain table + */ +void LwpTableLayout::XFConvert(XFContentContainer* pCont) +{ + + pCont->Add(m_pXFTable); +} +/** + * @short convert heading row + * @param pXFTable - pointer of table + * @param nStartRow - start heading row ID + * @param nEndRow - end heading row ID + */ +sal_uInt16 LwpTableLayout::ConvertHeadingRow( + XFTable* pXFTable,sal_uInt16 nStartHeadRow,sal_uInt16 nEndHeadRow) +{ + sal_uInt16 nContentRow; + sal_uInt8 nCol = static_cast<sal_uInt8>(GetTable()->GetColumn()); + sal_uInt8 nFirstColSpann = 1; + XFTable* pTmpTable = new XFTable; + XFRow* pXFRow; + + ConvertTable(pTmpTable,nStartHeadRow,nEndHeadRow,0,nCol); + + sal_uInt16 nRowNum = static_cast<sal_uInt16>(pTmpTable->GetRowCount()); + sal_uInt8* CellMark = new sal_uInt8[nRowNum]; + sal_Bool bFindFlag = sal_False; + + if (nRowNum == 1) + { + pXFRow = pTmpTable->GetRow(1); + pXFTable->AddHeaderRow(pXFRow); + pTmpTable->RemoveRow(1); + nContentRow = nEndHeadRow; + } + else + { + bFindFlag = FindSplitColMark(pTmpTable,CellMark,nFirstColSpann); + + if (bFindFlag)//split to 2 cells + { + SplitRowToCells(pTmpTable,pXFTable,nFirstColSpann,CellMark); + nContentRow = nEndHeadRow; + } + else//can not split,the first row will be the heading row,the rest will be content row + { + pXFRow = pTmpTable->GetRow(1); + pXFTable->AddHeaderRow(pXFRow); + pTmpTable->RemoveRow(1); + nContentRow = m_RowsMap[0]->GetCurMaxSpannedRows(0,nCol); + } + } + delete pTmpTable; + delete [] CellMark; + return nContentRow; +} + +void LwpTableLayout::SplitRowToCells(XFTable* pTmpTable,XFTable* pXFTable, + sal_uInt8 nFirstColSpann,sal_uInt8* pCellMark) +{ + sal_uInt16 i; + sal_uInt8 j; + sal_uInt16 nRowNum = static_cast<sal_uInt16>(pTmpTable->GetRowCount()); + sal_uInt8 nCol = static_cast<sal_uInt8>(GetTable()->GetColumn()); + + XFRow* pXFRow = new XFRow; + + //register style for heading row + double fHeight = 0; + OUString styleName; + XFRowStyle* pRowStyle = new XFRowStyle; + styleName = pTmpTable->GetRow(1)->GetStyleName(); + + // get settings of the row and assign them to new row style + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + XFRowStyle *pTempRowStyle = static_cast<XFRowStyle*>(pXFStyleManager->FindStyle(styleName)); + if (pTempRowStyle) + *pRowStyle = *pTempRowStyle; + + for (i=1;i<=nRowNum;i++) + { + styleName = pTmpTable->GetRow(i)->GetStyleName(); + fHeight+=static_cast<XFRowStyle*>(pXFStyleManager->FindStyle(styleName))->GetRowHeight(); + } + if (m_nDirection & 0x0030) + { + pRowStyle->SetMinRowHeight((float)fHeight); + } + else + { + pRowStyle->SetRowHeight((float)fHeight); + } + pXFRow->SetStyleName(pXFStyleManager->AddStyle(pRowStyle)->GetStyleName()); + + //construct headong row + XFCell* pXFCell1 = new XFCell; + XFCell* pXFCell2 = new XFCell; + XFTable* pSubTable1 = new XFTable; + XFTable* pSubTable2 = new XFTable; + XFRow* pNewRow; + XFRow* pOldRow; + XFCell* pNewCell; + + for (i=1;i<=nRowNum;i++) + { + pOldRow = pTmpTable->GetRow(i); + pNewRow = new XFRow; + pNewRow->SetStyleName(pOldRow->GetStyleName()); + for (j=1;j<=pCellMark[i];j++) + { + pNewCell = pOldRow->GetCell(j); + pNewRow->AddCell(pNewCell); + } + pSubTable1->AddRow(pNewRow); + } + ConvertColumn(pSubTable1,0,nFirstColSpann);//add column info + + pXFCell1->Add(pSubTable1); + pXFCell1->SetColumnSpaned(nFirstColSpann); + pXFRow->AddCell(pXFCell1); + + for (i=1;i<=nRowNum;i++) + { + pOldRow = pTmpTable->GetRow(i); + pNewRow = new XFRow; + pNewRow->SetStyleName(pOldRow->GetStyleName()); + for(j=pCellMark[i]+1;j<=pOldRow->GetCellCount();j++) + { + pNewCell = pOldRow->GetCell(j); + pNewRow->AddCell(pNewCell); + } + pSubTable2->AddRow(pNewRow); + + } + ConvertColumn(pSubTable2,nFirstColSpann,nCol);//add column info + pXFCell2->Add(pSubTable2); + pXFCell2->SetColumnSpaned(nCol-nFirstColSpann); + pXFRow->AddCell(pXFCell2); + + pXFTable->AddHeaderRow(pXFRow); + + //remove tmp table + for (i=1;i<=nRowNum;i++) + { + pOldRow = pTmpTable->GetRow(i); + for(j=1;j<=pOldRow->GetCellCount();j++) + pOldRow->RemoveCell(j); + pTmpTable->RemoveRow(i); + } +} + +/** + * @short find if the heading rows can be split to 2 cells + * @param pXFTable - pointer of tmp XFtable + * @param CellMark - pointer of cell mark array + */ +sal_Bool LwpTableLayout::FindSplitColMark(XFTable* pXFTable,sal_uInt8* pCellMark, + sal_uInt8& nMaxColSpan) +{ + sal_uInt16 nRowNum = static_cast<sal_uInt16>(pXFTable->GetRowCount()); + sal_uInt8 nColNum = static_cast<sal_uInt8>(pXFTable->GetColumnCount()); + sal_uInt8 nCellMark=0; + sal_uInt8 nCount; + sal_uInt8 nColSpan; + sal_Bool bFindFlag = sal_False; + XFRow* pTmpRow; + + for(sal_uInt8 i=1;i<=nColNum;i++) + { + sal_uInt16 nRowLoop; + sal_uInt8 nCellLoop; + + //find current max column span + nMaxColSpan = 1; + for (nRowLoop=1;nRowLoop<=nRowNum;nRowLoop++) + { + nColSpan = 0; + for(nCellLoop=1; nCellLoop<i+1; nCellLoop++) + { + pTmpRow = pXFTable->GetRow(nRowLoop); + XFCell* pCell = pTmpRow->GetCell(nCellLoop); + if (pCell) + nColSpan += static_cast<sal_uInt8>(pCell->GetColSpaned()); + else + return sal_False; + } + if (nColSpan > nMaxColSpan) + nMaxColSpan = nColSpan; + pCellMark[nRowLoop] = 0;//reset all cell mark to zero + } + + //find if other row has the same colum + for (nRowLoop=1;nRowLoop<=nRowNum;nRowLoop++) + { + pTmpRow = pXFTable->GetRow(nRowLoop); + nCount = 0; + nCellMark = 0; + for (nCellLoop=1; nCellLoop<=pTmpRow->GetCellCount(); nCellLoop++) + { + if (nCount>nMaxColSpan) + break; + nCount+= static_cast<sal_uInt8>(pTmpRow->GetCell(nCellLoop)->GetColSpaned()); + if (nCount == nMaxColSpan) + { + nCellMark = nCellLoop; + break; + } + } + if (nCellMark == 0) + break; + else + pCellMark[nRowLoop] = nCellMark; + } + for(nRowLoop=1;nRowLoop<=nRowNum;nRowLoop++)//check if all ==0,break + { + if (pCellMark[nRowLoop] == 0) + break; + } + if (nRowLoop == nRowNum+1) + { + bFindFlag = sal_True; + return bFindFlag; + } + + } + return bFindFlag; +} + +/** + * @short convert word pro table to SODC table + * @param pXFTable - pointer of table + * @param nStartRow - start row ID + * @param nEndRow - end row ID + * @param nStartCol - start column ID + * @param nEndCol - end column ID + */ +void LwpTableLayout::ConvertTable(XFTable* pXFTable,sal_uInt16 nStartRow, + sal_uInt16 nEndRow,sal_uInt8 nStartCol,sal_uInt8 nEndCol) +{ + //out put column info TO BE CHANGED,note by ,2005/4/4 + ConvertColumn(pXFTable,nStartCol,nEndCol); + //note end + + std::map<sal_uInt16,LwpRowLayout*>::iterator iter; + + for (sal_uInt16 i=nStartRow; i<nEndRow;) + { + iter = m_RowsMap.find(i); + if (iter == m_RowsMap.end()) + { + ConvertDefaultRow(pXFTable,nStartCol,nEndCol,i); + i++; + } + else + { + LwpRowLayout* pRow = iter->second; + if (pRow->GetCurMaxSpannedRows(nStartCol,nEndCol) == 1) + { + pRow->ConvertCommonRow(pXFTable,nStartCol,nEndCol); + i++; + } + else + { + pRow->ConvertRow(pXFTable,nStartCol,nEndCol); + i += pRow->GetCurMaxSpannedRows(nStartCol,nEndCol); + } + } + } +} + +/** + * @short apply numeric value and formula to cell + * @param pFoundry - pointer of foundry + * @param aTableID - table ID + */ +void LwpTableLayout::PutCellVals(LwpFoundry* pFoundry, LwpObjectID aTableID) +{ + + //Comment:The old code doesn't check if the LwpFoundry pointer is NULL, + // So the NULL pointer cause sodc frozee. Add code to check the + // the pointer. + //New Code + if( !pFoundry ) return; + + + try{ + + LwpDLVListHeadHolder* pHolder = (LwpDLVListHeadHolder*)pFoundry->GetNumberManager()->GetTableRangeID().obj(); + + LwpTableRange* pTableRange = (LwpTableRange*)pHolder->GetHeadID()->obj(); + + //Look up the table + while (NULL!=pTableRange) + { + LwpObjectID aID = pTableRange->GetTableID(); + if (aID == aTableID) + { + break; + } + pTableRange = pTableRange->GetNext(); + } + + if (pTableRange) + { + LwpCellRange* pRange = (LwpCellRange*)pTableRange->GetCellRangeID().obj(); + LwpFolder* pFolder = (LwpFolder*)pRange->GetFolderID().obj(); + LwpObjectID aRowListID = pFolder->GetChildHeadID(); + LwpRowList* pRowList = (LwpRowList*)aRowListID.obj(); + + //loop the rowlist + while( NULL!=pRowList) + { + sal_uInt16 nRowID = pRowList->GetRowID(); + { + LwpCellList* pCellList = (LwpCellList*)pRowList->GetChildHeadID().obj(); + //loop the celllist + while( NULL!=pCellList) + { + {//put cell + sal_uInt16 nColID = pCellList->GetColumnID(); + + XFCell* pCell = GetCellsMap(nRowID,static_cast<sal_uInt8>(nColID)); + if (pCell) + { + pCellList->Convert(pCell, this); + + //process paragraph + PostProcessParagraph(pCell, nRowID, nColID); + } + else + { + //Hidden cell would not be in cellsmap + assert(false); + } + } + pCellList = (LwpCellList*)pCellList->GetNextID().obj(); + } + } + pRowList =(LwpRowList*)pRowList->GetNextID().obj(); + } + } + + }catch (...) { + assert(false); + } +} + +/** + * @short 1. set number right alignment to right if number 2. remove tab added before if number + * @param pCell - cell which to be process + * @param nRowID - row number in Word Pro file + * @param nColID - column number in Word Pro file + */ +void LwpTableLayout::PostProcessParagraph(XFCell *pCell, sal_uInt16 nRowID, sal_uInt16 nColID) +{ + // if number right, set alignment to right + LwpCellLayout * pCellLayout = GetCellByRowCol(nRowID, nColID); + if(pCellLayout) + { + XFParagraph * pXFPara = NULL; + //mod by ,fix bug 2759,2006/3/22 + pXFPara = static_cast<XFParagraph*>(pCell->FindFirstContent(enumXFContentPara)); + if (!pXFPara) + return; + //mod end + XFColor aColor; + XFColor aNullColor = XFColor(); + + if ( pXFPara) + { + OUString sNumfmt = pCellLayout->GetNumfmtName(); + sal_Bool bColorMod = sal_False; + XFNumberStyle* pNumStyle = NULL; + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + if (sNumfmt.getLength()) + { + pNumStyle = (XFNumberStyle*)pXFStyleManager->FindStyle( sNumfmt); + aColor = pNumStyle->GetColor(); + if ( pNumStyle && aColor != aNullColor ) + bColorMod = sal_True;//end + } + + XFParaStyle * pStyle = pXFStyleManager->FindParaStyle(pXFPara->GetStyleName()); + if (pStyle->GetNumberRight() || bColorMod) + { + XFParaStyle* pOverStyle = new XFParaStyle; + *pOverStyle = *pStyle; + + if (pStyle->GetNumberRight()) + pOverStyle->SetAlignType(enumXFAlignEnd); + + if (bColorMod) + { + XFFont* pFont = pOverStyle->GetFont(); + aColor = pFont->GetColor(); + if ( aColor == aNullColor ) + { + XFFont* pNewFont = new XFFont; + aColor = pNumStyle->GetColor(); + pNewFont->SetColor(aColor); + pOverStyle->SetFont(pNewFont); + } + } + + pOverStyle->SetStyleName(A2OUSTR("")); + OUString StyleName = pXFStyleManager->AddStyle(pOverStyle)->GetStyleName(); + + pXFPara->SetStyleName(StyleName); + } + } + } +} + +/** + * @short Parse all cols of table + * @param pXFTable - pointer to created XFTable + */ +void LwpTableLayout::ConvertColumn(XFTable *pXFTable,sal_uInt8 nStartCol,sal_uInt8 nEndCol) +{ + LwpTable * pTable = GetTable(); + if (!pTable) + { + assert(sal_False); + return; + } + + for (sal_uInt16 iLoop = 0; iLoop < nEndCol-nStartCol ; iLoop ++) + { + // add row to table + LwpObjectID *pColID = GetColumnLayoutHead(); + LwpColumnLayout * pColumnLayout = static_cast<LwpColumnLayout *>(pColID->obj()); + while (pColumnLayout) + { + if (pColumnLayout->GetColumnID() == (iLoop+nStartCol)) + { + pXFTable->SetColumnStyle(iLoop+1, pColumnLayout->GetStyleName()); + break; + } + pColID = pColumnLayout->GetNext(); + pColumnLayout = static_cast<LwpColumnLayout *>(pColID->obj()); + } + if (!pColumnLayout) + { + pXFTable->SetColumnStyle(iLoop+1, m_DefaultColumnStyleName); + } + } +} +/** + * @short split conflict merged cells + */ +void LwpTableLayout::SplitConflictCells() +{ + LwpTable * pTable = GetTable(); + if (!pTable) + return; + sal_uInt16 nCol = pTable->GetColumn(); + sal_uInt16 nRow = pTable->GetRow(); + + sal_uInt16 nEffectRows; + std::map<sal_uInt16,LwpRowLayout*>::iterator iter1; + std::map<sal_uInt16,LwpRowLayout*>::iterator iter2; + LwpRowLayout* pRowLayout; + LwpRowLayout* pEffectRow; + + for (sal_uInt16 i=0; i<nRow; ) + { + iter1 = m_RowsMap.find(i); + if (iter1 == m_RowsMap.end())//default rows + { + i++; + continue; + } + pRowLayout= iter1->second; + if (pRowLayout->GetMergeCellFlag() == sal_False) + { + i++; + continue; + } + else + { + nEffectRows = i + pRowLayout->GetCurMaxSpannedRows(0,(sal_uInt8)nCol); + + for (sal_uInt16 j = i+1; j<nEffectRows; j++) + { + iter2 = m_RowsMap.find(j); + if (iter2 == m_RowsMap.end()) + continue; + pEffectRow = iter2->second; + if (pEffectRow->GetMergeCellFlag() == sal_False) + continue; + else + pEffectRow->SetCellSplit(nEffectRows); + } + i = nEffectRows; + } + }//end for + +} +/** + * @short add default row which are missing in the file + * @param pXFTable - pointer to new created table + * @param nStartCol - starting column + * @param nEndCol - end column + * @return pXFTable + */ +void LwpTableLayout::ConvertDefaultRow(XFTable* pXFTable,sal_uInt8 nStartCol, + sal_uInt8 nEndCol,sal_uInt16 nRowID) +{ + // current row doesn't exist in the file + XFRow * pRow = new XFRow(); + pRow->SetStyleName(m_DefaultRowStyleName); + sal_Bool bIsTop = sal_False; + sal_Bool bIsRight = sal_False; + + for (sal_uInt16 j =0;j < nEndCol-nStartCol; j++) + { + // if table has default cell layout, use it to ConvertCell + // otherwise use blank cell + XFCell * pCell = NULL; + if (m_pDefaultCellLayout) + { + pCell = m_pDefaultCellLayout->ConvertCell( + *GetTable()->GetObjectID(),nRowID,j+nStartCol); + } + else + { + pCell = new XFCell(); + } + pRow->AddCell(pCell); + } + + pXFTable->AddRow(pRow); +} +/** + * @short set cell map info + * @param pXFCell - pointer to xfcell + * @param nRow - row id + * @param nCol - column id + */ +void LwpTableLayout::SetCellsMap(sal_uInt16 nRow,sal_uInt8 nCol,XFCell* pXFCell) +{ + std::pair<std::pair<sal_uInt16,sal_uInt8>,XFCell*> cell; + std::pair<sal_uInt16,sal_uInt8> pos; + pos.first = nRow; + pos.second = nCol; + cell.first = pos; + cell.second = pXFCell; + m_CellsMap.insert(cell); +} + +/** + * @short get cell map info + * @param nRow - row id + * @param nCol - column id + * @return pXFCell + */ +XFCell* LwpTableLayout::GetCellsMap(sal_uInt16 nRow,sal_uInt8 nCol) +{ + std::pair<sal_uInt16,sal_uInt8> pos; + pos.first = nRow; + pos.second = nCol; + std::map<std::pair<sal_uInt16,sal_uInt8>,XFCell*>::iterator iter; + iter = m_CellsMap.find(pos); + if (iter == m_CellsMap.end()) + return NULL; + return iter->second; +} +/** + * @descr Get row layout by row id + * @param nRow - row id + */ + LwpRowLayout* LwpTableLayout::GetRowLayout(sal_uInt16 nRow) +{ + LwpObjectID *pRowID = GetChildHead(); + LwpRowLayout * pRowLayout = static_cast<LwpRowLayout *>(pRowID->obj()); + while (pRowLayout) + { + if(pRowLayout->GetRowID() == nRow) + return pRowLayout; + + pRowID = pRowLayout->GetNext(); + pRowLayout = static_cast<LwpRowLayout *>(pRowID->obj()); + } + return NULL; +} + + +//add end by +LwpColumnLayout::LwpColumnLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpVirtualLayout(objHdr, pStrm) +{} + +LwpColumnLayout::~LwpColumnLayout() +{} +void LwpColumnLayout::Read() +{ + LwpObjectStream* pStrm = m_pObjStrm; + + LwpVirtualLayout::Read(); + + sal_uInt16 colid; + + colid = pStrm->QuickReaduInt16(); // forced to lushort + ccolid = (sal_uInt8)colid; // Phillip + cwidth = pStrm->QuickReadInt32(); + + pStrm->SkipExtra(); +} + +void LwpColumnLayout::RegisterStyle(double dCalculatedWidth) +{ + XFColStyle * pColStyle = new XFColStyle(); + pColStyle->SetWidth(static_cast<float>(dCalculatedWidth)); + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_StyleName = pXFStyleManager->AddStyle(pColStyle)->GetStyleName(); +} + +LwpTableHeadingLayout::LwpTableHeadingLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpTableLayout(objHdr, pStrm) +{} + +LwpTableHeadingLayout::~LwpTableHeadingLayout() +{} +/** + * @short read table heading layout + * @param + * @return + */ +void LwpTableHeadingLayout::Read() +{ + LwpTableLayout::Read(); + + cStartRow = m_pObjStrm->QuickReaduInt16(); + cEndRow = m_pObjStrm->QuickReaduInt16(); + + m_pObjStrm->SkipExtra(); + +} +/** + * @short get start and end row number of table heading + * @param + * @return *pStartRow - starting row number + * @return *pEndRow - end row number + */ +void LwpTableHeadingLayout::GetStartEndRow(sal_uInt16& nStartRow, sal_uInt16& nEndRow) +{ + nStartRow = cStartRow; + nEndRow = cEndRow; +} +/** + * @short get first row heading layout of table heading + * @param + * @return LwpRowHeadingLayout * - pointer to first row heading layout of table heading + */ +LwpRowHeadingLayout * LwpTableHeadingLayout::GetFirstRowHeadingLayout() +{ + LwpObjectID *pID = GetChildHead(); + if(pID && !pID->IsNull()) + { + LwpRowHeadingLayout * pHeadingRow = static_cast<LwpRowHeadingLayout *>(pID->obj()); + return pHeadingRow; + } + return NULL; +} + +LwpSuperParallelColumnLayout::LwpSuperParallelColumnLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm):LwpSuperTableLayout(objHdr, pStrm) +{ +} +LwpSuperParallelColumnLayout::~LwpSuperParallelColumnLayout() +{} + +void LwpSuperParallelColumnLayout::Read() +{ + LwpSuperTableLayout::Read(); + m_pObjStrm->SkipExtra(); + +} + +LwpSuperGlossaryLayout::LwpSuperGlossaryLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm):LwpSuperTableLayout(objHdr, pStrm) +{ +} + +LwpSuperGlossaryLayout::~LwpSuperGlossaryLayout() +{ +} + +void LwpSuperGlossaryLayout::Read() +{ + LwpSuperTableLayout::Read(); + m_pObjStrm->SkipExtra(); +} + + +LwpParallelColumnsLayout::LwpParallelColumnsLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm):LwpTableLayout(objHdr, pStrm) +{ +} + +LwpParallelColumnsLayout::~LwpParallelColumnsLayout() +{ +} + +void LwpParallelColumnsLayout::Read() +{ + LwpTableLayout::Read(); + m_pObjStrm->SkipExtra(); +} diff --git a/lotuswordpro/source/filter/lwptablelayout.hxx b/lotuswordpro/source/filter/lwptablelayout.hxx new file mode 100644 index 000000000000..a9a6f484bbff --- /dev/null +++ b/lotuswordpro/source/filter/lwptablelayout.hxx @@ -0,0 +1,269 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - table layouts + */ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ +#ifndef _LWPTABLELAYOUT_HXX +#define _LWPTABLELAYOUT_HXX +#include <vector> +#include <map> +#include "lwplayout.hxx" + +class XFTableStyle; +class XFTable; +class XFCell; +class LwpTable; +class LwpFrame; +class LwpSuperTableLayout; +class LwpRowLayout; +class LwpCellLayout; +class LwpTableHeadingLayout; +class LwpRowHeadingLayout; +class LwpConnectedCellLayout; +class LwpColumnLayout; + +/** + * @brief + * VO_TABLELAYOUT object and functions for registering styles and coverting tables + */ +class LwpTableLayout: public LwpLayout +{ +public: + LwpTableLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpTableLayout(); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_TABLE_LAYOUT;} + LwpObjectID * GetColumnLayoutHead(){return &m_ColumnLayout;}; + void RegisterStyle(); + LwpTable * GetTable(); + LwpCellLayout * GetDefaultCellLayout(){return m_pDefaultCellLayout;}; + LwpSuperTableLayout * GetSuperTableLayout(); + LwpObjectID * SearchCellStoryMap(sal_uInt16 nRow, sal_uInt16 nCol); + LwpCellLayout * GetCellByRowCol(sal_uInt16 nRow, sal_uInt16 nCol); + OUString GetColumnWidth(sal_uInt16 nCol); + void SetWordProCellMap(sal_uInt16 nRow, sal_uInt16 nCol, LwpCellLayout * pCell) + { + if (nRow >= m_nRows || nCol >= m_nCols) + return; + m_WordProCellsMap[nRow * m_nCols + nCol] = pCell; + }; +protected: + void Read(); + void TraverseTable(); + void RegisterColumns(); + void RegisterRows(); + void Parse(); + void PostProcessParagraph(XFCell *pCell, sal_uInt16 nRowID, sal_uInt16 nColID); + + sal_uInt16 m_nRows; + sal_uInt16 m_nCols; + +private: + //CColumnLayoutHead cColumnLayout; + LwpObjectID m_ColumnLayout; + OUString m_FrameStyleName; + LwpCellLayout * m_pDefaultCellLayout; + OUString m_DefaultColumnStyleName; + OUString m_DefaultRowStyleName; + + // wordpro cell map + std::vector<LwpCellLayout *> m_WordProCellsMap; + // column vector + LwpColumnLayout ** m_pColumns; + +//add by ,2005/4/1 +public: + void XFConvert(XFContentContainer* pCont); + void ConvertTable(XFTable* pXFTable,sal_uInt16 nStartRow, + sal_uInt16 nEndRow,sal_uInt8 nStartCol,sal_uInt8 nEndCol); + OUString GetDefaultRowStyleName(){return m_DefaultRowStyleName;} + void SetCellsMap(sal_uInt16 nRow,sal_uInt8 nCol,XFCell* pXFCell); + XFCell* GetCellsMap(sal_uInt16 nRow,sal_uInt8 nCol); + std::map<sal_uInt16,LwpRowLayout*> GetRowsMap(){return m_RowsMap;} + LwpRowLayout* GetRowLayout(sal_uInt16 nRow); +private: + void ConvertDefaultRow(XFTable* pXFTable,sal_uInt8 nStartCol, + sal_uInt8 nEndCol,sal_uInt16 nRowID); + void ConvertColumn(XFTable *pXFTable,sal_uInt8 nStartCol,sal_uInt8 nEndCol); + sal_uInt16 ConvertHeadingRow(XFTable* pXFTable,sal_uInt16 nStartHeadRow,sal_uInt16 nEndHeadRow); + sal_Bool FindSplitColMark(XFTable* pXFTable,sal_uInt8* pCellMark,sal_uInt8& nMaxColSpan); + void SplitRowToCells(XFTable* pTmpTable,XFTable* pXFTable, + sal_uInt8 nFirstColSpann,sal_uInt8* pCellMark); + + std::map<sal_uInt16,LwpRowLayout*> m_RowsMap; + void SplitConflictCells(); + XFTable* m_pXFTable; + std::map<std::pair<sal_uInt16,sal_uInt8>,XFCell*> m_CellsMap; + + void PutCellVals(LwpFoundry* pFoundry, LwpObjectID aTableID); +}; +/** + * @brief + * VO_SUPERTABLELAYOUT object + */ +class LwpSuperTableLayout: public LwpPlacableLayout +{ +public: + LwpSuperTableLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpSuperTableLayout(); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_SUPERTABLE_LAYOUT;} + void RegisterStyle(); + // for table style + // add by , 06/03/2005 + void ApplyPatternFill(XFTableStyle* pTableStyle); + void ApplyBackGround(XFTableStyle* pTableStyle); + // end add + + void ApplyBackColor(XFTableStyle *pTableStyle); + void ApplyShadow(XFTableStyle *pTableStyle); + double GetWidth(); + double GetTableWidth(); + void ApplyWatermark(XFTableStyle *pTableStyle); + void ApplyAlignment(XFTableStyle * pTableStyle); + void XFConvert(XFContentContainer* pCont); + // for frame style + virtual void XFConvertFrame(XFContentContainer* pCont, sal_Int32 nStart = 0, sal_Int32 nEnd = 0, sal_Bool bAll = sal_False); + void ParseFrame(XFFrame* pXFFrame); + void RegisterFrameStyle(); + LwpTableHeadingLayout* GetTableHeadingLayout(); +protected: + void Read(); + LwpTableLayout* GetTableLayout(); + sal_Bool IsSizeRightToContent(); + sal_Bool IsJustifiable(); + LwpFrame* m_pFrame; + +private: +}; +/** + * @brief + * VO_COLUMNLAYOUT object + */ +class LwpColumnLayout : public LwpVirtualLayout +{ +public: + LwpColumnLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpColumnLayout(); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_COLUMN_LAYOUT;} + sal_uInt32 GetColumnID(){return ccolid;}; + double GetWidth(){return LwpTools::ConvertFromUnitsToMetric(cwidth);}; + void RegisterStyle(double dCalculatedWidth); + sal_Bool IsJustifiable(){return (( m_nAttributes2 & STYLE2_JUSTIFIABLE) != 0);}; +protected: + void Read(); + sal_uInt8 ccolid; + sal_Int32 cwidth; + +}; +/** + * @brief + * VO_TABLEHEADINGLAYOUT object + */ +class LwpTableHeadingLayout : public LwpTableLayout +{ +public: + LwpTableHeadingLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpTableHeadingLayout(); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_TABLE_HEADING_LAYOUT;} + void GetStartEndRow(sal_uInt16& nStartRow, sal_uInt16& nEndRow); + LwpRowHeadingLayout * GetFirstRowHeadingLayout(); +protected: + void Read(); + sal_uInt16 cStartRow; + sal_uInt16 cEndRow; +}; +/** + * @brief + * VO_SUPERPARALLELCOLUMNLAYOUT object + */ +class LwpSuperParallelColumnLayout : public LwpSuperTableLayout +{ +public: + LwpSuperParallelColumnLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpSuperParallelColumnLayout(); +protected: + void Read(); +}; + +/** + * @brief + * VO_PCOLLAYOUT object + */ +class LwpParallelColumnsLayout : public LwpTableLayout +{ +public: + LwpParallelColumnsLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpParallelColumnsLayout(); +protected: + void Read(); +}; + +class LwpSuperGlossaryLayout : public LwpSuperTableLayout +{ +public: + LwpSuperGlossaryLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpSuperGlossaryLayout(); +protected: + void Read(); +}; + +#include "lwpcelllayout.hxx" +#include "lwprowlayout.hxx" + +#endif diff --git a/lotuswordpro/source/filter/lwptaboverride.hxx b/lotuswordpro/source/filter/lwptaboverride.hxx new file mode 100644 index 000000000000..9870af099e8d --- /dev/null +++ b/lotuswordpro/source/filter/lwptaboverride.hxx @@ -0,0 +1,128 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Tab override for VO_PARASTYLE. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-12 create and implement. + ************************************************************************/ + +#ifndef _LWPTABOVERRIDE_HXX +#define _LWPTABOVERRIDE_HXX + +#include "lwpoverride.hxx" +#include "lwpobjid.hxx" + +class LwpTabOverride : public LwpOverride +{ +public: + LwpTabOverride() + { + } + + virtual ~LwpTabOverride() + { + } + + virtual void Read(LwpObjectStream *pStrm) + { + if (pStrm->QuickReadBool()) + { + ReadCommon(pStrm); + m_aTabRackID.ReadIndexed(pStrm); + } + + pStrm->SkipExtra(); + } + + inline LwpObjectID* GetTabRackID(); + inline sal_Bool IsTabRackOverridden(); + inline void Override(LwpTabOverride* pOther); + inline void OverrideTabRack(LwpObjectID* pTabRackID); +private: + LwpObjectID m_aTabRackID; + enum + { + TO_TABRACK = 0x01 + }; +}; + +inline LwpObjectID* LwpTabOverride::GetTabRackID() +{ + return &m_aTabRackID; +} + +inline void LwpTabOverride::Override(LwpTabOverride* pOther) +{ + if (m_nApply & TO_TABRACK) + { + if (IsTabRackOverridden()) + //m_aTabRackID = *(pOther->GetTabRackID()); + pOther->OverrideTabRack(GetTabRackID()); + } +} + +inline sal_Bool LwpTabOverride::IsTabRackOverridden() +{ + return (m_nOverride & TO_TABRACK) != 0; +} + +inline void LwpTabOverride::OverrideTabRack(LwpObjectID* pTabRackID) +{ + m_aTabRackID = *pTabRackID; +} +#endif diff --git a/lotuswordpro/source/filter/lwptabrack.cxx b/lotuswordpro/source/filter/lwptabrack.cxx new file mode 100644 index 000000000000..748071945e95 --- /dev/null +++ b/lotuswordpro/source/filter/lwptabrack.cxx @@ -0,0 +1,134 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Tabrack for LwpTabPiece object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-12 create this file. + ************************************************************************/ +#include "lwptabrack.hxx" +#include "lwpobjstrm.hxx" +#include "lwpslvlist.hxx" + +LwpTab::LwpTab() +{ + m_nX = 0; + m_nAlignChar = 0; //be careful,not quite sure it's 8-bit,perhaps 16-bit. + m_nType = 0; + m_nLeader = 0; + m_nRelativeType = 0; +} + +void LwpTab::Read(LwpObjectStream *pStrm) +{ + pStrm->QuickRead(&m_nX, sizeof(m_nX)); + pStrm->QuickRead(&m_nType, sizeof(m_nType)); + pStrm->QuickRead(&m_nLeader, sizeof(m_nLeader)); + pStrm->QuickRead(&m_nRelativeType, sizeof(m_nRelativeType)); + pStrm->QuickRead(&m_nAlignChar, sizeof(m_nAlignChar)); +} + + +LwpTabRack::LwpTabRack(LwpObjectHeader objHdr, LwpSvStream* pStrm):LwpObject(objHdr,pStrm) +{ + m_nNumTabs = 0; +} + +void LwpTabRack::Read() +{ +// LwpObjectID m_NextID; + m_NextID.ReadIndexed(m_pObjStrm); + + m_pObjStrm->QuickRead(&m_nNumTabs, sizeof(m_nNumTabs)); + for( int i=0; i<m_nNumTabs; i++ ) + { + m_aTabs[i].Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); + } + m_pObjStrm->SkipExtra(); +} + +LwpTab* LwpTabRack::Lookup(sal_uInt16 nIndex) +{ + /* Is the tab in this tabrack? */ + if(nIndex<m_nNumTabs) + { + return &m_aTabs[nIndex]; + } + //return NULL; + /* It's not in this tabrack, so get it out of our next. */ + if (!GetNext()) + return NULL; /* ouch */ + + return GetNext()->Lookup(nIndex - m_nNumTabs); +} + +LwpTabRack* LwpTabRack::GetNext() +{ + LwpTabRack* pTabRack = static_cast<LwpTabRack*>(m_NextID.obj()); + return pTabRack; +} + +sal_uInt16 LwpTabRack::GetNumTabs() +{ + sal_uInt16 nNum=0; + if(GetNext()) + { + nNum = GetNext()->GetNumTabs(); + } + return m_nNumTabs+nNum; +} diff --git a/lotuswordpro/source/filter/lwptabrack.hxx b/lotuswordpro/source/filter/lwptabrack.hxx new file mode 100644 index 000000000000..76bcd71e186d --- /dev/null +++ b/lotuswordpro/source/filter/lwptabrack.hxx @@ -0,0 +1,162 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Tabrack for LwpTabPiece object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-12 create this file. + ************************************************************************/ + +#ifndef _LWPTABRACK_HXX +#define _LWPTABRACK_HXX + +#include "lwpobj.hxx" + +class LwpObjectStream; +class LwpTab; +class LwpTabRack; + +class LwpTab +{ +public: + LwpTab(void); + + enum TabType + { + TT_LEFT = 1, + TT_CENTER, + TT_RIGHT, + TT_NUMERIC + }; + + enum LeaderType + { + TL_NONE = 0, + TL_HYPHEN, + TL_DOT, + TL_LINE + }; + + enum RelativeType + { + TR_LEFT = 1, + TR_RIGHT, + TR_CENTER + }; +public: + void Read(LwpObjectStream *pStrm); + // 2005/01/28 + inline sal_uInt32 GetPosition(); + inline TabType GetTabType(); + inline LeaderType GetLeaderType(); + inline RelativeType GetRelativeType(); + inline sal_uInt16 GetAlignChar(); + +protected: + sal_uInt32 m_nX; + sal_uInt8 m_nType; + sal_uInt8 m_nLeader; + sal_uInt8 m_nRelativeType; + sal_uInt16 m_nAlignChar; //be careful +}; + +// 2005/01/28 +inline sal_uInt32 LwpTab::GetPosition() +{ + return m_nX; +} + +inline LwpTab::TabType LwpTab::GetTabType() +{ + return (LwpTab::TabType)m_nType; +} + +inline LwpTab::LeaderType LwpTab::GetLeaderType() +{ + return (LwpTab::LeaderType)m_nLeader; +} +inline LwpTab::RelativeType LwpTab::GetRelativeType() +{ + return (LwpTab::RelativeType)m_nRelativeType; +} + +inline sal_uInt16 LwpTab::GetAlignChar() +{ + return m_nAlignChar; +} + +class LwpTabRack : public LwpObject +{ +public: + LwpTabRack(LwpObjectHeader objHdr, LwpSvStream* pStrm); + virtual ~LwpTabRack(){} +public: + void Read(); + // 2005/01/28 + sal_uInt16 GetNumTabs(); + LwpTab* Lookup(sal_uInt16 nIndex); + LwpTabRack* GetNext(); +private: + enum{ + MaxTabs = 15 + }; + sal_uInt16 m_nNumTabs; + LwpTab m_aTabs[MaxTabs]; + LwpObjectID m_NextID; +}; + +#endif diff --git a/lotuswordpro/source/filter/lwptblcell.cxx b/lotuswordpro/source/filter/lwptblcell.cxx new file mode 100644 index 000000000000..7dc62a384466 --- /dev/null +++ b/lotuswordpro/source/filter/lwptblcell.cxx @@ -0,0 +1,252 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - table cell numerics format + */ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ + +#include "lwpoverride.hxx" +#include "lwpobjid.hxx" +#include "lwptblcell.hxx" +#include "lwppara.hxx" + +////////////////////////////////////////////////////////////////// + LwpCellList::LwpCellList(LwpObjectHeader &objHdr, LwpSvStream* pStrm):LwpDLVList(objHdr, pStrm) +{} + +LwpCellList::~LwpCellList() +{} + +void LwpCellList::Read() +{ + // CDLFVList read construction + LwpDLVList::Read(); + + LwpDLVListHeadTail cChild; + cChild.Read(m_pObjStrm); + + cParent.ReadIndexed(m_pObjStrm); + + if (LwpFileHeader::m_nFileRevision < 0x0006) + m_pObjStrm->SkipExtra(); + + cValue.ReadIndexed(m_pObjStrm); + + LwpObjectID cDependent; + cDependent.ReadIndexed(m_pObjStrm); + + cColumn = (sal_uInt8) m_pObjStrm->QuickReaduInt16(); // written as a sal_uInt16 +// sal_uInt8 cCellFlags = (sal_uInt8) m_pObjStrm->QuickReaduInt16(); // written as a sal_uInt16 + m_pObjStrm->SeekRel(2);//CellFlags + m_pObjStrm->SkipExtra(); + +} + void LwpCellList::Parse(IXFStream* pOutputStream) +{ +} +void LwpCellList::Convert(XFCell * pCell, LwpTableLayout* pCellsMap) +{ + LwpObjectID aValueID = GetValueID(); + LwpNumericValue* pValue = (LwpNumericValue*)aValueID.obj(); + if (pValue) + { + pCell->SetValue( pValue->GetValue() ); + } +} + +////////////////////////////////////////////////////////////////// + LwpNumericValue::LwpNumericValue(LwpObjectHeader &objHdr, LwpSvStream* pStrm):LwpObject(objHdr, pStrm) +{} + +LwpNumericValue::~LwpNumericValue() +{} + +void LwpNumericValue::Read() +{ + m_pObjStrm->QuickRead(&cNumber, sizeof(cNumber)); + m_pObjStrm->SkipExtra(); + +} + void LwpNumericValue::Parse(IXFStream* pOutputStream) +{ +} +////////////////////////////////////////////////////////////////// + LwpRowList::LwpRowList(LwpObjectHeader &objHdr, LwpSvStream* pStrm):LwpDLVList(objHdr, pStrm) +{} + +LwpRowList::~LwpRowList() +{} + +void LwpRowList::Read() +{ + // CDLFVList read construction + LwpDLVList::Read(); + + cChild.Read(m_pObjStrm); + cParent.ReadIndexed(m_pObjStrm); + + if (LwpFileHeader::m_nFileRevision < 0x0006) + m_pObjStrm->SkipExtra(); + + cRowID = m_pObjStrm->QuickReaduInt16(); + + m_pObjStrm->SkipExtra(); +} + void LwpRowList::Parse(IXFStream* pOutputStream) +{ +} + +////////////////////////////////////////////////////////////////// +LwpTableRange::LwpTableRange(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + :LwpDLVList(objHdr, pStrm) +{} + +LwpTableRange::~LwpTableRange() +{} + +void LwpTableRange::Read() +{ + LwpDLVList::Read(); + + cqTable.ReadIndexed(m_pObjStrm); + cpCellRange.ReadIndexed(m_pObjStrm); + m_pObjStrm->SkipExtra(); +} + void LwpTableRange::Parse(IXFStream* pOutputStream) +{ +} +////////////////////////////////////////////////////////////////// + LwpCellRange::LwpCellRange(LwpObjectHeader &objHdr, LwpSvStream* pStrm):LwpObject(objHdr, pStrm) +{} + +LwpCellRange::~LwpCellRange() +{} + +void LwpCellRange::Read() +{ + cpFolder.ReadIndexed(m_pObjStrm); + m_pObjStrm->SkipExtra(); +} + void LwpCellRange::Parse(IXFStream* pOutputStream) +{ +} +////////////////////////////////////////////////////////////////// + + LwpFolder::LwpFolder(LwpObjectHeader &objHdr, LwpSvStream* pStrm):LwpDLVList(objHdr, pStrm) +{} + +LwpFolder::~LwpFolder() +{} + +void LwpFolder::Read() +{ + // CDLFVList read construction + LwpDLVList::Read(); + + cChild.Read(m_pObjStrm); + cParent.ReadIndexed(m_pObjStrm); + + if (LwpFileHeader::m_nFileRevision < 0x0006) + m_pObjStrm->SkipExtra(); + + cqTable.ReadIndexed(m_pObjStrm); + m_pObjStrm->SkipExtra(); +} + void LwpFolder::Parse(IXFStream* pOutputStream) +{ +} +////////////////////////////////////////////////////////////////// + + LwpDependent::LwpDependent(LwpObjectHeader &objHdr, LwpSvStream* pStrm):LwpDLVList(objHdr, pStrm) +{} + +LwpDependent::~LwpDependent() +{} + +void LwpDependent::Read() +{ + LwpDLVList::Read(); + + cFormulaInfo.ReadIndexed(m_pObjStrm); + cReferenceOffset = m_pObjStrm->QuickReaduInt16(); + cFlags = (sal_uInt8)m_pObjStrm->QuickReaduInt16(); // Written as lushort. + + m_pObjStrm->SkipExtra(); +} + void LwpDependent::Parse(IXFStream* pOutputStream) +{ +} +////////////////////////////////////////////////////////////////// + +void LwpRowSpecifier::QuickRead(LwpObjectStream *pStrm) +{ + cRow = pStrm->QuickReaduInt16(); + cQualifier.QuickRead(pStrm); +} +void LwpColumnSpecifier::QuickRead(LwpObjectStream *pStrm) +{ + cColumn = (sal_uInt8)pStrm->QuickReaduInt16(); + cQualifier.QuickRead(pStrm); +} + +void LwpRowColumnQualifier::QuickRead(LwpObjectStream *pStrm) +{ + // written as lushort for future flags + cFlags = (sal_uInt8)pStrm->QuickReaduInt16(); +} diff --git a/lotuswordpro/source/filter/lwptblcell.hxx b/lotuswordpro/source/filter/lwptblcell.hxx new file mode 100644 index 000000000000..79d64a4ea09f --- /dev/null +++ b/lotuswordpro/source/filter/lwptblcell.hxx @@ -0,0 +1,494 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - table object + */ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ +#ifndef _LWPLAYOUTNUMERICSOVERRIDE_HXX_ +#define _LWPLAYOUTNUMERICSOVERRIDE_HXX_ + +#include "lwpobj.hxx" +#include "lwpatomholder.hxx" +#include "lwpstory.hxx" + +#include "xfilter/xfcell.hxx" + +// temporily added for compile +class LwpObject; + +class LwpContent; +class LwpTableLayout; +/** + * @brief + * VO_CELLLIST object + */ +class LwpCellList : public LwpDLVList +{ +public: + LwpCellList(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpCellList(); + + virtual void Parse(IXFStream* pOutputStream); + LwpObjectID GetNextID(){return *GetNext();} + sal_uInt8 GetColumnID(){return cColumn;} + virtual sal_Bool IsFormula(){return sal_False;} + LwpObjectID GetValueID(){return cValue;} + + virtual void Convert(XFCell * pCell, LwpTableLayout* pCellsMap=NULL); +protected: + sal_uInt8 cColumn; + LwpObjectID cParent; + + void Read(); + LwpObjectID cValue; +}; +/** + * @brief + * VO_ROWLIST object + */ +class LwpRowList : public LwpDLVList +{ +public: + LwpRowList(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpRowList(); + + void Parse(IXFStream* pOutputStream); + LwpObjectID GetChildHeadID(){return *cChild.GetHead();} + LwpObjectID GetNextID(){return *GetNext();} + sal_uInt16 GetRowID(){return cRowID;} +protected: + LwpDLVListHeadTail cChild; + LwpObjectID cParent; + sal_uInt16 cRowID; + void Read(); +}; +/** + * @brief + * VO_NUMERICVALUE object + */ +class LwpNumericValue : public LwpObject +{ +public: + LwpNumericValue(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpNumericValue(); + + double GetValue(){return cNumber;} + void Parse(IXFStream* pOutputStream); +protected: + double cNumber; + //LwpContent m_TheContent; + void Read(); +}; + +//////////////////////////////////////////////////////////////////////// +/** + * @brief + * VO_TABLERANGE object + */ +class LwpTableRange: public LwpDLVList +{ +public: + LwpTableRange(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpTableRange(); + + void Parse(IXFStream* pOutputStream); + LwpObjectID GetCellRangeID(){return cpCellRange;} + LwpObjectID GetTableID(){ return cqTable;} + LwpTableRange* GetNext() { return (LwpTableRange*)(LwpDLVList::GetNext()->obj());} +protected: + LwpObjectID cqTable; + LwpObjectID cpCellRange; + void Read(); +}; +/** + * @brief + * VO_CELLRANGE object + */ +class LwpCellRange: public LwpObject +{ +public: + LwpCellRange(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpCellRange(); + + void Parse(IXFStream* pOutputStream); + LwpObjectID GetFolderID(){return cpFolder;} +protected: + LwpObjectID cpFolder; + void Read(); +}; +/** + * @brief + * VO_FOLDER object + */ +class LwpFolder: public LwpDLVList +{ +public: + LwpFolder(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpFolder(); + + void Parse(IXFStream* pOutputStream); + LwpObjectID GetChildHeadID(){ return *cChild.GetHead();} +protected: + LwpDLVListHeadTail cChild; + LwpObjectID cParent; + LwpObjectID cqTable; + void Read(); +}; +/** + * @brief + * VO_DEPENDENT object + */ +class LwpDependent: public LwpDLVList +{ +public: + LwpDependent(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpDependent(); + + void Parse(IXFStream* pOutputStream); +protected: + void Read(); + LwpObjectID cFormulaInfo; + sal_uInt16 cReferenceOffset; // Used to fix dependent formula when we're + // dropped, sorted. + // Flags: + enum + { + START_CELL = 0x01, + END_CELL = 0x02, + REGISTERED = 0x04 + }; + sal_uInt8 cFlags; // Used to fix dependent formula when we're + // dropped, sorted. +}; + + +/////////////////////////////////////////////////////////////// +/** + * @brief + * row or column id + */ +class LwpRowColumnQualifier +{ +public: + LwpRowColumnQualifier(void); + ~LwpRowColumnQualifier(){} + + inline void SetAbsolute(void); + inline void ClearAbsolute(void); + sal_Bool IsAbsolute(void); + + inline void SetAfter(void); + inline void ClearAfter(void); + sal_Bool IsAfter(void); + + void SetBad(sal_Bool Bad); + sal_Bool IsBad(void); + + void QuickRead(LwpObjectStream *pStrm); + +private: + enum // cFlags bit definitions + { + REF_ABSOLUTE = 0x01, + REF_AFTER = 0x02, + REF_BAD = 0x04 + }; + sal_uInt8 cFlags; +}; + +inline void +LwpRowColumnQualifier::SetAbsolute(void) +{ + cFlags |= REF_ABSOLUTE; +} + +inline void +LwpRowColumnQualifier::ClearAbsolute(void) +{ + cFlags &= ~REF_ABSOLUTE; +} + +inline void +LwpRowColumnQualifier::SetAfter(void) +{ + cFlags |= REF_AFTER; +} + +inline void +LwpRowColumnQualifier::ClearAfter(void) +{ + cFlags &= ~REF_AFTER; +} + +inline +LwpRowColumnQualifier::LwpRowColumnQualifier() +{ + cFlags = 0; +} + +inline sal_Bool +LwpRowColumnQualifier::IsAfter() +{ + return cFlags & REF_AFTER ? sal_True : sal_False; +} + +inline sal_Bool +LwpRowColumnQualifier::IsBad() +{ + return cFlags & REF_BAD ? sal_True : sal_False; +} + +inline sal_Bool +LwpRowColumnQualifier::IsAbsolute() +{ + return cFlags & REF_ABSOLUTE ? sal_True : sal_False; +} +/** + * @brief + * row id + */ +class LwpRowSpecifier +{ +public: + LwpRowSpecifier(void){} + ~LwpRowSpecifier(){} + + void QuickRead(LwpObjectStream *pStrm); + String ToString(USHORT nFormulaRow); + + USHORT RowID(USHORT FormulaRow); + USHORT &Row(void); + + void SetAbsolute(void); + void ClearAbsolute(void); + sal_Bool IsAbsolute(void); + + void SetAfter(void); + void ClearAfter(void); + sal_Bool IsAfter(void); + + void SetBad(sal_Bool Bad); + sal_Bool IsBad(void); + void SetRowDelta(USHORT ReferenceRowID, USHORT FormulaRowID); + +private: + sal_uInt16 cRow; + LwpRowColumnQualifier cQualifier; +}; + +inline USHORT +LwpRowSpecifier::RowID(USHORT FormulaRow) +{ + if (cQualifier.IsBad()) + { + return 0xffff; + } + if (cQualifier.IsAbsolute()) + return cRow; + + if (cQualifier.IsAfter()) + return FormulaRow + cRow; + return FormulaRow - cRow; +} + +inline USHORT & +LwpRowSpecifier::Row() +{ + return cRow; +} + +inline void +LwpRowSpecifier::SetAbsolute(void) +{ + cQualifier.SetAbsolute(); +} + +inline void +LwpRowSpecifier::ClearAbsolute(void) +{ + cQualifier.ClearAbsolute(); +} + +inline sal_Bool +LwpRowSpecifier::IsAbsolute() +{ + return cQualifier.IsAbsolute(); +} + +inline void +LwpRowSpecifier::SetAfter(void) +{ + cQualifier.SetAfter(); +} + +inline void +LwpRowSpecifier::ClearAfter(void) +{ + cQualifier.ClearAfter(); +} + +inline sal_Bool +LwpRowSpecifier::IsAfter() +{ + return cQualifier.IsAfter(); +} + +inline void +LwpRowSpecifier::SetBad(sal_Bool Bad) +{ + cQualifier.SetBad(Bad); +} + +inline sal_Bool +LwpRowSpecifier::IsBad() +{ + return cQualifier.IsBad(); +} +/** + * @brief + * column id + */ +class LwpColumnSpecifier +{ +public: + LwpColumnSpecifier(void){}; + ~LwpColumnSpecifier(){}; + + void QuickRead(LwpObjectStream *pStrm); + sal_uInt8 Column(){return cColumn;} + String ToString(sal_uInt8 nFormulaCol); + + sal_uInt8 ColumnID(sal_uInt8 FormulaColumn); + void SetAbsolute(void); + void ClearAbsolute(void); + sal_Bool IsAbsolute(void); + void SetAfter(void); + void ClearAfter(void); + sal_Bool IsAfter(void); + void SetBad(sal_Bool Bad); + sal_Bool IsBad(void); + void SetColumnDelta(sal_uInt8 ReferenceColumnID, sal_uInt8 FormulaColumnID); + +private: + sal_uInt8 cColumn; + LwpRowColumnQualifier cQualifier; +}; + +inline sal_uInt8 +LwpColumnSpecifier::ColumnID(sal_uInt8 FormulaColumn) +{ + if (cQualifier.IsBad()) + { + return 0xff; + } + if (cQualifier.IsAbsolute()) + return cColumn; + if (cQualifier.IsAfter()) + return FormulaColumn + cColumn; + return FormulaColumn - cColumn; +} + +inline void +LwpColumnSpecifier::SetAbsolute(void) +{ + cQualifier.SetAbsolute(); +} + +inline void +LwpColumnSpecifier::ClearAbsolute(void) +{ + cQualifier.ClearAbsolute(); +} + +inline sal_Bool +LwpColumnSpecifier::IsAbsolute() +{ + return cQualifier.IsAbsolute(); +} + +inline void +LwpColumnSpecifier::SetAfter(void) +{ + cQualifier.SetAfter(); +} + +inline void +LwpColumnSpecifier::ClearAfter(void) +{ + cQualifier.ClearAfter(); +} + +inline sal_Bool +LwpColumnSpecifier::IsAfter() +{ + return cQualifier.IsAfter(); +} + +inline void +LwpColumnSpecifier::SetBad(sal_Bool Bad) +{ + cQualifier.SetBad(Bad); +} + +inline sal_Bool +LwpColumnSpecifier::IsBad() +{ + return cQualifier.IsBad(); +} +#endif diff --git a/lotuswordpro/source/filter/lwptblformula.cxx b/lotuswordpro/source/filter/lwptblformula.cxx new file mode 100644 index 000000000000..3caef2a0d79d --- /dev/null +++ b/lotuswordpro/source/filter/lwptblformula.cxx @@ -0,0 +1,803 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - table cell numerics format + */ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ + +#include "lwpoverride.hxx" +#include "lwptblcell.hxx" +#include "lwppara.hxx" +#include "lwptblformula.hxx" + +#include "lwptablelayout.hxx" + +////////////////////////////////////////////////////////////////// + LwpFormulaInfo::LwpFormulaInfo(LwpObjectHeader &objHdr, LwpSvStream* pStrm) +:LwpCellList(objHdr, pStrm),m_nFormulaRow(0),m_bSupported(sal_True) +{} + +LwpFormulaInfo::~LwpFormulaInfo() +{ + try{ + while(m_aStack.size()>0) + { + LwpFormulaArg* pArg=m_aStack.back(); + m_aStack.pop_back(); + delete pArg; pArg=NULL; + } + }catch (...) + { + assert(false); + } +} + +/** +* +* @date 03/26/2005 +* @param +* @param +* @return sal_Bool. +*/ +sal_Bool LwpFormulaInfo::ReadConst() +{ + double Constant; + m_pObjStrm->QuickRead(&Constant, sizeof(Constant)); + + m_aStack.push_back( new LwpFormulaConst(Constant) ); + + return sal_True; +} +/** +* Need more effort for unicode. +* @date 03/26/2005 +* @param +* @param +* @return sal_Bool. +*/ +sal_Bool LwpFormulaInfo::ReadText() +{ + USHORT nDiskSize,nStrLen; + nDiskSize = m_pObjStrm->QuickReadInt16(); + nStrLen = m_pObjStrm->QuickReadInt16(); + + auto_ptr<char> pBuf(new char[nStrLen+1]); + m_pObjStrm->QuickRead( pBuf.get(), nStrLen ); + *(pBuf.get()+nStrLen)='\0'; + String aText; + aText += String::CreateFromAscii("\""); + aText.Append(String(pBuf.get(),nStrLen,gsl_getSystemTextEncoding())); + aText += String::CreateFromAscii("\""); + + m_aStack.push_back(new LwpFormulaText(aText)); + return sal_True; +} +/** +* +* @date 03/26/2005 +* @param +* @param +* @return sal_Bool. +*/ +sal_Bool LwpFormulaInfo::ReadCellID() +{ + LwpRowSpecifier RowSpecifier; + LwpColumnSpecifier ColumnSpecifier; + sal_Bool readSucceeded = true; + + RowSpecifier.QuickRead(m_pObjStrm); + ColumnSpecifier.QuickRead(m_pObjStrm); + + m_aStack.push_back( new LwpFormulaCellAddr(ColumnSpecifier.ColumnID(cColumn), + RowSpecifier.RowID(m_nFormulaRow)) ); + return readSucceeded; +} +/** +* +* @date 03/26/2005 +* @param +* @param +* @return sal_Bool. +*/ +sal_Bool LwpFormulaInfo::ReadCellRange() +{ + sal_Bool readSucceeded = sal_True; + if (!ReadCellID( )) // start + readSucceeded = false; + LwpFormulaCellAddr* pStartCellAddr = (LwpFormulaCellAddr*)m_aStack.back(); + m_aStack.pop_back(); + + if (!ReadCellID()) // end + readSucceeded = false; + LwpFormulaCellAddr* pEndCellAddr = (LwpFormulaCellAddr*)m_aStack.back(); + m_aStack.pop_back(); + + m_aStack.push_back( new LwpFormulaCellRangeAddr(pStartCellAddr->GetCol(), + pStartCellAddr->GetRow(), + pEndCellAddr->GetCol(), + pEndCellAddr->GetRow()) ); + delete pStartCellAddr; + delete pEndCellAddr; + + return readSucceeded; +} + +/** +* Read expression from wordpro file +* @date 03/26/2005 +* @param +* @param +* @return sal_Bool. +*/ +sal_Bool LwpFormulaInfo::ReadExpression() +{ + sal_uInt16 TokenType, DiskLength; + sal_Bool readSucceeded = sal_True; + + /* Read the compiled expression length */ +// Len = m_pObjStrm->QuickReaduInt16(); + m_pObjStrm->SeekRel(2); + + while ((TokenType = m_pObjStrm->QuickReaduInt16()) != TK_END) + { + // Get the disk length of this token + DiskLength = m_pObjStrm->QuickReaduInt16(); + + switch (TokenType) + { + case TK_CONSTANT: + { + ReadConst(); + break; + } + + case TK_CELLID: + if (!ReadCellID()) + readSucceeded = FALSE; + break; + + case TK_CELLRANGE: + readSucceeded = ReadCellRange(); + break; + + case TK_SUM: + case TK_IF: + case TK_COUNT: + case TK_MINIMUM: + case TK_MAXIMUM: + case TK_AVERAGE: + { + LwpFormulaFunc* pFunc = new LwpFormulaFunc(TokenType); + if (!ReadArguments(*pFunc)) + readSucceeded = FALSE; + m_aStack.push_back(pFunc); + } + break; + + case TK_ADD://7 + case TK_SUBTRACT: + case TK_MULTIPLY: + case TK_DIVIDE: + case TK_LESS: + case TK_LESS_OR_EQUAL: + case TK_GREATER: + case TK_GREATER_OR_EQUAL: + case TK_EQUAL: + case TK_NOT_EQUAL: + case TK_AND: + case TK_OR: + case TK_NOT: + m_pObjStrm->SeekRel(DiskLength); // extensible for future + + {//binary operator + LwpFormulaOp* pOp = new LwpFormulaOp(TokenType); + pOp->AddArg(m_aStack.back()); m_aStack.pop_back(); + pOp->AddArg(m_aStack.back()); m_aStack.pop_back(); + m_aStack.push_back(pOp); + } + break; + case TK_UNARY_MINUS: + { + LwpFormulaUnaryOp* pOp = new LwpFormulaUnaryOp(TokenType); + pOp->AddArg(m_aStack.back()); m_aStack.pop_back(); + m_aStack.push_back(pOp); + } + break; + default: + // We don't know what to do with this token, so eat it. + m_pObjStrm->SeekRel(DiskLength); + readSucceeded = FALSE; + break; + } + MarkUnsupported(TokenType); + } + return readSucceeded; +} + +/** +* +* @date 03/26/2005 +* @param +* @param +* @return +*/ +void LwpFormulaInfo::MarkUnsupported(sal_uInt16 TokenType) +{ + switch(TokenType) + { + case TK_IF: + case TK_COUNT: + case TK_NOT: + { + m_bSupported = sal_False;//Not supported formulas + } + break; + default: + break; + } +} +/** +* Read arguments of functions from wordpro file +* @date 03/26/2005 +* @param LwpFormulaFunc& aFunc, functions object +* @return sal_Bool. +*/ +sal_Bool LwpFormulaInfo::ReadArguments(LwpFormulaFunc& aFunc) +{ + sal_uInt16 NumberOfArguments = m_pObjStrm->QuickReaduInt16(); + sal_uInt16 ArgumentDiskLength, Count; + sal_uInt8 ArgumentType; + sal_Bool bArgument = sal_False; + sal_Bool readSucceeded = sal_True; + + for (Count = 0; Count < NumberOfArguments; Count++) + { + ArgumentType = (sal_uInt8) m_pObjStrm->QuickReaduInt16(); // written as lushort + ArgumentDiskLength = m_pObjStrm->QuickReaduInt16(); + bArgument = sal_True; + + switch(ArgumentType) + { + case TK_CELLID: + ReadCellID(); + break; + + case TK_CELLRANGE: + ReadCellRange(); + break; + + case TK_CONSTANT: + ReadConst(); + break; + + case TK_TEXT: + ReadText(); + break; + + case TK_EXPRESSION: + ReadExpression(); + break; + + default: + bArgument = sal_False; + m_pObjStrm->SeekRel(ArgumentDiskLength); + readSucceeded = sal_False; + break; + } + + if (bArgument) + { + aFunc.AddArg( m_aStack.back() ); + m_aStack.pop_back(); + } + } + return readSucceeded; +} + +/** +* +* @date 03/26/2005 +* @param +* @param +* @return +*/ +void LwpFormulaInfo::Read() +{ + LwpCellList::Read(); + { + LwpRowList* pRowList =(LwpRowList*)cParent.obj(); + if (pRowList) + { + m_nFormulaRow = pRowList->GetRowID(); + } + else + { + assert(false); + } + } +// sal_uInt8 cFlags = (sal_uInt8) m_pObjStrm->QuickReaduInt16(); // written as a sal_uInt16 + m_pObjStrm->SeekRel(2);//flags, size in file: sal_uInt16 + + LwpNotifyListPersistent cNotifyList; + cNotifyList.Read(m_pObjStrm); + + ReadExpression(); + + m_pObjStrm->SkipExtra(); +} + +/** +* Make the formula string. +* @date 03/26/2005 +* @param +* @param +* @return sal_Bool. +*/ +String LwpFormulaInfo::Convert(LwpTableLayout* pCellsMap) +{ + String aFormula; + if (m_bSupported) + { + if(1==m_aStack.size()) + { + LwpFormulaArg* pFormula = m_aStack.back(); + aFormula = pFormula->ToString(pCellsMap); + } + else + { + assert(false); + } + } + return aFormula; +} + +/** +* Fill the XFCell content +* @date 03/26/2005 +* @param +* @param +* @return sal_Bool. +*/ +void LwpFormulaInfo::Convert(XFCell * pCell,LwpTableLayout* pCellsMap) +{ + String aFormula; + aFormula = Convert(pCellsMap); + if (aFormula.Len()) + { + pCell->SetFormula(aFormula); + } + LwpCellList::Convert(pCell); +} + +////////////////////////////////////////////////////////////////// + +/** +* +* @date 03/26/2005 +* @param +* @param +* @return sal_Bool. +*/ +LwpFormulaConst::LwpFormulaConst(double dVal) +{ + m_dVal = dVal; +} + +/** +* +* @date 03/26/2005 +* @param +* @param +* @return sal_Bool. +*/ +String LwpFormulaConst::ToString(LwpTableLayout* pCellsMap) +{ + return String::CreateFromDouble(m_dVal); +} + +/** +* +* @date 03/26/2005 +* @param +* @param +* @return +*/ +LwpFormulaText::LwpFormulaText( String aText) +{ + m_aText = aText; +} + +/** +* +* @date 03/26/2005 +* @param +* @param +* @return +*/ +LwpFormulaCellAddr::LwpFormulaCellAddr(sal_Int16 aCol, sal_Int16 aRow) +{ + m_aCol = aCol; + m_aRow = aRow; +} + +/** +* +* @date 03/26/2005 +* @param +* @param +* @return String +*/ +String LwpFormulaCellAddr::ToString(LwpTableLayout* pCellsMap) +{ +// String aCellAddr; +// aCellAddr.AppendAscii("<");//< +// aCellAddr+=m_aCol; +// aCellAddr+=m_aRow; +// aCellAddr.AppendAscii(">");//> + + String aCellAddr; + aCellAddr.AppendAscii("<");//< + + aCellAddr += LwpFormulaTools::GetCellAddr(m_aRow,m_aCol,pCellsMap); + + aCellAddr.AppendAscii(">");//> + return aCellAddr; +} + +/** +* +* @date 03/26/2005 +* @param +* @param +* @return +*/ +LwpFormulaCellRangeAddr::LwpFormulaCellRangeAddr(sal_Int16 aStartCol, + sal_Int16 aStartRow, + sal_Int16 aEndCol, + sal_Int16 aEndRow) +{ + m_aStartCol = aStartCol; + m_aStartRow = aStartRow; + m_aEndCol = aEndCol; + m_aEndRow = aEndRow; +} + +/** +* Convert the cell range into a string +* @date 03/26/2005 +* @param +* @param +* @return String. +*/ +String LwpFormulaCellRangeAddr::ToString(LwpTableLayout* pCellsMap) +{ +// String aCellAddr; +// aCellAddr.AppendAscii("<");//< +// aCellAddr+=m_aStartCol; +// aCellAddr+=m_aStartRow; +// aCellAddr.AppendAscii(":"); +// aCellAddr+=m_aEndCol; +// aCellAddr+=m_aEndRow; +// aCellAddr.AppendAscii(">");//> + + String aCellAddr; + aCellAddr.AppendAscii("<");//< + + aCellAddr += LwpFormulaTools::GetCellAddr(m_aStartRow,m_aStartCol,pCellsMap); + aCellAddr.AppendAscii(":"); + aCellAddr += LwpFormulaTools::GetCellAddr(m_aEndRow,m_aEndCol,pCellsMap); + + aCellAddr.AppendAscii(">");//> + + return aCellAddr; +} + +/** +* +* @date 03/26/2005 +* @param +* @param +* @return +*/ +LwpFormulaFunc::LwpFormulaFunc(sal_uInt16 nTokenType) +{ + m_nTokenType = nTokenType; +} + +/** +* +* @date 03/26/2005 +* @param +* @param +* @return +*/ +LwpFormulaFunc::~LwpFormulaFunc() +{ + try + { + while(m_aArgs.size()>0) + { + LwpFormulaArg* pArg = m_aArgs.back(); + m_aArgs.pop_back(); + delete pArg;pArg=NULL; + } + }catch (...) { + assert(false); + } + +} +/** +* +* @date 03/26/2005 +* @param +* @param +* @return +*/ +void LwpFormulaFunc::AddArg(LwpFormulaArg* pArg) +{ + m_aArgs.push_back(pArg); +} +/** +* Convert the functions to a string, which is a argument of other formula +* @date 03/26/2005 +* @param +* @param +* @return String. +*/ +String LwpFormulaFunc::ToArgString(LwpTableLayout* pCellsMap) +{ + String aFormula; + aFormula.AppendAscii("("); + aFormula+=ToString(pCellsMap); + aFormula.AppendAscii(")"); + return aFormula; +} +/** +* Convert the function to a formula string. +* @date 03/26/2005 +* @param +* @param +* @return sal_Bool. +*/ +String LwpFormulaFunc::ToString(LwpTableLayout* pCellsMap) +{ + String aFormula; + + String aFuncName = LwpFormulaTools::GetName(m_nTokenType); + aFormula += aFuncName; + aFormula.AppendAscii(" ");//Append a blank space + + //Append args + vector<LwpFormulaArg*>::iterator aItr; + for (aItr=m_aArgs.begin();aItr!=m_aArgs.end();aItr++) + { + aFormula.Append( (*aItr)->ToArgString(pCellsMap) ); + aFormula.AppendAscii("|");//separator + } + + //erase the last "|" + if (m_aArgs.size()>0) + { + aFormula.Erase(aFormula.Len()-1,1); + } + else + { + assert(false); + } + + return aFormula; +} + +/** +* Convert the formula in operators to a string : e.g. 1+2+3 +* @date 03/26/2005 +* @param +* @param +* @return sal_Bool. +*/ +String LwpFormulaOp::ToString(LwpTableLayout* pCellsMap) +{ + String aFormula; + if (2==m_aArgs.size()) + { + vector<LwpFormulaArg*>::iterator aItr = m_aArgs.end(); + aItr--; + aFormula.Append( (*aItr)->ToArgString(pCellsMap) ); + + aFormula.AppendAscii(" "); + + String aFuncName = LwpFormulaTools::GetName(m_nTokenType); + aFormula.Append(aFuncName); + + aFormula.AppendAscii(" "); + + aItr--; + aFormula.Append( (*aItr)->ToArgString(pCellsMap) ); + } + else + { + assert(false); + } + return aFormula; +} + +/** +* convert the formula in unary operators into string : e.g. -2 +* @date 03/26/2005 +* @param +* @param +* @return sal_Bool. +*/ +String LwpFormulaUnaryOp::ToString(LwpTableLayout* pCellsMap) +{ + String aFormula; + if (1==m_aArgs.size()) + { + String aFuncName = LwpFormulaTools::GetName(m_nTokenType); + aFormula.Append(aFuncName); + + vector<LwpFormulaArg*>::iterator aItr = m_aArgs.begin(); + aFormula.Append( (*aItr)->ToArgString(pCellsMap) ); + } + else + { + assert(false); + } + return aFormula; +} +/** +* Get token name +* @date 03/26/2005 +* @param +* @param +* @return String. +*/ +String LwpFormulaTools::GetName(sal_uInt16 nTokenType) +{ + String aName; + switch(nTokenType) + { + case TK_SUM: + aName = String::CreateFromAscii("SUM"); + break; + case TK_IF: + aName = String::CreateFromAscii("IF");//Not supported by SODC + break; + case TK_COUNT: + aName = String::CreateFromAscii("COUNT");//Not supported by SODC + break; + case TK_MINIMUM: + aName = String::CreateFromAscii("MIN"); + break; + case TK_MAXIMUM: + aName = String::CreateFromAscii("MAX"); + break; + case TK_AVERAGE: + aName = String::CreateFromAscii("MEAN"); + break; + case TK_ADD: + aName = String::CreateFromAscii("+"); + break; + case TK_SUBTRACT: + aName = String::CreateFromAscii("-"); + break; + case TK_MULTIPLY: + aName = String::CreateFromAscii("*"); + break; + case TK_DIVIDE: + aName = String::CreateFromAscii("/"); + break; + case TK_UNARY_MINUS: + aName = String::CreateFromAscii("-"); + break; + case TK_LESS: + aName = String::CreateFromAscii("L"); + break; + case TK_LESS_OR_EQUAL: + aName = String::CreateFromAscii("LEQ"); + break; + case TK_GREATER: + aName = String::CreateFromAscii("G"); + break; + case TK_GREATER_OR_EQUAL: + aName = String::CreateFromAscii("GEQ"); + break; + case TK_EQUAL: + aName = String::CreateFromAscii("EQ"); + break; + case TK_NOT_EQUAL: + aName = String::CreateFromAscii("NEQ"); + break; + case TK_NOT: + aName = String::CreateFromAscii("NOT"); + break; + case TK_AND: + aName = String::CreateFromAscii("AND"); + break; + case TK_OR: + aName = String::CreateFromAscii("OR"); + break; + default: + assert(false); + break; + } + return aName; +} + +/** +* Get cell address in String +* @date 03/26/2005 +* @param +* @param +* @return String. +*/ +String LwpFormulaTools::GetCellAddr(sal_Int16 nRow, sal_Int16 nCol, LwpTableLayout* pCellsMap) +{ + String aCellAddr; + XFCell* pCell = pCellsMap->GetCellsMap(nRow,(sal_uInt8)nCol); + if (pCell) + { + aCellAddr = pCell->GetCellName(); + } + else + { + assert( -1==nRow || -1==(sal_Int8)nCol); + } + return aCellAddr; +} diff --git a/lotuswordpro/source/filter/lwptblformula.hxx b/lotuswordpro/source/filter/lwptblformula.hxx new file mode 100644 index 000000000000..272c0d6ac969 --- /dev/null +++ b/lotuswordpro/source/filter/lwptblformula.hxx @@ -0,0 +1,223 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - table object + */ +/************************************************************************* + * Change History + Mar 2005 Created + ************************************************************************/ +#ifndef _LWPTBLFORMULA_HXX_ +#define _LWPTBLFORMULA_HXX_ + +using namespace std; + +/* These token types are written to the file. Don't change their +values unless you filter them. +*/ +enum lTokenType +{ + TK_BAD = 0, + TK_OPERAND = 1, + TK_END = 2, + TK_RIGHTPAREN = 3, + TK_FUNCTION = 4, + TK_LEFTPAREN = 5, + TK_UNARY_MINUS = 6, + TK_ADD = 7, + TK_SUBTRACT = 8, + TK_MULTIPLY = 9, + TK_DIVIDE = 10, + TK_EQUAL = 11, + TK_LESS = 12, + TK_GREATER = 13, + TK_NOT_EQUAL = 14, + TK_GREATER_OR_EQUAL = 15, + TK_LESS_OR_EQUAL = 16, + TK_NOT = 17, + TK_AND = 18, + TK_OR = 19, + TK_CELLID = 20, + TK_CONSTANT = 21, + TK_TEXT = 22, + TK_SUM = 23, + TK_IF = 24, + TK_AVERAGE = 25, + TK_MAXIMUM = 26, + TK_MINIMUM = 27, + TK_COUNT = 28, + TK_CELLRANGE = 29, + TK_EXPRESSION = 30, + TK_OPEN_FUNCTION = 31, + TK_LIST_SEPARATOR = 32 +}; +class LwpTableLayout; +class LwpFormulaArg +{ +public: + virtual String ToString(LwpTableLayout* pCellsMap)=0; + virtual String ToArgString(LwpTableLayout* pCellsMap){ return ToString(pCellsMap);} +}; + +class LwpFormulaTools +{ +public: + static String GetName(sal_uInt16 nTokenType); + static String GetCellAddr(sal_Int16 nRow, sal_Int16 nCol, LwpTableLayout* pCellsMap); +}; + +class LwpFormulaConst:public LwpFormulaArg +{ +public: + LwpFormulaConst( double dVal); + virtual String ToString(LwpTableLayout* pCellsMap); +private: + double m_dVal; +}; + +class LwpFormulaText:public LwpFormulaArg +{ +public: + LwpFormulaText( String aText); + virtual String ToString(LwpTableLayout* pCellsMap){return m_aText;} +private: + String m_aText; +}; + +class LwpFormulaCellAddr:public LwpFormulaArg +{ +public: + LwpFormulaCellAddr(sal_Int16 aCol, sal_Int16 aRow); + + sal_Int16 GetCol(){return m_aCol;} + sal_Int16 GetRow(){return m_aRow;} + + virtual String ToString(LwpTableLayout* pCellsMap); +private: + sal_Int16 m_aCol; + sal_Int16 m_aRow; +}; + +class LwpFormulaCellRangeAddr:public LwpFormulaArg +{ +public: + LwpFormulaCellRangeAddr(sal_Int16 aStartCol, sal_Int16 aStartRow, sal_Int16 aEndCol, sal_Int16 aEndRow); + + virtual String ToString(LwpTableLayout* pCellsMap); +private: + sal_Int16 m_aStartCol; + sal_Int16 m_aStartRow; + sal_Int16 m_aEndCol; + sal_Int16 m_aEndRow; +}; + +class LwpFormulaFunc :public LwpFormulaArg +{ +public: + LwpFormulaFunc(sal_uInt16 nTokenType); + virtual ~LwpFormulaFunc(); + + void AddArg(LwpFormulaArg* pArg); + + virtual String ToString(LwpTableLayout* pCellsMap); + String ToArgString(LwpTableLayout* pCellsMap); + +protected: + vector<LwpFormulaArg*> m_aArgs; + sal_uInt16 m_nTokenType; +}; + +class LwpFormulaOp : public LwpFormulaFunc +{ +public: + LwpFormulaOp(sal_uInt16 nTokenType):LwpFormulaFunc(nTokenType){;} + String ToString(LwpTableLayout* pCellsMap); +}; + +class LwpFormulaUnaryOp : public LwpFormulaFunc +{ +public: + LwpFormulaUnaryOp(sal_uInt16 nTokenType):LwpFormulaFunc(nTokenType){;} + String ToString(LwpTableLayout* pCellsMap); +}; + + +class LwpFormulaInfo : public LwpCellList +{ +public: + LwpFormulaInfo(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpFormulaInfo(); + sal_Bool IsFormula(){return sal_True;} + void SetRow(USHORT nRow){ m_nFormulaRow = nRow;} + String Convert(LwpTableLayout* pCellsMap); + void Convert(XFCell * pCell, LwpTableLayout* pCellsMap); +protected: + void Read(); + sal_Bool ReadCellID(); + sal_Bool ReadText(); + sal_Bool ReadCellRange(); + sal_Bool ReadExpression(); + sal_Bool ReadArguments(LwpFormulaFunc& aFunc); + sal_Bool m_bSupported; +private: + vector<LwpFormulaArg*> m_aStack; + sal_Bool ReadConst(); + void MarkUnsupported(sal_uInt16 TokenType); + + USHORT m_nFormulaRow; +}; + +#endif diff --git a/lotuswordpro/source/filter/lwptemp.hxx b/lotuswordpro/source/filter/lwptemp.hxx new file mode 100644 index 000000000000..c7b05003ad81 --- /dev/null +++ b/lotuswordpro/source/filter/lwptemp.hxx @@ -0,0 +1,79 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _LWPTEMPOBJ_HXX_ +#define _LWPTEMPOBJ_HXX_ + + +class LwpTempObject +{ +// friend class LwpObjectFactory; +public: + LwpTempObject(){}; + ~LwpTempObject(){}; + +/*protected: + LwpObjectHeader m_ObjHdr; + LwpObjectStream* m_pObjStrm; + LwpObjectStream m_TempObjStrm; + SvStream* m_pTempStrm; + +protected: + void QuickRead(); + virtual void Read(); +public: + LwpObjectID* GetObjectID(){ return m_ObjHdr.GetID();}*/ +}; + +#endif diff --git a/lotuswordpro/source/filter/lwptoc.cxx b/lotuswordpro/source/filter/lwptoc.cxx new file mode 100644 index 000000000000..014ea013479c --- /dev/null +++ b/lotuswordpro/source/filter/lwptoc.cxx @@ -0,0 +1,456 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/** + * @file + * For LWP filter architecture prototype - TOC related object + */ +/************************************************************************* + * Change History + April 2005 Created + April 2005 Modified + April 2005 Modified - add LwpTocLevelData class + ************************************************************************/ +#include "lwptoc.hxx" +#include "lwpfoundry.hxx" +#include "lwpdoc.hxx" +#include "lwpframelayout.hxx" +#include "lwpglobalmgr.hxx" + +#include "xfilter/xffont.hxx" +#include "xfilter/xftextstyle.hxx" +#include "xfilter/xfstylemanager.hxx" +#include "xfilter/xfparagraph.hxx" +#include "xfilter/xfparastyle.hxx" +#include "xfilter/xfindex.hxx" +#include "xfilter/xffloatframe.hxx" +#include "xfilter/xfframestyle.hxx" +#include "xfilter/xfframe.hxx" +#include "xfilter/xftable.hxx" + +LwpTocSuperLayout::LwpTocSuperLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm) + : LwpSuperTableLayout(objHdr, pStrm) +{} + +LwpTocSuperLayout::~LwpTocSuperLayout() +{} +/** + * @short Read TOCSUPERTABLELAYOUT object + * @return none + */ +void LwpTocSuperLayout::Read() +{ + LwpSuperTableLayout::Read(); + m_TextMarker.Read(m_pObjStrm); + m_ParentName.Read(m_pObjStrm); + m_DivisionName.Read(m_pObjStrm); + m_SectionName.Read(m_pObjStrm); + m_nFrom = m_pObjStrm->QuickReaduInt16(); + + m_SearchItems.Read(m_pObjStrm); + + sal_uInt16 i; + sal_uInt16 count = m_pObjStrm->QuickReaduInt16(); + for (i = 0; (i < MAX_LEVELS) && (count > 0); i++, count--) + m_DestName[i].Read(m_pObjStrm); + + count = m_pObjStrm->QuickReaduInt16(); + for (i = 0; (i < MAX_LEVELS) && (count > 0); i++, count--) + m_DestPGName[i].Read(m_pObjStrm); + + count = m_pObjStrm->QuickReaduInt16(); + for (i = 0; i < count; i++) + m_nFlags[i] = m_pObjStrm->QuickReaduInt32(); + + m_pObjStrm->SkipExtra(); +} +/** + * @short Register style of TOC + * @return none + */ +void LwpTocSuperLayout::RegisterStyle() +{ + LwpSuperTableLayout::RegisterStyle(); + + // Get font info of default text style and set into tab style + XFParaStyle* pBaseStyle = static_cast<XFParaStyle*>(m_pFoundry->GetStyleManager()->GetStyle(*m_pFoundry->GetDefaultTextStyle())); + XFTextStyle*pTextStyle = new XFTextStyle; + pTextStyle->SetFont(pBaseStyle->GetFont()); // who delete this font????? + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_TabStyleName = pXFStyleManager->AddStyle(pTextStyle)->GetStyleName(); + +} +/** + * @short Convert TOC + * @param pCont - container + * @return none + */ +void LwpTocSuperLayout::XFConvert(XFContentContainer* pCont) +{ + XFIndex* pToc = new XFIndex(); + + pToc->SetProtected(sal_False); + pToc->SetIndexType(enumXFIndexTOC); + + // add TOC template + for (sal_uInt16 i = 1; i<= MAX_LEVELS; i++) + { + LwpTocLevelData * pLevel = GetSearchLevelPtr(i); + XFIndexTemplate * pTemplate = new XFIndexTemplate(); + + if(!pLevel) + { + // add an blank template so that SODC won't add default style to this level + pToc->AddTemplate(Int32ToOUString(i), String::CreateFromAscii(""), pTemplate); + continue; + } + + sal_Bool bInserted = sal_False; + do + { + // One level has 1 template + if (!bInserted) + { + pTemplate->SetLevel(Int32ToOUString(i)); + if(pLevel->GetUseLeadingText()) + { + pTemplate->AddEntry(enumXFIndexTemplateChapter, pLevel->GetSearchStyle()); + } + if(pLevel->GetUseText()) + { + pTemplate->AddEntry(enumXFIndexTemplateText, pLevel->GetSearchStyle()); + } + if(GetUsePageNumber(i)) + { + sal_uInt16 nLeaderType = GetSeparatorType(i); + if (GetRightAlignPageNumber(i)) + { + char cSep = ' '; + switch(nLeaderType) + { + default: // go through + case NONE: // no leaders + cSep = ' '; + break; + case LEADERDOTS: + cSep = '.'; + break; + case LEADERDASHES: + cSep = '-'; + break; + case LEADERUNDERLINE: + cSep = '_'; + break; + } + + pTemplate->AddTabEntry(enumXFTabRight, 0, cSep, 'd', m_TabStyleName); + } + else + { + char sSep[8]; + switch(nLeaderType) + { + default: // go through + case NONE: // no leaders + strcpy(sSep, " "); + break; + case SEPARATORCOMMA: + strcpy(sSep, ", "); + break; + case SEPARATORDOTS: + strcpy(sSep, "..."); + break; + } + pTemplate->AddTextEntry(A2OUSTR(sSep), m_TabStyleName); + } + //"TOC Page Number Text Style" style always exists in Word Pro file + pTemplate->AddEntry(enumXFIndexTemplatePage, A2OUSTR("TOC Page Number Text Style")); + } + + pToc->AddTemplate(Int16ToOUString(i), m_pFoundry->FindActuralStyleName(pLevel->GetSearchStyle()), pTemplate); + bInserted = sal_True; + } + + // 1 style in WordPro may be mapped to several styles in SODC + LwpDocument * pDocument = m_pFoundry->GetDocument()->GetRootDocument(); + AddSourceStyle(pToc, pLevel, pDocument->GetFoundry()); + + // one level may have several corresponding Styles + pLevel = GetNextSearchLevelPtr(i, pLevel); // find next LwpTocLevelData which is same index + }while (pLevel != NULL); + } + + m_pCont = pCont; + // add TOC content + LwpSuperTableLayout::XFConvert(pToc); + + // if current TOC is located in a cell, we must add a frame between upper level container and TOC + if ( !GetContainerLayout()->IsCell() ) + { + pCont->Add(pToc); + } +} + +/** + * @short convert frame which anchor to page + * @param pCont - + * @return + */ +void LwpTocSuperLayout::XFConvertFrame(XFContentContainer* pCont, sal_Int32 nStart , sal_Int32 nEnd , sal_Bool bAll) +{ + if(m_pFrame) + { + XFFrame* pXFFrame = NULL; + if(nEnd < nStart) + { + pXFFrame = new XFFrame(); + } + else + { + pXFFrame = new XFFloatFrame(nStart, nEnd, bAll); + } + + m_pFrame->Parse(pXFFrame, static_cast<sal_uInt16>(nStart)); + + //parse table, and add table to frame or TOC + LwpTableLayout * pTableLayout = GetTableLayout(); + if (pTableLayout) + { + XFContentContainer * pTableContainer = pXFFrame; + // if *this is a TOCSuperTableLayout and it's located in a cell + // add the frame to upper level and add TOCSuperTableLayout into the frame + if ( GetContainerLayout()->IsCell() ) + { + pTableContainer = pCont; // TOC contain table directly + pXFFrame->Add(pCont); + m_pCont->Add(pXFFrame); + } + else + { + //add frame to the container + pCont ->Add(pXFFrame); + } + pTableLayout->XFConvert(pTableContainer); + } + } + +} + +/** + * @short Add source style into TOC + * @param pToc - TOC pointer + * @param pLevel - TOC level data + * @param pFoundry - foundry pointer + * @return sal_Bool + */ +void LwpTocSuperLayout::AddSourceStyle(XFIndex* pToc, LwpTocLevelData * pLevel, LwpFoundry * pFoundry) +{ + if (!pLevel) + { + return; + } + + OUString sLwpStyleName = pLevel->GetSearchStyle(); + + if (pFoundry) + { + LwpDocument * pDoc = pFoundry->GetDocument(); + if (pDoc && pDoc->IsChildDoc()) + { + OUString sSodcStyleName = pFoundry->FindActuralStyleName(sLwpStyleName); + pToc->AddTocSource(pLevel->GetLevel(), sSodcStyleName); + } + else + { + pDoc = pDoc->GetFirstDivision(); + while (pDoc) + { + AddSourceStyle(pToc, pLevel, pDoc->GetFoundry() ); + pDoc = pDoc->GetNextDivision(); + } + } + } +} + +/** + * @short Get whether page number is right alignment + * @param index - TOC level + * @return sal_Bool + */ +sal_Bool LwpTocSuperLayout::GetRightAlignPageNumber(sal_uInt16 index) +{ + if (index < MAX_LEVELS) + return (m_nFlags[index] & TS_RIGHTALIGN) ? sal_True : sal_False; + return sal_False; +} +/** + * @short Get whether page number is used in TOC entries + * @param index - TOC level + * @return sal_Bool + */ +sal_Bool LwpTocSuperLayout::GetUsePageNumber(sal_uInt16 index) +{ + if (index < MAX_LEVELS) + return (m_nFlags[index] & TS_PAGENUMBER) ? sal_True : sal_False; + return sal_False; +} +/** + * @short Get what is used for separater + * @param index - TOC level + * @return sal_uInt16 - separator type + */ +sal_uInt16 LwpTocSuperLayout::GetSeparatorType(sal_uInt16 index) +{ + sal_uInt16 Flag = (sal_uInt16)m_nFlags[index]; + + if (Flag & TS_LEADERDOTS) + return LEADERDOTS; + else if (Flag & TS_LEADERDASHES) + return LEADERDASHES; + else if (Flag & TS_LEADERUNDERLINE) + return LEADERUNDERLINE; + else if (Flag & TS_SEPARATORCOMMA) + return SEPARATORCOMMA; + else if (Flag & TS_SEPARATORDOTS) + return SEPARATORDOTS; + else + return NONE; +} + +/** + * @short Get TOCLEVELDATA obj + * @param index - TOC level + * @return LwpTocLevelData * - pointer to TOCLEVELDATA obj + */ +LwpTocLevelData * LwpTocSuperLayout::GetSearchLevelPtr(sal_uInt16 index) +{ + LwpObjectID * pID = m_SearchItems.GetHead(); // not necessary to check pID NULL or not + LwpTocLevelData * pObj = static_cast<LwpTocLevelData *>(pID->obj()); + + while(pObj) + { + if(pObj->GetLevel()== index) + { + return pObj; + } + + pID = pObj->GetNext(); // not necessary to check pID NULL or not + pObj = static_cast<LwpTocLevelData *>(pID->obj()); + } + + return NULL; +} +/** + * @short Get next TOCLEVELDATA obj from current position + * @param index - TOC level + * @param pCurData - current LwpTocLevelData + * @return LwpTocLevelData * - pointer to TOCLEVELDATA obj + */ +LwpTocLevelData * LwpTocSuperLayout::GetNextSearchLevelPtr(sal_uInt16 index, LwpTocLevelData * pCurData) +{ + LwpObjectID * pID = pCurData->GetNext(); + LwpTocLevelData * pObj = static_cast<LwpTocLevelData *>(pID->obj()); + + while(pObj) + { + if(pObj->GetLevel()== index) + { + return pObj; + } + + pID = pObj->GetNext(); // not necessary to check pID NULL or not + pObj = static_cast<LwpTocLevelData *>(pID->obj()); + } + + return NULL; +} + +LwpTocLevelData::LwpTocLevelData(LwpObjectHeader &objHdr, LwpSvStream* pStrm):LwpDLVList(objHdr, pStrm) +{ + m_nFlags = 0; + m_nLevel = 0; +} +LwpTocLevelData::~LwpTocLevelData() +{ +} +/** + * @short Register style + * @param + * @return + */ +void LwpTocLevelData::RegisterStyle() +{ +} +/** + * @short Convert + * @param pCont - container + * @return none + */ +void LwpTocLevelData::XFConvert(XFContentContainer* pCont) +{ +} +/** + * @short Read TOCLEVELDATA obj + * @param + * @return + */ +void LwpTocLevelData::Read() +{ + LwpDLVList::Read(); + m_nFlags = m_pObjStrm->QuickReaduInt16(); + m_nLevel = m_pObjStrm->QuickReaduInt16(); + m_SearchName.Read(m_pObjStrm); + + m_pObjStrm->SkipExtra(); +} diff --git a/lotuswordpro/source/filter/lwptoc.hxx b/lotuswordpro/source/filter/lwptoc.hxx new file mode 100644 index 000000000000..96aa771b201a --- /dev/null +++ b/lotuswordpro/source/filter/lwptoc.hxx @@ -0,0 +1,170 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * Change History +April 2005 Created + April 2005 Modified - add LwpTocLevelData class + ************************************************************************/ + +#ifndef _LWPTOCSUPERTABLELAYOUT_HXX +#define _LWPTOCSUPERTABLELAYOUT_HXX +#include "lwptablelayout.hxx" +class XFIndex; +class LwpDocument; +class LwpFoundry; +class LwpTocLevelData; +class XFIndex; +class XFIndexTemplate; +/** + * @brief + * VO_TOCSUPERTABLELAYOUT object + */ +class LwpTocSuperLayout : public LwpSuperTableLayout +{ +public: + LwpTocSuperLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + virtual ~LwpTocSuperLayout(); + void RegisterStyle(); + virtual void XFConvert(XFContentContainer* pCont); + virtual LWP_LAYOUT_TYPE GetLayoutType () { return LWP_TOC_SUPERTABLE_LAYOUT;} + virtual void XFConvertFrame(XFContentContainer* pCont, sal_Int32 nStart = 0, sal_Int32 nEnd = 0, sal_Bool bAll = sal_False); +protected: + void Read(); + sal_Bool GetRightAlignPageNumber(sal_uInt16 index); + sal_Bool GetUsePageNumber(sal_uInt16 index); + sal_uInt16 GetSeparatorType(sal_uInt16 index); + LwpTocLevelData * GetSearchLevelPtr(sal_uInt16 index); + LwpTocLevelData * GetNextSearchLevelPtr(sal_uInt16 index, LwpTocLevelData * pCurData); + void AddSourceStyle(XFIndex* pToc, LwpTocLevelData * pLevel, LwpFoundry * pFoundry); +private: + enum {MAX_LEVELS = 9}; + enum + { + TS_NOLEADERS = 0x01, + TS_LEADERDOTS = 0x02, + TS_LEADERDASHES = 0x04, + TS_LEADERUNDERLINE = 0x08, + TS_SEPARATORCOMMA = 0x10, + TS_SEPARATORDOTS = 0x20, + TS_PAGENUMBER = 0x40, + TS_RIGHTALIGN = 0x80 + }; + + enum + { + NONE = 0, + LEADERDOTS = 1, + LEADERDASHES = 2, + LEADERUNDERLINE = 3, + SEPARATORCOMMA = 4, + SEPARATORDOTS = 5 + }; + + //m_nFrom + enum + { + SELECTEDTEXT = 1, + ENTIREDOCUMENT = 2, + CURRENTLEVELDIVISION = 3, + CURRENTDIVISION = 4, + CURRENTSECTION = 5 + }; + + LwpAtomHolder m_TextMarker; /* for selected text */ + LwpAtomHolder m_ParentName; /* for currentleveldivision */ + LwpAtomHolder m_DivisionName; /* for currentdivision¤tsection */ + LwpAtomHolder m_SectionName; /* for currentsection */ + sal_uInt16 m_nFrom; + LwpDLVListHeadTail m_SearchItems; + LwpAtomHolder m_DestName[MAX_LEVELS]; + LwpAtomHolder m_DestPGName[MAX_LEVELS]; + sal_uInt32 m_nFlags[MAX_LEVELS]; + + std::vector<std::pair<OUString,OUString> > m_TOCList; + + rtl::OUString m_TabStyleName; + + XFContentContainer* m_pCont; +}; +/** + * @brief + * VO_TOCLEVELDATA object + */ +class LwpTocLevelData : public LwpDLVList +{ +public: + enum + { + USETEXT = 0x01, + USENUMBER = 0x02 + }; + LwpTocLevelData(LwpObjectHeader &objHdr, LwpSvStream* pStrm); + ~LwpTocLevelData(); + void RegisterStyle(); + virtual void XFConvert(XFContentContainer* pCont); + inline sal_uInt16 GetLevel(void){return m_nLevel;}; + inline sal_Bool GetUseText(void){ return (m_nFlags & USETEXT) ? sal_True : sal_False;}; + inline OUString GetSearchStyle(void){return m_SearchName.str();}; + inline sal_Bool GetUseLeadingText(void){ return (m_nFlags & USENUMBER) ? sal_True : sal_False;} +private: + sal_uInt16 m_nFlags; + sal_uInt16 m_nLevel; + LwpAtomHolder m_SearchName; + +protected: + void Read(); +}; + +#endif diff --git a/lotuswordpro/source/filter/lwptools.cxx b/lotuswordpro/source/filter/lwptools.cxx new file mode 100644 index 000000000000..6a35d4d44326 --- /dev/null +++ b/lotuswordpro/source/filter/lwptools.cxx @@ -0,0 +1,920 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwptools.hxx" +#include <rtl/ustrbuf.hxx> +#include <osl/process.h> +#include <osl/thread.h> +#include <osl/file.hxx> +#include <vcl/svapp.hxx> +#include <vcl/settings.hxx> +#include <unicode/datefmt.h> +#include <unicode/udat.h> + +#ifdef SAL_UNX +#define SEPARATOR '/' +#else +#define SEPARATOR '\\' +#endif + +using namespace icu; +using namespace ::rtl; +using namespace ::osl; + +/** + * @descr read lwp unicode string from stream to OUString per aEncoding +*/ +sal_uInt16 LwpTools::QuickReadUnicode(LwpObjectStream* pObjStrm, + OUString& str, sal_uInt16 strlen, rtl_TextEncoding aEncoding) + //strlen: length of bytes +{ + + sal_uInt16 readLen = 0; + OUStringBuffer strBuf(128); + sal_uInt16 len = 0; + + if( !IsUnicodePacked(pObjStrm, strlen) ) + { + sal_Char buf[1024]; + + while(strlen) + { + strlen>1023?len=1023 :len=strlen; + len = pObjStrm->QuickRead(buf, len); + buf[len] = '\0'; + strBuf.append( OUString(buf, len, aEncoding) ); + strlen -= len; + readLen += len; + if(!len) break; + } + str = strBuf.makeStringAndClear(); + return readLen; + } + else + { + sal_Char buf[1024]; + sal_Unicode unibuf[1024]; + sal_uInt8 readbyte; + sal_uInt16 readword; + + BOOL flag = sal_False; //switch if unicode part reached + sal_uInt16 sublen = 0; + + while(readLen<strlen) + { + if(!flag) //Not unicode string + { + len = pObjStrm->QuickRead(&readbyte, sizeof(readbyte)); + if(!len) break; + readLen+=len; + + if(readbyte == 0x00) + { + flag = sal_True; + if(sublen>0) //add it to the strBuf + { + strBuf.append( OUString(buf, sublen, aEncoding) ); //try the aEncoding + sublen = 0; + } + } + else + { + buf[sublen++] = readbyte; + } + if(sublen>=1023 || readLen==strlen) //add it to the strBuf + { + strBuf.append( OUString(buf, sublen, aEncoding) ); //try the aEncoding + sublen = 0; + } + } + else //unicode string + { + len = pObjStrm->QuickRead(&readword, sizeof(readword)); + if(!len) break; + readLen+=len; + + if(readword == 0x0000) + { + flag = sal_False; + if(sublen) + { + unibuf[sublen] = sal_Unicode('\0'); + strBuf.append( OUString(unibuf) ); + sublen = 0; + } + } + else + { + unibuf[sublen++] = readword; + } + if(sublen>=1023 || readLen==strlen) + { + unibuf[sublen] = sal_Unicode('\0'); + strBuf.append( OUString(unibuf) ); + sublen = 0; + } + } + } +// if(sublen) +// { +// unibuf[sublen] = sal_Unicode('\0'); +// strBuf.append( OUString(unibuf) ); +// sublen = 0; +// } + str = strBuf.makeStringAndClear(); + return readLen; + } +} + +/** + * @descr Judge if the data (len) in object stream is lwp unicode packed +*/ +BOOL LwpTools::IsUnicodePacked(LwpObjectStream* pObjStrm, sal_uInt16 len) +{ + sal_uInt8 byte; + sal_uInt16 oldpos = pObjStrm->GetPos(); + + for (sal_uInt16 i = 0; i < len; i++) + { + pObjStrm->QuickRead(&byte, sizeof(byte)); + if (byte == 0x00) + { + pObjStrm->Seek(oldpos); + return sal_True; + } + } + pObjStrm->Seek(oldpos); + return sal_False; +} + +sal_Bool LwpTools::isFileUrl(const OString &fileName) +{ + if (fileName.indexOf("file://") == 0 ) + return sal_True; + return sal_False; +} + +OUString LwpTools::convertToFileUrl(const OString &fileName) +{ + if ( isFileUrl(fileName) ) + { + return OStringToOUString(fileName, osl_getThreadTextEncoding()); + } + + OUString uUrlFileName; + OUString uFileName(fileName.getStr(), fileName.getLength(), osl_getThreadTextEncoding()); + if ( fileName.indexOf('.') == 0 || fileName.indexOf(SEPARATOR) < 0 ) + { + OUString uWorkingDir; + OSL_VERIFY( osl_getProcessWorkingDir(&uWorkingDir.pData) == osl_Process_E_None ); + OSL_VERIFY( FileBase::getAbsoluteFileURL(uWorkingDir, uFileName, uUrlFileName) == FileBase::E_None ); + } else + { + OSL_VERIFY( FileBase::getFileURLFromSystemPath(uFileName, uUrlFileName) == FileBase::E_None ); + } + + return uUrlFileName; +} + +OUString LwpTools::DateTimeToOUString(LtTm & dt) +{ + rtl::OUStringBuffer buf; + buf.append(dt.tm_year); + buf.append( A2OUSTR("-") ); + buf.append(dt.tm_mon); + buf.append( A2OUSTR("-") ); + buf.append(dt.tm_mday); + buf.append( A2OUSTR("T") ); + buf.append(dt.tm_hour); + buf.append( A2OUSTR(":") ); + buf.append(dt.tm_min); + buf.append( A2OUSTR(":") ); + buf.append(dt.tm_sec); + + return buf.makeStringAndClear(); +} + +/** + * @descr get the system date format +*/ +XFDateStyle* LwpTools::GetSystemDateStyle(sal_Bool bLongFormat) +{ + icu::DateFormat::EStyle style; + if (bLongFormat) + style = icu::DateFormat::FULL;//system full date format + else + style = icu::DateFormat::SHORT;//system short date format +/* ::com::sun::star::lang::Locale aLocale=Application::GetSettings().GetLocale(); + rtl::OUString strLang = aLocale.Language; + rtl::OUString strCountry = aLocale.Country; + strLang = strLang + A2OUSTR("_"); + rtl::OUString strLocale = strLang + strCountry; + + int32_t nLength = 0; + int32_t nLengthNeed; + UErrorCode status = U_ZERO_ERROR; + UChar* pattern = NULL; + + UDateFormat* fmt= udat_open(UDAT_FULL, UDAT_FULL, + (char*)(OUStringToOString(strLocale,RTL_TEXTENCODING_MS_1252).getStr()), NULL, 0, NULL, 0, &status); + + nLengthNeed = udat_toPattern(fmt,true,NULL,nLength,&status); + if (status == U_BUFFER_OVERFLOW_ERROR) + { + status = U_ZERO_ERROR; + nLength = nLengthNeed +1; + pattern = (UChar*)malloc(sizeof(UChar)*nLength); + udat_toPattern(fmt,true,pattern,nLength,&status); + } +*/ + //1 get locale for system + ::com::sun::star::lang::Locale aLocale=Application::GetSettings().GetLocale(); + rtl::OUString strLang = aLocale.Language; + rtl::OUString strCountry = aLocale.Country; + icu::Locale bLocale((char*)(OUStringToOString(strLang,RTL_TEXTENCODING_MS_1252).getStr()), + (char*)(OUStringToOString(strCountry,RTL_TEXTENCODING_MS_1252).getStr())); + //2 get icu format pattern by locale + icu::DateFormat* fmt = icu::DateFormat::createDateInstance(style,bLocale); + + int32_t nLength = 0; + int32_t nLengthNeed; + UErrorCode status = U_ZERO_ERROR; + UChar* pattern = NULL; + + nLengthNeed = udat_toPattern((void *const *)fmt,sal_False,NULL,nLength,&status); + if (status == U_BUFFER_OVERFLOW_ERROR) + { + status = U_ZERO_ERROR; + nLength = nLengthNeed +1; + pattern = (UChar*)malloc(sizeof(UChar)*nLength); + udat_toPattern((void *const *)fmt,sal_False,pattern,nLength,&status); + } + if (pattern == NULL) + return NULL; + // 3 parse pattern string,per icu date/time format syntax, there are 20 letters reserved + // as patter letter,each represent a element in date/time and its repeat numbers represent + // different format: for exampel: M produces '1',MM produces '01', MMM produces 'Jan', MMMM produces 'Januaray' + // letter other than these letters is regard as text in the format, for example ','in 'Jan,2005' + // we parse pattern string letter by letter and get the time format. + UChar cSymbol; + UChar cTmp; + XFDateStyle* pDateStyle = new XFDateStyle; + + for (int32_t i=0;i<nLengthNeed;) + { + cSymbol = pattern[i]; + int32_t j; + switch(cSymbol) + { + case 'G': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + pDateStyle->AddEra(); + break; + } + case 'y': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + if (j <= 2) + pDateStyle->AddYear(sal_False); + else + pDateStyle->AddYear(); + break; + } + case 'M': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + if (j==1) + pDateStyle->AddMonth(sal_False,sal_False); + else if (j==2) + pDateStyle->AddMonth(sal_True,sal_False); + else if (j==3) + pDateStyle->AddMonth(sal_False,sal_True); + else + pDateStyle->AddMonth(sal_True,sal_True); + break; + } + case 'd': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + if (j==1) + pDateStyle->AddMonthDay(sal_False); + else + pDateStyle->AddMonthDay(); + break; + } + case 'h': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + if (j==1) + pDateStyle->AddHour(sal_False); + else + pDateStyle->AddHour(); + break; + } + case 'H': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + if (j==1) + pDateStyle->AddHour(sal_False); + else + pDateStyle->AddHour(); + break; + } + case 'm': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + if (j==1) + pDateStyle->AddMinute(sal_False); + else + pDateStyle->AddMinute(); + break; + } + case 's': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + if (j==1) + pDateStyle->AddSecond(sal_False,0); + else + pDateStyle->AddSecond(sal_True,0); + break; + } + case 'S': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + /*if (j==1) + pDateStyle->AddSecond(sal_False); + else + pDateStyle->AddSecond();*/ + break; + } + case 'E': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + if (j<=2) + pDateStyle->AddWeekDay(sal_False); + else + pDateStyle->AddWeekDay(); + break; + } + case 'D': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + /*if (j==1) + pDateStyle->AddWeekDay(sal_False); + else + pDateStyle->AddWeekDay();*/ + break; + } + case 'F': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + /*if (j==1) + pDateStyle->AddWeekDay(sal_False); + else + pDateStyle->AddWeekDay();*/ + break; + } + case 'w': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + /*if (j==1) + pDateStyle->AddWeekDay(sal_False); + else + pDateStyle->AddWeekDay();*/ + break; + } + case 'W': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + /*if (j==1) + pDateStyle->AddWeekDay(sal_False); + else + pDateStyle->AddWeekDay();*/ + break; + } + case 'a': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + pDateStyle->AddAmPm(sal_True); + break; + } + case 'k': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + break; + } + case 'K': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + if (j==1) + pDateStyle->AddHour(sal_False); + else + pDateStyle->AddHour(); + break; + } + case 'Z': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + break; + } + case '\''://' + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + break; + } + case '"': + { + pDateStyle->AddText(OUString(A2OUSTR("'"))); + break; + } + default: + { + if ((cSymbol>='A' && cSymbol<='Z') || (cSymbol>='a' && cSymbol<='z') ) + return NULL; + else//TEXT + { + //UChar buffer[1024]; + sal_Unicode buffer[1024]; + buffer[0] = cSymbol; + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if ((cTmp>='A' && cTmp<='Z') || (cTmp>='a' && cTmp<='z') || + cTmp=='\'' || cTmp=='"' ) + { + i=i+j; + buffer[j]= '\0'; + break; + } + else + buffer[j] = cTmp; + } + + pDateStyle->AddText(OUString(buffer));//keep for all parsed + } + break; + } + } + } +// udat_close(fmt); + return pDateStyle; +} +/** + * @descr get the system time format +*/ +XFTimeStyle* LwpTools::GetSystemTimeStyle() +{ +/* ::com::sun::star::lang::Locale aLocale=Application::GetSettings().GetLocale(); + rtl::OUString strLang = aLocale.Language; + rtl::OUString strCountry = aLocale.Country; + strLang = strLang + A2OUSTR("_"); + rtl::OUString strLocale = strLang + strCountry; + + int32_t nLength = 0; + int32_t nLengthNeed; + UErrorCode status = U_ZERO_ERROR; + UChar* pattern = NULL; + + UDateFormat* fmt= udat_open(UDAT_FULL, UDAT_FULL, + (char*)(OUStringToOString(strLocale,RTL_TEXTENCODING_MS_1252).getStr()), NULL, 0, NULL, 0, &status); + + nLengthNeed = udat_toPattern(fmt,true,NULL,nLength,&status); + if (status == U_BUFFER_OVERFLOW_ERROR) + { + status = U_ZERO_ERROR; + nLength = nLengthNeed +1; + pattern = (UChar*)malloc(sizeof(UChar)*nLength); + udat_toPattern(fmt,true,pattern,nLength,&status); + } +*/ + //1 get locale for system + ::com::sun::star::lang::Locale aLocale=Application::GetSettings().GetLocale(); + rtl::OUString strLang = aLocale.Language; + rtl::OUString strCountry = aLocale.Country; + icu::Locale bLocale((char*)(OUStringToOString(strLang,RTL_TEXTENCODING_MS_1252).getStr()), + (char*)(OUStringToOString(strCountry,RTL_TEXTENCODING_MS_1252).getStr())); + + icu::DateFormat* fmt = icu::DateFormat::createTimeInstance(icu::DateFormat::DEFAULT,bLocale); + //2 get icu format pattern by locale + int32_t nLength = 0; + int32_t nLengthNeed; + UErrorCode status = U_ZERO_ERROR; + UChar* pattern = NULL; + nLengthNeed = udat_toPattern((void *const *)fmt,false,NULL,nLength,&status); + if (status == U_BUFFER_OVERFLOW_ERROR) + { + status = U_ZERO_ERROR; + nLength = nLengthNeed +1; + pattern = (UChar*)malloc(sizeof(UChar)*nLength); + udat_toPattern((void *const *)fmt,false,pattern,nLength,&status); + } + + if (pattern == NULL) + return NULL; + // 3 parse pattern string,per icu date/time format syntax, there are 20 letters reserved + // as patter letter,each represent a element in date/time and its repeat numbers represent + // different format: for exampel: M produces '1',MM produces '01', MMM produces 'Jan', MMMM produces 'Januaray' + // letter other than these letters is regard as text in the format, for example ','in 'Jan,2005' + // we parse pattern string letter by letter and get the time format. + // for time format ,for there is not date info,we can only parse the letter representing time. + UChar cSymbol; + UChar cTmp; + XFTimeStyle* pTimeStyle = new XFTimeStyle; + + for (int32_t i=0;i<nLengthNeed;) + { + cSymbol = pattern[i]; + int32_t j; + switch(cSymbol) + { + case 'h': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + if (j==1) + pTimeStyle->AddHour(sal_False); + else + pTimeStyle->AddHour(); + break; + } + case 'H': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + if (j==1) + pTimeStyle->AddHour(sal_False); + else + pTimeStyle->AddHour(); + break; + } + case 'm': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + if (j==1) + pTimeStyle->AddMinute(sal_False); + else + pTimeStyle->AddMinute(); + break; + } + case 's': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + if (j==1) + pTimeStyle->AddSecond(sal_False,0); + else + pTimeStyle->AddSecond(sal_True,0); + break; + } + case 'S': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + /*if (j==1) + pDateStyle->AddSecond(sal_False); + else + pDateStyle->AddSecond();*/ + break; + } + case 'a': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + pTimeStyle->SetAmPm(sal_True); + break; + } + case 'k': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + break; + } + case 'K': + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + if (j==1) + pTimeStyle->AddHour(sal_False); + else + pTimeStyle->AddHour(); + break; + } + case '\''://' + { + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if (cTmp != cSymbol) + { + i=i+j; + break; + } + } + break; + } + case '"': + { + pTimeStyle->AddText(OUString(A2OUSTR("'"))); + break; + } + default: + { + if ((cSymbol>='A' && cSymbol<='Z') || (cSymbol>='a' && cSymbol<='z') ) + return NULL; + else//TEXT + { + sal_Unicode buffer[1024]; + buffer[0] = cSymbol; + //strBuffer.append(cSymbol); + for (j=1;;j++) + { + cTmp = pattern[i+j]; + if ((cTmp>='A' && cTmp<='Z') || (cTmp>='a' && cTmp<='z') || + cTmp=='\'' || cTmp=='"' ) + { + i=i+j; + buffer[j]= '\0'; + break; + } + else + buffer[j] = cTmp; + } + pTimeStyle->AddText(OUString(buffer));//keep for all parsed + } + break; + } + } + } +// udat_close(fmt); + return pTimeStyle; +} diff --git a/lotuswordpro/source/filter/lwptools.hxx b/lotuswordpro/source/filter/lwptools.hxx new file mode 100644 index 000000000000..0549a262f35d --- /dev/null +++ b/lotuswordpro/source/filter/lwptools.hxx @@ -0,0 +1,149 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * to provide basic utilities for word pro filter + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPTOOLS_HXX +#define _LWPTOOLS_HXX + +#include "lwpheader.hxx" +#include "lwpobjstrm.hxx" +#include "localtime.hxx" +#include "xfilter/xfdatestyle.hxx" +#include "xfilter/xftimestyle.hxx" +#include <rtl/textenc.h> + +// 01/19/2005 +const sal_uInt32 UNITS_PER_INCH = 65536L * 72L; +const double CM_PER_INCH = 2.54; +const double INCHT_PER_CM = (1.0 / CM_PER_INCH); +//end + +const double POINTS_PER_INCH = 72.27; +const double TWIPS_PER_POINT = 20.0; +const double TWIPS_PER_INCH = (TWIPS_PER_POINT * POINTS_PER_INCH); +const double TWIPS_PER_CM = (TWIPS_PER_INCH/CM_PER_INCH); +/** + * @brief tool class (unicode, conversion) for lwp filter. +*/ +class LwpTools +{ + +public: + static sal_uInt16 QuickReadUnicode( LwpObjectStream* pObjStrm, + OUString& str, sal_uInt16 strlen, rtl_TextEncoding aEncoding ); + static BOOL IsUnicodePacked(LwpObjectStream* pObjStrm, sal_uInt16 len); + + // 01/19/2005 + inline static double ConvertFromUnits(const sal_Int32& nUnits); + inline static double ConvertToMetric(const double& fInch); + inline static double ConvertFromMetric(const double& fCM); + inline static double ConvertFromUnitsToMetric(const sal_Int32& nUnits); + //end + + //add by , 03/11/2005 + inline static sal_Int32 ConvertToUnits(const double& fInch); + //add end + + //, 02/23/2005 + inline static sal_Bool IsOddNumber(sal_uInt16& nNumber); + inline static sal_Bool IsEvenNumber(sal_uInt16& nNumber); + + static sal_Bool isFileUrl(const OString& fileName); + static OUString convertToFileUrl(const OString& fileName); + static rtl::OUString DateTimeToOUString(LtTm& dt); + + //add by ,2005/6/1 + static XFDateStyle* GetSystemDateStyle(sal_Bool bLongFormat); + static XFTimeStyle* GetSystemTimeStyle(); +}; + +inline double LwpTools::ConvertFromUnits(const sal_Int32& nUnits) +{ + return (double)nUnits/UNITS_PER_INCH; +} +inline double LwpTools::ConvertToMetric(const double& fInch) +{ + return fInch*CM_PER_INCH; +} +inline double LwpTools::ConvertFromMetric(const double& fCM) +{ + return fCM/CM_PER_INCH; +} +inline double LwpTools::ConvertFromUnitsToMetric(const sal_Int32& nUnits) +{ + double fInch = ConvertFromUnits(nUnits); + return ConvertToMetric(fInch); +} +inline sal_Int32 LwpTools::ConvertToUnits(const double& fInch) +{ + return (sal_Int32)fInch*UNITS_PER_INCH; +} +inline sal_Bool LwpTools::IsOddNumber(sal_uInt16& nNumber) +{ + return nNumber%2? sal_True : sal_False; +} +inline sal_Bool LwpTools::IsEvenNumber(sal_uInt16& nNumber) +{ + return nNumber%2? sal_False : sal_True; +} + +#endif diff --git a/lotuswordpro/source/filter/lwpuidoc.cxx b/lotuswordpro/source/filter/lwpuidoc.cxx new file mode 100644 index 000000000000..6ee76ded0043 --- /dev/null +++ b/lotuswordpro/source/filter/lwpuidoc.cxx @@ -0,0 +1,139 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpuidoc.hxx" + +LwpUIDocument::LwpUIDocument() + : m_nFlags(DOC_LOCKED) +{} + + +LwpUIDocument::LwpUIDocument(LwpObjectStream *pStrm) + : m_nFlags(DOC_LOCKED) +{ + Read(pStrm); +} + +LwpUIDocument::~LwpUIDocument() +{}; + +void LwpUIDocument::Read(LwpObjectStream *pStrm) +{ + m_NamedProps.Read(pStrm); + m_ARMacroOpts.Read(pStrm); + m_MergedOpts.Read(pStrm); + m_SheetFullPath.ReadPathAtom(pStrm); + + sal_uInt16 saved_flags; + pStrm->QuickRead(&saved_flags, sizeof(saved_flags)); + m_nFlags |= saved_flags; + + if(pStrm->CheckExtra()) + { + m_InitialSaveAsType.Read(pStrm); + pStrm->SkipExtra(); + } +} +/** + * @descr Read macro options from object stream + **/ +void LwpNamedProperties::Read(LwpObjectStream *pStrm) +{ + sal_uInt16 numEntries; + pStrm->QuickRead(&numEntries, sizeof(numEntries)); + + for (sal_uInt16 k = 0 ; k < numEntries; k++) + { + assert(false); + // TODO: Read each NamedProperties + } + pStrm->SkipExtra(); +} +/** + * @descr Read macro options from object stream + **/ +void LwpAutoRunMacroOptions::Read(LwpObjectStream *pStrm) +{ + m_OpenName.ReadPathAtom(pStrm); + m_CloseName.ReadPathAtom(pStrm); + m_NewName.ReadPathAtom(pStrm); + pStrm->QuickRead(&m_OptionFlag, sizeof(m_OptionFlag)); + pStrm->SkipExtra(); +} +/** + * @descr Read merge options from object stream + **/ +void LwpMergeOptions::Read(LwpObjectStream *pStrm) +{ + m_RecordFile.ReadPathAtom(pStrm); + m_DescriptionFile.ReadPathAtom(pStrm); + m_Filter.Read(pStrm); + pStrm->QuickRead(&m_nType, sizeof(m_nType)); + + //Does not process m_nType here. Assume m_nType is 0. + // TODO: Read the CMergeDataFile + assert(m_nType==0); + + pStrm->QuickRead(&m_nLastActionFlag, sizeof(m_nLastActionFlag)); + pStrm->SkipExtra(); +} diff --git a/lotuswordpro/source/filter/lwpuidoc.hxx b/lotuswordpro/source/filter/lwpuidoc.hxx new file mode 100644 index 000000000000..12334bfcf9bf --- /dev/null +++ b/lotuswordpro/source/filter/lwpuidoc.hxx @@ -0,0 +1,154 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * all classes for LwpUIDocument + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ +#ifndef _LWPUIDOCUMENT_HXX +#define _LWPUIDOCUMENT_HXX + +#include "lwpheader.hxx" +#include "lwpdefs.hxx" + +class LwpNamedProperties; +class LwpAutoRunMacroOptions; +class LwpMergeOptions; + +#include "lwpobjstrm.hxx" +#include "lwpatomholder.hxx" +/** + * @brief Properties in UIDocument structure + * not parsed yet +*/ +class LwpNamedProperties +{ +public: + LwpNamedProperties(){}; + ~LwpNamedProperties(){}; +public: + void Read(LwpObjectStream *pStrm); +}; +/** + * @brief macro options contained in UIDocument structure + * not parsed yet +*/ +class LwpAutoRunMacroOptions +{ +public: + LwpAutoRunMacroOptions(){}; + ~LwpAutoRunMacroOptions(){}; +private: + LwpAtomHolder m_OpenName; + LwpAtomHolder m_CloseName; + LwpAtomHolder m_NewName; + sal_uInt16 m_OptionFlag; +public: + void Read(LwpObjectStream *pStrm); +}; +/** + * @brief Merget options contained in UIDocument structure + * not parsed yet +*/ +class LwpMergeOptions +{ +public: + LwpMergeOptions(){}; + ~LwpMergeOptions(){}; +private: + LwpAtomHolder m_RecordFile; + LwpAtomHolder m_DescriptionFile; + LwpAtomHolder m_Filter; + sal_uInt16 m_nType; + sal_uInt16 m_nLastActionFlag; // flag remembers last merge action +public: + void Read(LwpObjectStream *pStrm); +}; +/** + * @brief UIDocument structure contained in VO_DOCUMENT + * not parsed yet +*/ +class LwpUIDocument +{ +public: + LwpUIDocument(); + LwpUIDocument(LwpObjectStream *pStrm); + ~LwpUIDocument(); +private: + LwpNamedProperties m_NamedProps; + LwpAutoRunMacroOptions m_ARMacroOpts; + LwpMergeOptions m_MergedOpts; + LwpAtomHolder m_SheetFullPath; // full path for style sheet + sal_uInt16 m_nFlags; + LwpAtomHolder m_InitialSaveAsType; + enum + { + DOC_READONLY = 0x01, + DOC_BLOCKSETS = 0x02, + DOC_LOCKED = 0x04, + DOC_ENVELOPE = 0x08, + DOC_EXTERNALFILE = 0x10, + DOC_SANITYCHECK = 0x20, + DOC_ANNOTATEONLY = 0x40, + DOC_CANCELED = 0x80 + }; +public: + void Read(LwpObjectStream *pStrm); +}; + +#endif diff --git a/lotuswordpro/source/filter/lwpunoheader.hxx b/lotuswordpro/source/filter/lwpunoheader.hxx new file mode 100644 index 000000000000..b76577b3847c --- /dev/null +++ b/lotuswordpro/source/filter/lwpunoheader.hxx @@ -0,0 +1,84 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include <cppuhelper/implbase1.hxx> +#include <cppuhelper/implbase3.hxx> +#include <cppuhelper/factory.hxx> +#include <com/sun/star/document/XFilter.hpp> +#include <com/sun/star/document/XImporter.hpp> +#include <com/sun/star/xml/sax/XDocumentHandler.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/io/XInputStream.hpp> +#include <com/sun/star/io/XSeekable.hpp> + +#include "xfilter/xfglobal.hxx" + +using namespace ::rtl; +using namespace ::cppu; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::io; +using namespace ::com::sun::star::registry; +using namespace ::com::sun::star::document; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::xml::sax; +using namespace ::com::sun::star::uno; diff --git a/lotuswordpro/source/filter/lwpusewhen.hxx b/lotuswordpro/source/filter/lwpusewhen.hxx new file mode 100644 index 000000000000..f86d7c903468 --- /dev/null +++ b/lotuswordpro/source/filter/lwpusewhen.hxx @@ -0,0 +1,176 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPUSEWHEN_HXX +#define _LWPUSEWHEN_HXX + +#include "lwpheader.hxx" + +#define STYLE_USEONALLPAGES 0x0001U /* repeat on all pages */ +#define STYLE_USEONALLEVENPAGES 0x0002U /* repeat on all even pages */ +#define STYLE_USEONALLODDPAGES 0x0004U /* repeat on all odd pages */ +#define STYLE_USEONTHISPAGE 0x0008U /* use this guy on this page */ +#define STYLE_USEEXCEPTTHISPAGE 0x0010U /* use guy except on this page */ +#define STYLE_USESTARTINGONPAGE 0x0020U /* use starting on page n */ +#define STYLE_USEONMASK (STYLE_USEONALLPAGES | \ + STYLE_USEONALLEVENPAGES | \ + STYLE_USEONALLODDPAGES | \ + STYLE_USEONTHISPAGE | \ + STYLE_USEEXCEPTTHISPAGE | \ + STYLE_USESTARTINGONPAGE) + +#define STYLE_STARTONNEXTPAGE 0x0000U // This is the default +#define STYLE_STARTONTHISPAGE 0x0040U +#define STYLE_STARTONNEXTODD 0x0080U +#define STYLE_STARTONNEXTEVEN 0x0100U +#define STYLE_STARTONTHISHF 0x0200U +#define STYLE_STARTONMASK (STYLE_STARTONTHISPAGE | \ + STYLE_STARTONNEXTODD | \ + STYLE_STARTONNEXTEVEN | \ + STYLE_STARTONTHISHF) +class LwpUseWhen +{ +public: + LwpUseWhen() : m_nFlags(0), m_nUsePage(0) {} + + inline void Read(LwpObjectStream* pStrm); + + inline sal_Bool IsUseOnAllPages(); + + inline sal_Bool IsUseOnAllEvenPages(); + + inline sal_Bool IsUseOnAllOddPages(); + + inline sal_Bool IsUseOnPage(); + + inline sal_Bool IsStartOnThisPage(); + + inline sal_Bool IsStartOnNextPage(); + + inline sal_Bool IsStartOnNextEvenPage(); + + inline sal_Bool IsStartOnNextOddPage(); + + inline sal_Bool IsStartOnThisHF(); + + inline sal_uInt16 GetUsePage(); +private: + sal_uInt16 m_nFlags; + sal_uInt16 m_nUsePage; +}; + +inline void LwpUseWhen::Read(LwpObjectStream* pStrm) +{ + pStrm->QuickRead(&m_nFlags, 2); + pStrm->QuickRead(&m_nUsePage, 2); + pStrm->SkipExtra(); +} +inline sal_Bool LwpUseWhen::IsUseOnAllPages() +{ + return (sal_Bool)((m_nFlags & STYLE_USEONALLPAGES) != 0); +} +inline sal_Bool LwpUseWhen::IsUseOnAllEvenPages() +{ + return (sal_Bool)((m_nFlags & STYLE_USEONALLEVENPAGES) != 0); +} +inline sal_Bool LwpUseWhen::IsUseOnAllOddPages() +{ + return (sal_Bool)((m_nFlags & STYLE_USEONALLODDPAGES) != 0); +} + +inline sal_Bool LwpUseWhen::IsUseOnPage() +{ + return (sal_Bool)((m_nFlags & STYLE_USEONTHISPAGE) != 0); +} + +inline sal_Bool LwpUseWhen::IsStartOnThisPage() +{ + return (sal_Bool)((m_nFlags & STYLE_STARTONTHISPAGE) != 0); +} + +inline sal_Bool LwpUseWhen::IsStartOnNextPage() +{ + return (sal_Bool)((m_nFlags & STYLE_STARTONMASK) == 0); +} + +inline sal_Bool LwpUseWhen::IsStartOnNextOddPage() +{ + return (sal_Bool)((m_nFlags & STYLE_STARTONNEXTODD) != 0); +} + +inline sal_Bool LwpUseWhen::IsStartOnNextEvenPage() +{ + return (sal_Bool)((m_nFlags & STYLE_STARTONNEXTEVEN) != 0); +} + +inline sal_Bool LwpUseWhen::IsStartOnThisHF() +{ + return (sal_Bool)((m_nFlags & STYLE_STARTONTHISHF) != 0); +} + +inline sal_uInt16 LwpUseWhen::GetUsePage() +{ + return m_nUsePage; +} + +#endif diff --git a/lotuswordpro/source/filter/lwpusrdicts.cxx b/lotuswordpro/source/filter/lwpusrdicts.cxx new file mode 100644 index 000000000000..37228b1db9e9 --- /dev/null +++ b/lotuswordpro/source/filter/lwpusrdicts.cxx @@ -0,0 +1,85 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#include "lwpusrdicts.hxx" +#include "lwpatomholder.hxx" +LwpUserDictFiles::LwpUserDictFiles(LwpObjectStream *pStrm) +{ + Read(pStrm); +} +/** + * @descr Read UserDictFiles in VO_DOCUMENT + * words are skipped, not parsed yet + **/ +void LwpUserDictFiles::Read(LwpObjectStream *pStrm) +{ + sal_uInt16 cnt; + pStrm->QuickRead(&cnt, sizeof(cnt)); + LwpAtomHolder word; + while(cnt--) + { + word.Read(pStrm); + pStrm->SkipExtra(); + } + pStrm->SkipExtra(); +} diff --git a/lotuswordpro/source/filter/lwpusrdicts.hxx b/lotuswordpro/source/filter/lwpusrdicts.hxx new file mode 100644 index 000000000000..d1076b776232 --- /dev/null +++ b/lotuswordpro/source/filter/lwpusrdicts.hxx @@ -0,0 +1,80 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jan 2005 Created + ************************************************************************/ + +#ifndef _LWPUSERDICTFILES_HXX +#define _LWPUSERDICTFILES_HXX + +#include "lwpheader.hxx" +#include "lwpobjstrm.hxx" +/** + * @brief User defined words used in VO_DOCUMENT +*/ +class LwpUserDictFiles +{ +public: + LwpUserDictFiles(){}; + LwpUserDictFiles(LwpObjectStream *pStrm); + ~LwpUserDictFiles(){}; + void Read(LwpObjectStream *pStrm); +}; +#endif diff --git a/lotuswordpro/source/filter/lwpverdocument.cxx b/lotuswordpro/source/filter/lwpverdocument.cxx new file mode 100644 index 000000000000..3393462b721b --- /dev/null +++ b/lotuswordpro/source/filter/lwpverdocument.cxx @@ -0,0 +1,109 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Versioned Pointer object, used for VO_VEGTR and VO_QTR + * Does not find the difference between CVersionedQointer and + * CVersionedGointer, so use one class + ************************************************************************/ +/************************************************************************* + * Change History +Jun 2005 Created + ************************************************************************/ +#include "lwpglobalmgr.hxx" +#include "lwpverdocument.hxx" +#include "lwplnopts.hxx" +#include "lwpproplist.hxx" +#include "xfilter/xfparastyle.hxx" +#include "lwptools.hxx" + +LwpVerDocument::LwpVerDocument(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpObject(objHdr, pStrm) +{} + +void LwpVerDocument::Read() +{ + m_nTabSpacing = m_pObjStrm->QuickReaduInt32(); + + if (m_pObjStrm->CheckExtra()) + { + LwpLineNumberOptions aLineNumberOptions(m_pObjStrm); + + if (m_pObjStrm->CheckExtra()) + { + LwpPropList aPropList; + aPropList.Read(m_pObjStrm); + m_pObjStrm->SkipExtra(); + } + } +} + +void LwpVerDocument::RegisterStyle() +{ + XFDefaultParaStyle* pDefault = new XFDefaultParaStyle; + double len =(double) m_nTabSpacing/UNITS_PER_INCH*CM_PER_INCH; + if(len < 0.001) + { + len = 1.27; //0.5 inch + } + pDefault->SetTabDistance(len); + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + pXFStyleManager->AddStyle(pDefault); +} + +sal_uInt32 LwpVerDocument::GetTabSpacing() +{ + return m_nTabSpacing; +} diff --git a/lotuswordpro/source/filter/lwpverdocument.hxx b/lotuswordpro/source/filter/lwpverdocument.hxx new file mode 100644 index 000000000000..6d218f9bbd5d --- /dev/null +++ b/lotuswordpro/source/filter/lwpverdocument.hxx @@ -0,0 +1,84 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Versioned Pointer object, used for VO_VEGTR and VO_QTR + * Does not find the difference between CVersionedQointer and + * CVersionedGointer, so use one class + ************************************************************************/ +/************************************************************************* + * Change History +Jun 2005 Created + ************************************************************************/ + +#ifndef _LWPVERDOCUMENT_HXX_ +#define _LWPVERDOCUMENT_HXX_ + +#include "lwpobj.hxx" + +/*VO_VERDOCUMENT*/ + +class LwpVerDocument : public LwpObject +{ +public: + LwpVerDocument(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + ~LwpVerDocument(){}; + void Read(); + virtual void RegisterStyle(); + sal_uInt32 GetTabSpacing(); +private: + sal_uInt32 m_nTabSpacing; +}; +#endif diff --git a/lotuswordpro/source/filter/lwpvpointer.cxx b/lotuswordpro/source/filter/lwpvpointer.cxx new file mode 100644 index 000000000000..6f995c4423ba --- /dev/null +++ b/lotuswordpro/source/filter/lwpvpointer.cxx @@ -0,0 +1,79 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "lwpvpointer.hxx" +#include "lwpfilehdr.hxx" + +LwpVersionedPointer::LwpVersionedPointer(LwpObjectHeader& objHdr, LwpSvStream* pStrm) + : LwpObject(objHdr, pStrm) +{} + +void LwpVersionedPointer::Read() +{ + m_PointerID.ReadIndexed(m_pObjStrm); + if( LwpFileHeader::m_nFileRevision < 0x0006 ) + m_pObjStrm->SkipExtra(); +} +void LwpVersionedPointer::Parse(IXFStream* pOutputStream) +{} + +void LwpVersionedPointer::RegisterStyle() +{ + LwpObject* pObj = m_PointerID.obj(); + if( pObj ) + { + pObj->SetFoundry(m_pFoundry); + pObj->RegisterStyle(); + } +} diff --git a/lotuswordpro/source/filter/lwpvpointer.hxx b/lotuswordpro/source/filter/lwpvpointer.hxx new file mode 100644 index 000000000000..703f36468afa --- /dev/null +++ b/lotuswordpro/source/filter/lwpvpointer.hxx @@ -0,0 +1,82 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Versioned Pointer object, used for VO_VEGTR and VO_QTR + * Does not find the difference between CVersionedQointer and + * CVersionedGointer, so use one class + ************************************************************************/ +/************************************************************************* + * Change History +March 2005 Created + ************************************************************************/ + +#ifndef _LWPVERSIONEDPOINTER_HXX_ +#define _LWPVERSIONEDPOINTER_HXX_ + +#include "lwpobj.hxx" +class LwpVersionedPointer : public LwpObject +{ +public: + LwpVersionedPointer(LwpObjectHeader& objHdr, LwpSvStream* pStrm); + ~LwpVersionedPointer(){}; + void Read(); + void RegisterStyle(); + void Parse(IXFStream* pOutputStream); + LwpObjectID* GetPointer(){return &m_PointerID;}; +protected: + LwpObjectID m_PointerID; +}; +#endif diff --git a/lotuswordpro/source/filter/makefile.mk b/lotuswordpro/source/filter/makefile.mk new file mode 100644 index 000000000000..d8f6d32dea8d --- /dev/null +++ b/lotuswordpro/source/filter/makefile.mk @@ -0,0 +1,110 @@ +PRJ=..$/.. + +PRJNAME=filter +TARGET=filter +ENABLE_EXCEPTIONS=true + +.INCLUDE : settings.mk + +SLOFILES= \ + $(SLO)$/LotusWordProImportFilter.obj \ + $(SLO)$/genericfilter.obj \ + $(SLO)$/lwpfilter.obj \ + $(SLO)$/bencont.obj \ + $(SLO)$/benlist.obj \ + $(SLO)$/benname.obj \ + $(SLO)$/benobj.obj \ + $(SLO)$/benval.obj \ + $(SLO)$/tocread.obj \ + $(SLO)$/utbenvs.obj \ + $(SLO)$/utlist.obj \ + $(SLO)$/lwp9reader.obj \ + $(SLO)$/lwpatomholder.obj \ + $(SLO)$/lwpbasetype.obj \ + $(SLO)$/lwpcolor.obj \ + $(SLO)$/lwpcontent.obj \ + $(SLO)$/lwpdefobj.obj \ + $(SLO)$/lwpdlvlist.obj \ + $(SLO)$/lwpdivinfo.obj \ + $(SLO)$/lwpdivopts.obj \ + $(SLO)$/lwpdoc.obj \ + $(SLO)$/lwpfilehdr.obj \ + $(SLO)$/lwpfont.obj \ + $(SLO)$/lwpfoundry.obj \ + $(SLO)$/lwpfrib.obj \ + $(SLO)$/lwpfribtext.obj \ + $(SLO)$/lwpfribframe.obj \ + $(SLO)$/lwpfribbreaks.obj \ + $(SLO)$/lwpfribsection.obj \ + $(SLO)$/lwpfribptr.obj \ + $(SLO)$/lwpfribtable.obj \ + $(SLO)$/lwpholder.obj \ + $(SLO)$/lwpidxmgr.obj \ + $(SLO)$/lwplayout.obj \ + $(SLO)$/lwplaypiece.obj \ + $(SLO)$/lwplnopts.obj \ + $(SLO)$/lwptablelayout.obj \ + $(SLO)$/lwprowlayout.obj \ + $(SLO)$/lwpcelllayout.obj \ + $(SLO)$/lwpframelayout.obj \ + $(SLO)$/lwppagelayout.obj \ + $(SLO)$/lwpobj.obj \ + $(SLO)$/lwpobjhdr.obj \ + $(SLO)$/lwpobjid.obj \ + $(SLO)$/lwpobjfactory.obj \ + $(SLO)$/lwpobjstrm.obj \ + $(SLO)$/lwppara.obj \ + $(SLO)$/lwppara1.obj \ + $(SLO)$/lwpparastyle.obj \ + $(SLO)$/lwpprtinfo.obj \ + $(SLO)$/lwpborderstuff.obj \ + $(SLO)$/lwpparaborderoverride.obj \ + $(SLO)$/lwpstory.obj \ + $(SLO)$/lwpnumberingoverride.obj \ + $(SLO)$/lwpcharborderoverride.obj \ + $(SLO)$/lwpbreaksoverride.obj \ + $(SLO)$/lwpbackgroundstuff.obj \ + $(SLO)$/lwptabrack.obj \ + $(SLO)$/lwpcharacterstyle.obj \ + $(SLO)$/lwpoverride.obj \ + $(SLO)$/lwpsortopt.obj \ + $(SLO)$/lwpsvstream.obj \ + $(SLO)$/lwptoc.obj \ + $(SLO)$/lwptools.obj \ + $(SLO)$/lwpusrdicts.obj \ + $(SLO)$/lwpuidoc.obj \ + $(SLO)$/lwpdllist.obj \ + $(SLO)$/lwpparaproperty.obj \ + $(SLO)$/lwpsilverbullet.obj \ + $(SLO)$/lwpcharsetmgr.obj \ + $(SLO)$/lwpsection.obj \ + $(SLO)$/lwppagehint.obj \ + $(SLO)$/lwpsdwfileloader.obj \ + $(SLO)$/lwpoleobject.obj \ + $(SLO)$/lwpbulletstylemgr.obj \ + $(SLO)$/lwpsdwgrouploaderv0102.obj \ + $(SLO)$/lwpgrfobj.obj \ + $(SLO)$/lwpdropcapmgr.obj \ + $(SLO)$/lwptblcell.obj \ + $(SLO)$/lwptable.obj \ + $(SLO)$/lwpmarker.obj \ + $(SLO)$/lwpproplist.obj \ + $(SLO)$/lwphyperlinkmgr.obj \ + $(SLO)$/lwpvpointer.obj \ + $(SLO)$/lwpdrawobj.obj \ + $(SLO)$/lwpsdwrect.obj \ + $(SLO)$/lwpfootnote.obj \ + $(SLO)$/lwpfnlayout.obj \ + $(SLO)$/lwpdocdata.obj \ + $(SLO)$/lwpnotes.obj \ + $(SLO)$/lwpverdocument.obj \ + $(SLO)$/localtime.obj \ + $(SLO)$/lwpfribmark.obj \ + $(SLO)$/lwpbookmarkmgr.obj \ + $(SLO)$/lwptblformula.obj\ + $(SLO)$/lwpnumericfmt.obj \ + $(SLO)$/lwpchangemgr.obj \ + $(SLO)$/explode.obj \ + $(SLO)$/lwpglobalmgr.obj + +.INCLUDE : target.mk diff --git a/lotuswordpro/source/filter/schxmlwrapper.cxx b/lotuswordpro/source/filter/schxmlwrapper.cxx new file mode 100644 index 000000000000..e1c5330b8e50 --- /dev/null +++ b/lotuswordpro/source/filter/schxmlwrapper.cxx @@ -0,0 +1,488 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HXX_ +#include <com/sun/star/beans/PropertyAttribute.hpp> +#endif +#ifndef _COM_SUN_STAR_TASK_XSTATUSINDICATORSUPPLIER_HPP_ +#include <com/sun/star/task/XStatusIndicatorSupplier.hpp> +#endif +#ifndef _COM_SUN_STAR_DOCUMENT_XIMPORTER_HPP_ +#include <com/sun/star/document/XImporter.hpp> +#endif +#ifndef _COM_SUN_STAR_DOCUMENT_XFILTER_HPP_ +#include <com/sun/star/document/XFilter.hpp> +#endif +#ifndef _COM_SUN_STAR_DOCUMENT_XExporter_HPP_ +#include <com/sun/star/document/XExporter.hpp> +#endif + +#ifndef _SFXDOCFILE_HXX +#include <sfx2/docfile.hxx> +#endif +#ifndef _SFXECODE_HXX +#include <svtools/sfxecode.hxx> +#endif + +#include "schxmlwrapper.hxx" + +#ifndef _UTL_STREAM_WRAPPER_HXX_ +#include <unotools/streamwrap.hxx> +#endif +#ifndef _XMLGRHLP_HXX +#include <svx/xmlgrhlp.hxx> +#endif +#ifndef _TOOLS_DEBUG_HXX +#include <tools/debug.hxx> +#endif +#ifndef _COMPHELPER_PROCESSFACTORY_HXX_ +#include <comphelper/processfactory.hxx> +#endif + +#ifndef _COMPHELPER_GENERICPROPERTYSET_HXX_ +#include <comphelper/genericpropertyset.hxx> +#endif +#ifndef _COMPHELPER_PROPERTSETINFO_HXX_ +#include <comphelper/propertysetinfo.hxx> +#endif + +#ifndef INCLUDED_SVTOOLS_SAVEOPT_HXX +#include <svtools/saveopt.hxx> +#endif + +#ifndef _COM_SUN_STAR_XML_SAX_XERRORHANDLER_HPP_ +#include <com/sun/star/xml/sax/XErrorHandler.hpp> +#endif +#ifndef _COM_SUN_STAR_XML_SAX_XENTITYRESOLVER_HPP_ +#include <com/sun/star/xml/sax/XEntityResolver.hpp> +#endif +#ifndef _COM_SUN_STAR_XML_SAX_INPUTSOURCE_HPP_ +#include <com/sun/star/xml/sax/InputSource.hpp> +#endif +#ifndef _COM_SUN_STAR_XML_SAX_XDTDHANDLER_HPP_ +#include <com/sun/star/xml/sax/XDTDHandler.hpp> +#endif +#ifndef _COM_SUN_STAR_XML_SAX_XPARSER_HPP_ +#include <com/sun/star/xml/sax/XParser.hpp> +#endif +#ifndef _COM_SUN_STAR_IO_XACTIVEDATASOURCE_HPP_ +#include <com/sun/star/io/XActiveDataSource.hpp> +#endif +#ifndef _COM_SUN_STAR_IO_XACTIVEDATACONTROL_HPP_ +#include <com/sun/star/io/XActiveDataControl.hpp> +#endif +#ifndef _COM_SUN_STAR_LANG_XMULTISERVICEFACTORY_HPP_ +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#endif +#ifndef _COM_SUN_STAR_XML_SAX_SAXPARSEEXCEPTION_HPP_ +#include <com/sun/star/xml/sax/SAXParseException.hpp> +#endif +#ifndef _COM_SUN_STAR_PACKAGES_ZIP_ZIPIOEXCEPTION_HPP_ +#include <com/sun/star/packages/zip/ZipIOException.hpp> +#endif + +#define XML_STRING(i, x) sal_Char __READONLY_DATA i[sizeof(x)] = x +#define MAP_LEN(x) x, sizeof(x) - 1 + +XML_STRING( sXML_metaStreamName, "meta.xml"); +XML_STRING( sXML_styleStreamName, "styles.xml" ); +XML_STRING( sXML_contentStreamName, "content.xml" ); +XML_STRING( sXML_oldContentStreamName, "Content.xml" ); + +XML_STRING( sXML_export_chart_meta_service, "com.sun.star.comp.Chart.XMLMetaExporter" ); +XML_STRING( sXML_export_chart_styles_service, "com.sun.star.comp.Chart.XMLStylesExporter" ); +XML_STRING( sXML_export_chart_content_service, "com.sun.star.comp.Chart.XMLContentExporter" ); +XML_STRING( sXML_export_chart_old_content_service, "com.sun.star.office.sax.exporter.Chart" ); + +XML_STRING( sXML_export_chart_allinone_service, "com.sun.star.comp.Chart.XMLExporter" ); + + + +XML_STRING( sXML_import_chart_meta_service, "com.sun.star.comp.Chart.XMLMetaImporter" ); +XML_STRING( sXML_import_chart_styles_service, "com.sun.star.comp.Chart.XMLStylesImporter" ); +XML_STRING( sXML_import_chart_content_service, "com.sun.star.comp.Chart.XMLContentImporter" ); +XML_STRING( sXML_import_chart_old_content_service, "com.sun.star.office.sax.importer.Chart" ); + +using namespace ::com::sun::star; +using namespace ::rtl; +using namespace comphelper; + +SchXMLWrapper::SchXMLWrapper( uno::Reference< frame::XModel >& xModel, + SvStorage& rStorage, + sal_Bool bShowProgress ) : + mxModel( xModel ), + mrStorage( rStorage ), + mbShowProgress( bShowProgress ) +{} + + +sal_Int32 SchXMLWrapper::ImportStream( + const ::rtl::OUString& rsStreamName, + const ::rtl::OUString& rsServiceName, + uno::Reference< xml::sax::XParser >& xParser, + uno::Reference< lang::XMultiServiceFactory >& xServiceFactory, + uno::Reference< document::XGraphicObjectResolver >& xGraphObjResolver ) +{ + xml::sax::InputSource aParserInput; + SvStorageStreamRef rInpStream; + uno::Reference< io::XActiveDataSource > xSource; + sal_Bool bEncrypted = sal_False; + + try + { + String sStreamName( rsStreamName ); + if( ! mrStorage.IsStream( String( rsStreamName ))) + return sal_False; + + rInpStream = mrStorage.OpenStream( sStreamName, STREAM_READ | STREAM_NOCREATE ); + if( ! rInpStream.Is()) + return sal_False; + + uno::Any aAny; + bEncrypted = rInpStream->GetProperty( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Encrypted" )), aAny ) + && aAny.getValueType() == ::getBooleanCppuType() + && *(sal_Bool *)aAny.getValue(); + + aParserInput.aInputStream = rInpStream->GetXInputStream(); + + if( aParserInput.aInputStream.is() ) + { + sal_Int32 nArgs = 0; + if( mxStatusIndicator.is()) + nArgs++; + if( xGraphObjResolver.is()) + nArgs++; + + uno::Sequence< uno::Any > aArgs( nArgs ); + + nArgs = 0; + if( mxStatusIndicator.is()) + aArgs[ nArgs++ ] <<= mxStatusIndicator; + + if( xGraphObjResolver.is()) + aArgs[ nArgs++ ] <<= xGraphObjResolver; + + uno::Reference< xml::sax::XDocumentHandler > xDocHandler( + xServiceFactory->createInstanceWithArguments( rsServiceName, aArgs ), + uno::UNO_QUERY ); + + if( xDocHandler.is() ) + { + uno::Reference< document::XImporter > xImporter( xDocHandler, uno::UNO_QUERY ); + uno::Reference< lang::XComponent > xComponent( mxModel, uno::UNO_QUERY ); + + if( xImporter.is() ) + { + xImporter->setTargetDocument( xComponent ); + xParser->setDocumentHandler( xDocHandler ); + + xParser->parseStream( aParserInput ); + } + } + } + } + catch( xml::sax::SAXParseException&) + { + if( bEncrypted ) + return ERRCODE_SFX_WRONGPASSWORD; + return ERRCODE_SFX_GENERAL; + } + catch( xml::sax::SAXException&) + { + if( bEncrypted ) + return ERRCODE_SFX_WRONGPASSWORD; + return ERRCODE_SFX_GENERAL; + } + catch( io::IOException&) + { + return ERRCODE_SFX_GENERAL; + } + catch( packages::zip::ZipIOException& ) + { + return ERRCODE_IO_BROKENPACKAGE; + } + catch( uno::Exception&) + { + return ERRCODE_SFX_GENERAL; + } + + return 0; +} + +sal_Int32 SchXMLWrapper::Import() +{ + sal_Int32 nWarning = 0; + + if( !mxModel.is() ) + { + DBG_ERROR("Got NO Model in XMLImport"); + return sal_False; + } + + uno::Reference<lang::XServiceInfo> xServiceInfo( mxModel, uno::UNO_QUERY ); + + if( !xServiceInfo.is() || !xServiceInfo->supportsService( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.chart.ChartDocument" ) ) ) ) + { + DBG_ERROR( "Model is no ChartDocument in XMLImport" ); + return sal_False; + } + + uno::Reference< lang::XMultiServiceFactory> xServiceFactory( ::comphelper::getProcessServiceFactory() ); + + if( !xServiceFactory.is() ) + { + DBG_ERROR( "XMLReader::Read: got no service manager" ); + return sal_False; + } + + // get the sax parser component + uno::Reference< xml::sax::XParser > xXMLParser( + xServiceFactory->createInstance( ::rtl::OUString::createFromAscii( "com.sun.star.xml.sax.Parser" )), + uno::UNO_QUERY ); + + if( ! xXMLParser.is() ) + { + DBG_ERROR( "com.sun.star.xml.sax.Parser service missing" ); + return sal_False; + } + + // create graphics resolver component + SvXMLGraphicHelper* pGraphicHelper = SvXMLGraphicHelper::Create( mrStorage, GRAPHICHELPER_MODE_READ ); + uno::Reference< document::XGraphicObjectResolver > xGraphObjResolver = pGraphicHelper; + + // import meta information + ImportStream( + ::rtl::OUString::createFromAscii( sXML_metaStreamName ), + ::rtl::OUString::createFromAscii( sXML_import_chart_meta_service ), + xXMLParser, xServiceFactory, xGraphObjResolver ); + + // import styles + ImportStream( + ::rtl::OUString::createFromAscii( sXML_styleStreamName ), + ::rtl::OUString::createFromAscii( sXML_import_chart_styles_service ), + xXMLParser, xServiceFactory, xGraphObjResolver ); + + // import content + nWarning = ImportStream( + ::rtl::OUString::createFromAscii( sXML_contentStreamName ), + ::rtl::OUString::createFromAscii( sXML_import_chart_content_service ), + xXMLParser, xServiceFactory, xGraphObjResolver ); + + // import of "content.xml" didn't work - try old "Content.xml" stream + if( nWarning != 0 ) + { + nWarning = ImportStream( + ::rtl::OUString::createFromAscii( sXML_oldContentStreamName ), + ::rtl::OUString::createFromAscii( sXML_import_chart_old_content_service ), + xXMLParser, xServiceFactory, xGraphObjResolver ); + } + + // graphics resolver has to be destroyed this way! + SvXMLGraphicHelper::Destroy( pGraphicHelper ); + + return nWarning; +} + +// ----------------------------------------------------------------------------- + +sal_Bool SchXMLWrapper::ExportStream( + const ::rtl::OUString& rsStreamName, + const ::rtl::OUString& rsServiceName, + uno::Reference< io::XActiveDataSource >& xDataSource, + uno::Reference< lang::XMultiServiceFactory>& xServiceFactory, + uno::Sequence< uno::Any >& aArgs ) +{ + sal_Bool bRet = sal_False; + + try + { + // create output stream + SvStorageStreamRef rOutputStream( mrStorage.OpenStream( + String( rsStreamName ), STREAM_WRITE | STREAM_SHARE_DENYWRITE | STREAM_TRUNC )); + + rtl::OUString sMIMEType( RTL_CONSTASCII_USTRINGPARAM( "text/xml" ) ); + uno::Any aAny; + aAny <<= sMIMEType; + rOutputStream->SetProperty( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "MediaType" )), aAny ); + + // "Encrypted" means "Encryptable". Has to be set for all but the meta stream (which doesn't exist in charts) + aAny <<= (sal_Bool)(sal_True); + rOutputStream->SetProperty( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Encrypted" )), aAny ); + + rOutputStream->SetBufferSize( 0x4000 ); // 16*1024 + + if( xDataSource.is()) + xDataSource->setOutputStream( new ::utl::OOutputStreamWrapper( *rOutputStream )); + + uno::Reference< document::XFilter > xFilter( + xServiceFactory->createInstanceWithArguments( rsServiceName, aArgs ), + uno::UNO_QUERY ); + + if( xFilter.is()) + { + uno::Reference< document::XExporter > xExporter( xFilter, uno::UNO_QUERY ); + if( xExporter.is()) + { + uno::Reference< lang::XComponent > xModelComponent( mxModel, uno::UNO_QUERY ); + xExporter->setSourceDocument( xModelComponent ); + } + + // empty Descriptior (formerly FileName was given) + uno::Sequence< beans::PropertyValue > aEmptyDescriptor( 0 ); + bRet = xFilter->filter( aEmptyDescriptor ); + + if( bRet && rOutputStream.Is()) + rOutputStream->Commit(); + } + } + catch( uno::Exception ) + { + } + + return bRet; +} + +sal_Bool SchXMLWrapper::Export() +{ + sal_Bool bRet = sal_False; + + try + { + if( !mxModel.is() ) + { + DBG_ERROR("Got NO Model in XMLExport"); + return sal_False; + } + + uno::Reference< lang::XServiceInfo > xServiceInfo( mxModel, uno::UNO_QUERY ); + + if( ! xServiceInfo.is() || !xServiceInfo->supportsService( + OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.chart.ChartDocument" ) ) ) ) + { + DBG_ERROR( "Model is no ChartDocument in XMLExport" ); + return sal_False; + } + + uno::Reference< lang::XMultiServiceFactory> xServiceFactory( ::comphelper::getProcessServiceFactory() ); + + if( !xServiceFactory.is() ) + { + DBG_ERROR( "got no service manager" ); + return sal_False; + } + + uno::Reference< uno::XInterface > xWriter( xServiceFactory->createInstance( + OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.xml.sax.Writer" ) ) ) ); + + if( !xWriter.is() ) + { + DBG_ERROR( "com.sun.star.xml.sax.Writer service missing" ); + return sal_False; + } + uno::Reference<xml::sax::XDocumentHandler > xHandler( xWriter, uno::UNO_QUERY ); + uno::Sequence< beans::PropertyValue > aEmptyDescriptor( 0 ); + + + /** property map for export info set */ + PropertyMapEntry aExportInfoMap[] = + { + { MAP_LEN( "UsePrettyPrinting"),0, &::getBooleanCppuType(), ::com::sun::star::beans::PropertyAttribute::MAYBEVOID, 0}, + { NULL, 0, 0, NULL, 0, 0 } + }; + + uno::Reference< beans::XPropertySet > xInfoSet( GenericPropertySet_CreateInstance( new PropertySetInfo( aExportInfoMap ) ) ); + + SvtSaveOptions aSaveOpt; + OUString sUsePrettyPrinting(RTL_CONSTASCII_USTRINGPARAM("UsePrettyPrinting")); + sal_Bool bUsePrettyPrinting( aSaveOpt.IsPrettyPrinting() ); + xInfoSet->setPropertyValue( sUsePrettyPrinting, uno::makeAny( bUsePrettyPrinting ) ); + + + SvXMLGraphicHelper* pGraphicHelper = SvXMLGraphicHelper::Create( mrStorage, GRAPHICHELPER_MODE_WRITE, sal_False ); + uno::Reference< document::XGraphicObjectResolver > xGraphObjResolver( pGraphicHelper ); + uno::Reference< io::XActiveDataSource > xDataSource( xWriter, uno::UNO_QUERY ); + + sal_Int32 nArgs = 2; + if( mxStatusIndicator.is()) + nArgs++; + if( xGraphObjResolver.is()) + nArgs++; + + uno::Sequence< uno::Any > aArgs( nArgs ); + + nArgs = 0; + aArgs[ nArgs++ ] <<= xHandler; + aArgs[ nArgs++ ] <<= xInfoSet; + + if( mxStatusIndicator.is()) + aArgs[ nArgs++ ] <<= mxStatusIndicator; + if( xGraphObjResolver.is()) + aArgs[ nArgs++ ] <<= xGraphObjResolver; + + //export to one stream + bRet = ExportStream( + ::rtl::OUString::createFromAscii( sXML_contentStreamName ), + ::rtl::OUString::createFromAscii( sXML_export_chart_allinone_service ), + xDataSource, xServiceFactory, aArgs ); + + // graphics resolver has to be destroyed this way! + SvXMLGraphicHelper::Destroy( pGraphicHelper ); + } + catch( uno::Exception) + { + } + + return bRet; +} diff --git a/lotuswordpro/source/filter/schxmlwrapper.hxx b/lotuswordpro/source/filter/schxmlwrapper.hxx new file mode 100644 index 000000000000..751f26298fd6 --- /dev/null +++ b/lotuswordpro/source/filter/schxmlwrapper.hxx @@ -0,0 +1,118 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _SCH_XMLWRP_HXX_ +#define _SCH_XMLWRP_HXX_ + +#ifndef _SVSTOR_HXX +#include <so3/svstor.hxx> +#endif + +namespace com { namespace sun { namespace star { + namespace xml { + namespace sax { + class XParser; + } + } + namespace document { + class XGraphicObjectResolver; + } + namespace frame { + class XModel; + } + namespace task { + class XStatusIndicator; + } + namespace lang { + class XMultiServiceFactory; + } + namespace io { + class XActiveDataSource; + } +}}} + +class SchXMLWrapper +{ + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > mxModel; + ::com::sun::star::uno::Reference< ::com::sun::star::task::XStatusIndicator > mxStatusIndicator; + SvStorage& mrStorage; + + sal_Bool mbIsDraw : 1; + sal_Bool mbShowProgress : 1; + + sal_Int32 ImportStream( + const ::rtl::OUString& rsStreamName, + const ::rtl::OUString& rsServiceName, + ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XParser >& xParser, + ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& xServiceFactory, + ::com::sun::star::uno::Reference< ::com::sun::star::document::XGraphicObjectResolver >& xGraphObjResolver ); + + sal_Bool ExportStream( + const ::rtl::OUString& rsStreamName, + const ::rtl::OUString& rsServiceName, + ::com::sun::star::uno::Reference< ::com::sun::star::io::XActiveDataSource >& xDataSource, + ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& xServiceFactory, + ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArgs ); + +public: + SchXMLWrapper( ::com::sun::star::uno::Reference< com::sun::star::frame::XModel >& xModel, + SvStorage& rStorage, + sal_Bool bShowProgress = TRUE ); + + sal_Int32 Import(); + sal_Bool Export(); +}; + +#endif // _SCH_XMLWRP_HXX_ diff --git a/lotuswordpro/source/filter/tocread.cxx b/lotuswordpro/source/filter/tocread.cxx new file mode 100644 index 000000000000..a324a4ed3de1 --- /dev/null +++ b/lotuswordpro/source/filter/tocread.cxx @@ -0,0 +1,516 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "first.hxx" +#include "assert.h" +namespace OpenStormBento +{ + +BenError +CBenTOCReader::ReadLabelAndTOC() +{ + BenError Err; + + unsigned long TOCOffset; + if ((Err = ReadLabel(&TOCOffset, &cTOCSize)) != BenErr_OK) + return Err; + + if ((Err = cpContainer->SeekToPosition(TOCOffset)) != BenErr_OK) + return Err; + + cpTOC = new BenByte[cTOCSize]; + if ((Err = cpContainer->ReadKnownSize(cpTOC, cTOCSize)) != BenErr_OK) + return Err; + + if ((Err = ReadTOC()) != BenErr_OK) + return Err; + + return BenErr_OK; +} + +BenError +CBenTOCReader::ReadLabel(unsigned long * pTOCOffset, unsigned long * pTOCSize) +{ + // If seek fails, then probably because stream is smaller than + // BEN_LABEL_SIZE and thus can't be Bento container + BenError Err; + if ((Err = cpContainer->SeekFromEnd(-BEN_LABEL_SIZE)) != BenErr_OK) + return BenErr_NotBentoContainer; + + BenByte Label[BEN_LABEL_SIZE]; + if ((Err = cpContainer->ReadKnownSize(Label, BEN_LABEL_SIZE)) != BenErr_OK) + return Err; + + if (memcmp(Label, gsBenMagicBytes, BEN_MAGIC_BYTES_SIZE) != 0) + if ((Err = SearchForLabel(Label)) != BenErr_OK) + return Err; + + BenByte * pCurrLabel = Label + BEN_MAGIC_BYTES_SIZE; + + BenWord Flags = UtGetIntelWord(pCurrLabel); pCurrLabel += 2; // Flags + // Newer files are 0x0101--indicates if big or little endian. Older + // files are 0x0 for flags + assert(Flags == 0x0101 || Flags == 0x0); + + cBlockSize = UtGetIntelWord(pCurrLabel) * 1024; pCurrLabel += 2; + + // Check major version + if (UtGetIntelWord(pCurrLabel) != BEN_CURR_MAJOR_VERSION) + return BenErr_UnknownBentoFormatVersion; + pCurrLabel += 2; + + UtGetIntelWord(pCurrLabel); pCurrLabel += 2; // Minor version + + *pTOCOffset = UtGetIntelDWord(pCurrLabel); pCurrLabel += 4; + *pTOCSize = UtGetIntelDWord(pCurrLabel); + + assert(pCurrLabel + 4 == Label + BEN_LABEL_SIZE); + + return BenErr_OK; +} + +#define LABEL_READ_BUFFER_SIZE 500 +#define MAX_SEARCH_AMOUNT 1024 * 1024 + +BenError +CBenTOCReader::SearchForLabel(BenByte * pLabel) +{ + BenError Err; + + unsigned long Length; + if ((Err = cpContainer->GetSize(&Length)) != BenErr_OK) + return Err; + + // Always ready to check for MagicBytes from + // CurrOffset - BEN_MAGIC_BYTES_SIZE to CurrOffset - 1 + unsigned long CurrOffset = Length - BEN_LABEL_SIZE + BEN_MAGIC_BYTES_SIZE - + 1; + + char Buffer[LABEL_READ_BUFFER_SIZE]; + + unsigned long BufferStartOffset = Length; // Init to big value + + while (CurrOffset >= BEN_MAGIC_BYTES_SIZE) + { + // Don't search backwards more than 1 meg + if (Length - CurrOffset > MAX_SEARCH_AMOUNT) + break; + + unsigned long UsedBufferSize; + + // If before beginning of buffer + if (CurrOffset - BEN_MAGIC_BYTES_SIZE < BufferStartOffset) + { + if (CurrOffset < LABEL_READ_BUFFER_SIZE) + UsedBufferSize = CurrOffset; + else UsedBufferSize = LABEL_READ_BUFFER_SIZE; + + if ((Err = cpContainer->SeekToPosition(CurrOffset - UsedBufferSize)) + != BenErr_OK) + return Err; + + if ((Err = cpContainer->ReadKnownSize(Buffer, UsedBufferSize)) != + BenErr_OK) + return Err; + + BufferStartOffset = CurrOffset - UsedBufferSize; + } + + if (memcmp(Buffer + (CurrOffset - BEN_MAGIC_BYTES_SIZE - + BufferStartOffset), gsBenMagicBytes, BEN_MAGIC_BYTES_SIZE) == 0) + { + if ((Err = cpContainer->SeekToPosition(CurrOffset - + BEN_MAGIC_BYTES_SIZE)) != BenErr_OK) + return Err; + + return cpContainer->ReadKnownSize(pLabel, BEN_LABEL_SIZE); + } + + --CurrOffset; + } + + return BenErr_NotBentoContainer; // Didn't find magic bytes +} + +BenError +CBenTOCReader::ReadTOC() +{ + BenError Err; + BenByte LookAhead = GetCode(); + BenGeneration Generation = 0; + + // Read in all objects + while (LookAhead == BEN_NEW_OBJECT) + { + BenObjectID ObjectID; + if ((Err = GetDWord(&ObjectID)) != BenErr_OK) + return Err; + pCBenObject pObject = NULL; + + // Read in all properties for object + do + { + BenObjectID PropertyID; + + if ((Err = GetDWord(&PropertyID)) != BenErr_OK) + return Err; + pCBenProperty pProperty = NULL; + + // Read in all values for property + do + { + BenObjectID ReferencedListID = 0; + + BenObjectID TypeID; + if ((Err = GetDWord(&TypeID)) != BenErr_OK) + return Err; + LookAhead = GetCode(); + + if (LookAhead == BEN_EXPLICIT_GEN) + { + if ((Err = GetDWord(&Generation)) != BenErr_OK) + return Err; + LookAhead = GetCode(); + } + + if (LookAhead == BEN_REFERENCE_LIST_ID) + { + // Eat it, unless BENUTIL_SUPPORT turned on + if ((Err = GetDWord(&ReferencedListID)) != BenErr_OK) + return Err; + LookAhead = GetCode(); + } + + if (PropertyID == BEN_PROPID_GLOBAL_PROPERTY_NAME || + PropertyID == BEN_PROPID_GLOBAL_TYPE_NAME) + { + // Read property or type name + + if (pObject != NULL || TypeID != BEN_TYPEID_7_BIT_ASCII || + LookAhead != BEN_OFFSET4_LEN4) + return BenErr_NamedObjectError; + + BenContainerPos Pos; + unsigned long Length; + + if ((Err = GetDWord(&Pos)) != BenErr_OK) + return Err; + if ((Err = GetDWord(&Length)) != BenErr_OK) + return Err; + LookAhead = GetCode(); + + if ((Err = cpContainer->SeekToPosition(Pos)) != BenErr_OK) + return Err; + + #define STACK_BUFFER_SIZE 256 + char sStackBuffer[STACK_BUFFER_SIZE]; + char * sAllocBuffer; + char * sBuffer; + if (Length > STACK_BUFFER_SIZE) + { + sBuffer = new char[Length]; + sAllocBuffer = sBuffer; + } + else + { + sBuffer = sStackBuffer; + sAllocBuffer = NULL; + } + + if ((Err = cpContainer->ReadKnownSize(sBuffer, Length)) != + BenErr_OK) + { + delete[] sAllocBuffer; + return Err; + } + + pCBenNamedObjectListElmt pPrevNamedObjectListElmt; + if (FindNamedObject(cpContainer->GetNamedObjects(), + sBuffer, &pPrevNamedObjectListElmt) != NULL) + { + delete[] sAllocBuffer; + return BenErr_DuplicateName; + } + + pCBenObject pPrevObject = (pCBenObject) cpContainer-> + GetObjects()->GetLast(); + + if (PropertyID == BEN_PROPID_GLOBAL_PROPERTY_NAME) + pObject = new CBenPropertyName(cpContainer, ObjectID, + pPrevObject, sBuffer, pPrevNamedObjectListElmt); + else pObject = new CBenTypeName(cpContainer, ObjectID, + pPrevObject, sBuffer, pPrevNamedObjectListElmt); + + delete[] sAllocBuffer; + } + // If BENUTIL_SUPPORT turned on, read in references object + // like regular object +#ifndef BENUTIL_SUPPORT + else if (PropertyID == BEN_PROPID_OBJ_REFERENCES) + { + // Don't need to read in references object--we assume + // that all references use object ID as key + if ((Err = ReadSegments(NULL, &LookAhead)) != BenErr_OK) + return Err; + } +#endif + else if (ObjectID == BEN_OBJID_TOC) + { + if (PropertyID == BEN_PROPID_TOC_SEED) + { + if (TypeID != BEN_TYPEID_TOC_TYPE || + LookAhead != BEN_IMMEDIATE4) + return BenErr_TOCSeedError; + + BenDWord Data; + if ((Err = GetDWord(&Data)) != BenErr_OK) + return Err; + LookAhead = GetCode(); + + cpContainer->SetNextAvailObjectID(Data); + } + else + { + // Ignore the other BEN_OBJID_TOC properties + if ((Err = ReadSegments(NULL, &LookAhead)) != BenErr_OK) + return Err; + } + } + else + { + if (pProperty != NULL) + return BenErr_PropertyWithMoreThanOneValue; + + if (pObject == NULL) + pObject = new CBenObject(cpContainer, ObjectID, + (pCBenObject) cpContainer->GetObjects()->GetLast()); + + pProperty = new CBenProperty(pObject, PropertyID, TypeID, + (pCBenProperty) pObject->GetProperties()->GetLast()); + +#ifdef BENUTIL_SUPPORT + pProperty->UseValue()-> + SetReferencedListObjectID(ReferencedListID); +#endif + + if ((Err = ReadSegments(pProperty->UseValue(), + &LookAhead)) != BenErr_OK) + return Err; + } + } while (LookAhead == BEN_NEW_TYPE); + } while (LookAhead == BEN_NEW_PROPERTY); + } + + if (LookAhead == BEN_READ_PAST_END_OF_TOC) + return BenErr_OK; + else return BenErr_InvalidTOC; +} + +BenError +CBenTOCReader::ReadSegments(pCBenValue pValue, BenByte * pLookAhead) +{ + BenError Err; + + while (*pLookAhead >= BEN_SEGMENT_CODE_START && + *pLookAhead <= BEN_SEGMENT_CODE_END) + { + if ((Err = ReadSegment(pValue, pLookAhead)) != + BenErr_OK) + return Err; + } + + return BenErr_OK; +} + +BenError +CBenTOCReader::ReadSegment(pCBenValue pValue, BenByte * pLookAhead) +{ + BenError Err; + + UtBool Immediate = UT_FALSE; + UtBool EightByteOffset = UT_FALSE; + unsigned long Offset, Length; + + switch (*pLookAhead) + { + case BEN_CONT_OFFSET4_LEN4: + case BEN_OFFSET4_LEN4: + if ((Err = GetDWord(&Offset)) != BenErr_OK) + return Err; + if ((Err = GetDWord(&Length)) != BenErr_OK) + return Err; + break; + + case BEN_IMMEDIATE0: + Length = 0; Immediate = UT_TRUE; + break; + + case BEN_IMMEDIATE1: + Length = 1; Immediate = UT_TRUE; + break; + + case BEN_IMMEDIATE2: + Length = 2; Immediate = UT_TRUE; + break; + + case BEN_IMMEDIATE3: + Length = 3; Immediate = UT_TRUE; + break; + + case BEN_CONT_IMMEDIATE4: + case BEN_IMMEDIATE4: + Length = 4; Immediate = UT_TRUE; + break; + + case BEN_CONT_OFFSET8_LEN4: + case BEN_OFFSET8_LEN4: + EightByteOffset = UT_TRUE; + break; + + default: + return BenErr_OK; + } + + BenByte ImmData[4]; + if (Immediate && Length != 0) + if ((Err = GetData(ImmData, 4)) != BenErr_OK) + return Err; + + *pLookAhead = GetCode(); + + if (EightByteOffset) + return BenErr_64BitOffsetNotSupported; + + if (pValue != NULL) + { + if (! Immediate) + new CBenValueSegment(pValue, Offset, Length); + else if (Length != 0) + { + assert(Length <= 4); + new CBenValueSegment(pValue, ImmData, (unsigned short) Length); + } + } + + return BenErr_OK; +} + +UtBool +CBenTOCReader::CanGetData(unsigned long Amt) +{ + return cCurr + Amt <= cTOCSize; +} + +BenError +CBenTOCReader::GetByte(BenByte * pByte) +{ + if (! CanGetData(1)) + return BenErr_ReadPastEndOfTOC; + + *pByte = UtGetIntelByte(cpTOC + cCurr); + ++cCurr; + return BenErr_OK; +} + +BenError +CBenTOCReader::GetWord(BenWord * pWord) +{ + if (! CanGetData(2)) + return BenErr_ReadPastEndOfTOC; + + *pWord = UtGetIntelWord(cpTOC + cCurr); + cCurr += 2; + return BenErr_OK; +} + +BenError +CBenTOCReader::GetDWord(BenDWord * pDWord) +{ + if (! CanGetData(4)) + return BenErr_ReadPastEndOfTOC; + + *pDWord = UtGetIntelDWord(cpTOC + cCurr); + cCurr += 4; + return BenErr_OK; +} + +BenByte +CBenTOCReader::GetCode() +{ + BenByte Code; + do + { + if (GetByte(&Code) != BenErr_OK) + return BEN_READ_PAST_END_OF_TOC; + + if (Code == BEN_END_OF_BUFFER) + // Advance to next block + cCurr = cBlockSize * ((cCurr + (cBlockSize - 1)) / + cBlockSize); + } + while (Code == BEN_NOOP || Code == BEN_END_OF_BUFFER); + return Code; +} + +BenError +CBenTOCReader::GetData(BenDataPtr pBuffer, unsigned long Amt) +{ + if (! CanGetData(Amt)) + return BenErr_ReadPastEndOfTOC; + + UtHugeMemcpy(pBuffer, cpTOC + cCurr, Amt); + cCurr += Amt; + return BenErr_OK; +} +}//end OpenStormBento namespace diff --git a/lotuswordpro/source/filter/tocread.hxx b/lotuswordpro/source/filter/tocread.hxx new file mode 100644 index 000000000000..be03f6fcb6b8 --- /dev/null +++ b/lotuswordpro/source/filter/tocread.hxx @@ -0,0 +1,89 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef TOCREAD_H +#define TOCREAD_H +namespace OpenStormBento +{ + +class CBenTOCReader +{ +public: // Methods + CBenTOCReader(pLtcBenContainer pContainer) + { cpContainer = pContainer; cpTOC = NULL; cCurr = 0; } + ~CBenTOCReader() { delete cpTOC; } + BenError ReadLabelAndTOC(); + +private: // Methods + BenError ReadLabel(unsigned long * pTOCOffset, unsigned long * pTOCSize); + BenError SearchForLabel(BenByte * pLabel); + BenError ReadTOC(); + BenError ReadSegments(pCBenValue pValue, BenByte * pLookAhead); + BenError ReadSegment(pCBenValue pValue, BenByte * pLookAhead); + UtBool CanGetData(unsigned long Amt); + BenError GetByte(BenByte * pByte); + BenError GetWord(BenWord * pWord); + BenError GetDWord(BenDWord * pDWord); + BenByte GetCode(); + BenError GetData(BenDataPtr pBuffer, unsigned long Amt); + +private: // Data + pLtcBenContainer cpContainer; + BenByteDataPtr cpTOC; + unsigned long cBlockSize; + unsigned long cCurr; + unsigned long cTOCSize; +}; +}//end namespace OpenStormBento +#endif diff --git a/lotuswordpro/source/filter/ut.hxx b/lotuswordpro/source/filter/ut.hxx new file mode 100644 index 000000000000..62f5c9233aa0 --- /dev/null +++ b/lotuswordpro/source/filter/ut.hxx @@ -0,0 +1,101 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef UT_HXX +#define UT_HXX +# include <sal/types.h> + +namespace OpenStormBento +{ + +#define UtMin(x,y) ((x) < (y) ? (x) : (y)) +#define UtMax(x,y) ((x) > (y) ? (x) : (y)) + +#define UtHugeMemcpy memcpy + +#define UtErr_OK 0 +#define UtErr_Fail 1 + +#define UT_TRUE sal_True +#define UT_FALSE sal_False + +#define UtByte sal_uInt8 +#define UtDWord sal_uInt32 +#define UtWord sal_uInt16 +#define UtBool sal_Int32 + +#define UtDefClassP(Name) class Name; typedef Name * p##Name; \ + typedef const Name * pConst##Name + +inline UtWord UtGetIntelWord(UtByte * pData) +{ return * (UtWord *) pData; } + +inline UtDWord UtGetIntelDWord(UtByte * pData) +{ return * (UtDWord *) pData; } + +inline void UtPutIntelWord(UtByte * pData, UtWord Val) +{ * (UtWord *) pData = Val; } + +inline void UtPutIntelDWord(UtByte * pData, UtDWord Val) +{ * (UtDWord *) pData = Val; } + +inline UtByte UtGetIntelByte(UtByte * pData) +{ return * pData; } + +inline void UtPutIntelByte(UtByte * pData, UtByte Val) + +{ * pData = Val; } + +} +#endif diff --git a/lotuswordpro/source/filter/utbenvs.cxx b/lotuswordpro/source/filter/utbenvs.cxx new file mode 100644 index 000000000000..c8fb0cffb281 --- /dev/null +++ b/lotuswordpro/source/filter/utbenvs.cxx @@ -0,0 +1,288 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "first.hxx" +#include <assert.h> +namespace OpenStormBento +{ +/* + * useless in SODC +void LtcUtBenValueStream::GetAmountLeft(ULONG * pAmtLeft) +{ + if (cCurrentPosition >= m_ulValueLength) + { + *pAmtLeft = 0; + } + else + { + *pAmtLeft = m_ulValueLength - cCurrentPosition; + } +} +*/ +/** +* Value stream read function +* @date 07/05/2004 +* @param data pointer of bytes read +* @param number of bytes to be read +* @return number of bytes read +*/ +ULONG LtcUtBenValueStream::GetData( void* pData, ULONG nSize ) +{ + //unsigned long AmtLeft; + ULONG AmtRead; + //GetAmountLeft(&AmtLeft); + + //unsigned long AmtShouldRead = UtMin(nSize, AmtLeft); + BenError Err = cpValue->ReadValueData(pData, cCurrentPosition, nSize, + &AmtRead); + cCurrentPosition += AmtRead; + + return AmtRead; +} + /** +* Value stream write function, not suppoted now +* @date 07/05/2004 +* @param pointer of saved buffer +* @param size of buffer to be written +* @return number of bytes written into value stream +*/ +ULONG LtcUtBenValueStream::PutData( const void* pData, ULONG nSize ) +{ + /* Because we only support IMPORT filter, PutData implementation is ignored + It won't bring negative influence to read-only stream object */ + assert(false); + return nSize; +} +/** +* Seek function of value stream +* @date 07/05/2004 +* @param position in value stream +* @return current position in value stream +*/ + ULONG LtcUtBenValueStream::SeekPos( ULONG nPos ) +{ + if (nPos <= m_ulValueLength) + cCurrentPosition = nPos; + else + cCurrentPosition = m_ulValueLength; + return cCurrentPosition; +} +/** +* Set buffer size function +* @date 07/05/2004 +* @param size of buffer +* @return +*/ + void LtcUtBenValueStream::SetSize( ULONG nSize ) +{ + pLtcBenContainer pContainer = cpValue->GetContainer(); + //pContainer->GetStream()->SetStreamSize(nSize); + + return; +} +/** +* Flush data funciton, not supported now +* @date 07/05/2004 +* @param +* @return +*/ +void LtcUtBenValueStream::FlushData() +{ + /* Because we only support IMPORT filter, FlushData implementation is ignored + It won't bring negative influence to read-only stream object + pLtcBenContainer pContainer = cpValue->GetContainer(); + pContainer->GetStream()->Flush();*/ + assert(false); + return; +} +/** +* Construction +* @date 07/05/2004 +* @param pointer to CBenValue object +* @return +*/ +LtcUtBenValueStream::LtcUtBenValueStream(pCBenValue pValue) +{ + // Calculate the length of the whole value stream + cCurrentPosition = 0; + m_ulValueLength = pValue->GetValueSize(); + cpValue = pValue; +} + +LtcUtBenValueStream::~LtcUtBenValueStream() +{ +} +#if 0 // Deleted by 2004-06-16 +UtError +CUtBenValueStream::Open(UtBool /* OpenNew */, UtStrmOpenFlags /* Flags */) +{ + cCurrentPosition = 0; + return UtErr_OK; +} + +UtError +CUtBenValueStream::Close() +{ + return UtErr_OK; +} + +UtError +CUtBenValueStream::Seek(long Offset, UtSeekMode Mode) +{ + unsigned long NewPos; + + if (Mode == UtSeek_FromStart) + NewPos = (unsigned long) Offset; + else if (Mode == UtSeek_FromCurr) + { + if (Offset < 0 && cCurrentPosition < (unsigned long) -Offset) + return UtErr_SeekError; + NewPos = cCurrentPosition + Offset; + } + else if (Mode == UtSeek_FromEnd) + { + unsigned long ValueSize = cpValue->GetValueSize(); + if (Offset < 0 && ValueSize < (unsigned long) -Offset) + return UtErr_SeekError; + NewPos = ValueSize + Offset; + } + else + { + UT_ASSERT(! "Illegal seek"); + return UtErr_SeekError; + } + + cCurrentPosition = NewPos; + return UtErr_OK; +} + +UtError +CUtBenValueStream::GetPosition(unsigned long * pPosition) +{ + *pPosition = cCurrentPosition; + return UtErr_OK; +} + +UtError +CUtBenValueStream::GetSize(unsigned long * pSize) +{ + *pSize = cpValue->GetValueSize(); + return UtErr_OK; +} + +UtError +CUtBenValueStream::Read(UtStrmDataPtr pBuffer, unsigned long MaxSize, + unsigned long * pAmtRead) +{ + unsigned long AmtLeft; + GetAmountLeft(&AmtLeft); + + unsigned long AmtShouldRead = UtMin(MaxSize, AmtLeft); + + BenError Err = cpValue->ReadValueData(pBuffer, cCurrentPosition, MaxSize, + pAmtRead); + cCurrentPosition += *pAmtRead; + + return BenToUtError(Err); +} + +UtError +CUtBenValueStream::Write(UtConstStrmDataPtr pBuffer, unsigned long Size, + unsigned long * pAmtWritten) +{ + BenError Err; + + *pAmtWritten = 0; + + // IStream::Write semantics are that when write zero bytes, doesn't fill + // in gap + if (Size == 0) + return UtErr_OK; + + // See if anybody exercies code below + //UT_ASSERT(cCurrentPosition <= (long) cpValue->GetValueSize()); + + // Fill out "gap" in data, if there is one, with nulls + while (cCurrentPosition > cpValue->GetValueSize()) + if ((Err = cpValue->WriteValueData("", cpValue->GetValueSize(), 1, + NULL)) != BenErr_OK) + return BenToUtError(Err); + + unsigned long AmtWritten; + Err = cpValue->WriteValueData(pBuffer, cCurrentPosition, Size, + &AmtWritten); + + //UT_ASSERT(Size == AmtWritten); + + cCurrentPosition += AmtWritten; + + *pAmtWritten = AmtWritten; + + return BenToUtError(Err); +} + +UtError +CUtBenValueStream::TruncateSize(unsigned long Size) +{ + return BenToUtError(cpValue->TruncateValueSize(Size)); +} + +UtError +CUtBenValueStream::Flush() +{ + return UtErr_OK; + +} +#endif +} // end namespace OpenStormBento diff --git a/lotuswordpro/source/filter/utlist.cxx b/lotuswordpro/source/filter/utlist.cxx new file mode 100644 index 000000000000..e5d4463caeb7 --- /dev/null +++ b/lotuswordpro/source/filter/utlist.cxx @@ -0,0 +1,250 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "first.hxx" + +namespace OpenStormBento +{ + +CUtListElmt::CUtListElmt(pCUtList pList) +{ + if (pList == NULL) + cpNext = NULL; + else InsertAfter(pList->GetLast()); +} + +CUtListElmt::~CUtListElmt() +{ + if (OnList()) + { + cpPrev->cpNext = cpNext; + cpNext->cpPrev = cpPrev; + } +} + + + + +CUtList::~CUtList() +{ + pCUtListElmt pTerminating = GetTerminating(); + for (pCUtListElmt pCurr = GetFirst(); pCurr != pTerminating; ) + { + pCUtListElmt pNext = pCurr->GetNext(); + pCurr->MakeNotOnList(); + pCurr = pNext; + } + pTerminating->SetPrev(pTerminating); + pTerminating->SetNext(pTerminating); +} + +int +CUtList::GetCount() +{ + int Count = 0; + + pCUtListElmt pTerminating = GetTerminating(); + for (pCUtListElmt pCurr = GetFirst(); pCurr != pTerminating; + pCurr = pCurr->GetNext()) + { + Count++; + } + return Count; +} + +pCUtListElmt +CUtList::GetIndex(int Index) +{ + int Count = 0; + + pCUtListElmt pTerminating = GetTerminating(); + for (pCUtListElmt pCurr = GetFirst(); pCurr != pTerminating; + pCurr = pCurr->GetNext()) + { + if (Count == Index) + return pCurr; + Count++; + } + return NULL; +} + +int +CUtList::GetIndex(pCUtListElmt pNode) +{ + int Count = 0; + + pCUtListElmt pTerminating = GetTerminating(); + for (pCUtListElmt pCurr = GetFirst(); pCurr != pTerminating; + pCurr = pCurr->GetNext()) + { + if (pNode == pCurr) + break; + Count++; + } + return Count; +} + +// If pCurr is last item in list, returns first item in list (terminating +// item is skipped when circle around) +pCUtListElmt +CUtList::CircularGetNext(pConstCUtListElmt pCurr) +{ + pCUtListElmt pNext = pCurr->GetNext(); + if (pNext == GetTerminating()) + pNext = GetFirst(); + return pNext; +} + +pCUtListElmt +CUtList::CircularGetPrev(pConstCUtListElmt pCurr) +{ + pCUtListElmt pPrev = pCurr->GetPrev(); + if (pPrev == GetTerminating()) + pPrev = GetLast(); + return pPrev; +} + +// If pCurr is NULL, returns first item in list. Otherwise, returns item +// in list after pCurr or NULL if no more items in list. Terminating item +// is never returned +pCUtListElmt +CUtList::GetNextOrNULL(pCUtListElmt pCurr) +{ + pCUtListElmt pNext; + + if (pCurr == NULL) + pNext = GetFirst(); + else pNext = pCurr->GetNext(); + if (pNext == GetTerminating()) + pNext = NULL; + return pNext; +} + +// If pCurr is NULL, returns last item in list. Otherwise, returns item +// in list before pCurr or NULL if no more items in list. Terminating item +// is never returned +pCUtListElmt +CUtList::GetPrevOrNULL(pCUtListElmt pCurr) +{ + pCUtListElmt pPrev; + + if (pCurr == NULL) + pPrev = GetLast(); + else pPrev = pCurr->GetPrev(); + if (pPrev == GetTerminating()) + pPrev = NULL; + return pPrev; +} +#if 0 // Deleted by 2004-06-16 + +// Does an insertion sort on list. If list is already sorted, takes O(n) +// time. Assumes elements are of type CUtComparableListElmt +void +CUtList::Sort(LCID LangID) +{ + pCUtListElmt pSortedTo = GetFirst(); + + // Before each iteration, list is sorted up to, but not including, + // pSortedTo. On each iteration, we look backwards through sorted portion + // of list searching for spot that pSortedTo should go and move it to that + // location + while (pSortedTo != GetTerminating()) + { + pCUtListElmt pNextSortedTo = pSortedTo->GetNext(); + + UtBool FoundSpot = UT_FALSE; + for (pCUtListElmt pCurr = pSortedTo->GetPrev(); + pCurr != GetTerminating(); + pCurr = pCurr->GetPrev()) + { + if (((pCUtComparableListElmt) pSortedTo)-> + Compare((pCUtComparableListElmt) pCurr, LangID) >= 0) + { + pSortedTo->Remove(); + pSortedTo->InsertAfter(pCurr); + FoundSpot = UT_TRUE; + break; + } + } + + if (! FoundSpot) + { + pSortedTo->Remove(); + pSortedTo->InsertAfter(GetTerminating()); // Add at beginning + } + + pSortedTo = pNextSortedTo; + } +} +#endif +void +CUtList::Destroy() +{ + pCUtListElmt pTerminating = GetTerminating(); + for (pCUtListElmt pCurr = GetFirst(); pCurr != pTerminating; ) + { + pCUtListElmt pNext = pCurr->GetNext(); + delete pCurr; + pCurr = pNext; + } +} + + + + +CUtOwningList::~CUtOwningList() +{ + Destroy(); +} +}//end namespace OpenStormBento diff --git a/lotuswordpro/source/filter/utlist.hxx b/lotuswordpro/source/filter/utlist.hxx new file mode 100644 index 000000000000..0d65460d46bf --- /dev/null +++ b/lotuswordpro/source/filter/utlist.hxx @@ -0,0 +1,157 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef UTLIST_H +#define UTLIST_H + +#include "ut.hxx" + +namespace OpenStormBento +{ + + +UtDefClassP(CUtListElmt); +UtDefClassP(CUtList); +UtDefClassP(CUtComparableListElmt); + +class CUtListElmt +{ +public: // Methods + CUtListElmt() { cpNext = NULL; } + CUtListElmt(pCUtListElmt pPrev) { InsertAfter(pPrev); } + CUtListElmt(pCUtList pList); + virtual ~CUtListElmt(); + void Remove() + { + cpPrev->cpNext = cpNext; + cpNext->cpPrev = cpPrev; + cpNext = NULL; + } + UtBool OnList() { return cpNext != NULL; } + void MakeNotOnList() { cpNext = NULL; } // Same as Remove but doesn't + // patch up list + pCUtListElmt GetNext() const { return cpNext; } + void SetNext(pCUtListElmt pNext) { cpNext = pNext; } + pCUtListElmt GetPrev() const { return cpPrev; } + void SetPrev(pCUtListElmt pPrev) { cpPrev = pPrev; } + void InsertAfter(pCUtListElmt pPrev) + { + cpNext = pPrev->cpNext; + cpPrev = pPrev; + cpNext->cpPrev = this; + pPrev->cpNext = this; + } + +private: // Data + pCUtListElmt cpNext; + pCUtListElmt cpPrev; +}; + + + + +class CUtComparableListElmt : public CUtListElmt +{ +public: // Methods + CUtComparableListElmt() { ; } + CUtComparableListElmt(pCUtComparableListElmt pPrev) : + CUtListElmt(pPrev) { ; } + CUtComparableListElmt(pCUtList pList) : CUtListElmt(pList) { ; } + +public: // Pure virtual methods +#if 0 // Deleted by 2004-06-16 + virtual int Compare(pCUtComparableListElmt pOther, LCID LangID = 0) = 0; +#endif +}; + + + + +class CUtList +{ +public: // Methods + CUtList() { cDummyElmt.SetNext(&cDummyElmt); + cDummyElmt.SetPrev(&cDummyElmt); } + virtual ~CUtList(); + pCUtListElmt GetFirst() { return cDummyElmt.GetNext(); } + pCUtListElmt GetLast() { return cDummyElmt.GetPrev(); } + pCUtListElmt GetTerminating() { return &cDummyElmt; } + pCUtListElmt CircularGetNext(pConstCUtListElmt pCurr); + pCUtListElmt CircularGetPrev(pConstCUtListElmt pCurr); + pCUtListElmt GetNextOrNULL(pCUtListElmt pCurr); + pCUtListElmt GetPrevOrNULL(pCUtListElmt pCurr); + UtBool IsEmpty() { return GetFirst() == GetTerminating(); }; + UtBool ContainsAtLeastTwoItems() { return GetFirst() != GetLast(); }; +#if 0 // Deleted by 2004-06-16 +void Sort(LCID LangID = 0); // Assumes elements are of type CUtComparableListElmt +#endif + int GetCount(void); + void Destroy(void); + pCUtListElmt GetIndex(int Index); + int GetIndex(pCUtListElmt pNode); + +private: // Data + CUtListElmt cDummyElmt; +}; + + + + +class CUtOwningList : public CUtList +{ +public: // Methods + ~CUtOwningList(); +}; +}//end namespace OpenStormBento +#endif diff --git a/lotuswordpro/source/filter/xfilter/ixfattrlist.hxx b/lotuswordpro/source/filter/xfilter/ixfattrlist.hxx new file mode 100644 index 000000000000..96c3c162652c --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/ixfattrlist.hxx @@ -0,0 +1,89 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Interface for the attibute list of a xml element. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#ifndef _IXFATTRLIST_HXX +#define _IXFATTRLIST_HXX + +#include <rtl/ustring.hxx> + +/** + * @brief + * Attribute list interface for sax writer. + * Implemente this interface for different sax writer. For OOo,i use the XDocumentHandler stream; + * for ouputting the local file system,It's just a vector container. + */ +class IXFAttrList +{ +public: + virtual ~IXFAttrList(){} + /** + * @descr: Add a attribute to the attribute list. + */ + virtual void AddAttribute(const rtl::OUString& name, const rtl::OUString& value) = 0; + + /** + * @descr: Clear all the attributes in the attribute list. + */ + virtual void Clear() = 0; +}; + +#endif //_IXFATTRLIST_HXX diff --git a/lotuswordpro/source/filter/xfilter/ixfcontent.hxx b/lotuswordpro/source/filter/xfilter/ixfcontent.hxx new file mode 100644 index 000000000000..f50836d544d0 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/ixfcontent.hxx @@ -0,0 +1,101 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Interface for the all content object,ie. text,paragraph,picture,and so on. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + * 2005-04-08 add clone function. + ************************************************************************/ +#ifndef _IXFCONTENT_HXX +#define _IXFCONTENT_HXX + +#include "xfglobal.hxx" + +class IXFStyle; + +/** + * @brief Base interface for all content object.Implementation classes include text span,paragraph, + Drawing obejcts, image, ole and so on. + */ +class IXFContent : public IXFObject +{ +public: + virtual ~IXFContent(){} + /** + * @descr Fetch the content type,not quite useful. + */ + virtual enumXFContent GetContentType() = 0; + + /** + * @descr Set style to apply. You can get the style name by use XFStyleManager::AddStyle(pStyle), + * or just set a fixed style name. + */ + virtual void SetStyleName(rtl::OUString style) = 0; + + /** + * @descr return the style name. + */ + virtual rtl::OUString GetStyleName() = 0; + + /** + * @descr Deep copy. + */ + virtual IXFContent* Clone() = 0; +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/ixfobject.hxx b/lotuswordpro/source/filter/xfilter/ixfobject.hxx new file mode 100644 index 000000000000..fc6d11558690 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/ixfobject.hxx @@ -0,0 +1,91 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Interfer face for all object that will responsible for xml element output + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#ifndef IXFOBJECT_INC +#define IXFOBJECT_INC + +class IXFStream; +/************************************************************************* + * @descr + * This is the root interface for all object which will ouput something to + * the Sax Stream. + * I'll add reference management code later. + ************************************************************************/ +class IXFObject +{ +public: + /** + * Virtual destructure function for all class,This makes the XFilter module + * a single-root framework. + */ + virtual ~IXFObject(){} + + /** + * The funciton to serial the object to the sax stream. + * The objects that must implements ToXml is divided into two types: + * 1. IXFStyle objects that has something to do with styles. + * 2. IXFContent objects that contents text or picture. + */ + virtual void ToXml(IXFStream *pSaxStream) = 0; +}; + +#endif //IXFOBJECT_INC diff --git a/lotuswordpro/source/filter/xfilter/ixfproperty.hxx b/lotuswordpro/source/filter/xfilter/ixfproperty.hxx new file mode 100644 index 000000000000..dd6bbf422e0a --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/ixfproperty.hxx @@ -0,0 +1,76 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Property for styles. ie. Margins,shadow,columns and so on. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-19 create this file. + ************************************************************************/ +#ifndef _IXFPROPERTY_HXX +#define _IXFPROPERTY_HXX + +#include "ixfobject.hxx" + +class IXFStream; + +class IXFProperty : public IXFObject +{ +public: + +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/ixfstream.hxx b/lotuswordpro/source/filter/xfilter/ixfstream.hxx new file mode 100644 index 000000000000..4fd206229226 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/ixfstream.hxx @@ -0,0 +1,114 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Sax stream to export xml to SODC. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#ifndef _IXFSTREAM_INC +#define _IXFSTREAM_INC + + +#include <rtl/ustring.hxx> + +class IXFAttrList; + +/** + * @brief + * Stream wrapper for sax writer. + */ +class IXFStream +{ +public: + virtual ~IXFStream(){} + /** + * @descr Called when start write.Usually you can output document type info and xml encoding info. + */ + virtual void StartDocument() = 0; + + /** + * @descr called when end output. + */ + virtual void EndDocument() = 0; + + /** + * @descr Wrap XDocumentHandler::startElement() + * @param oustr element tag name. + */ + virtual void StartElement(const rtl::OUString& oustr) = 0; + + /** + * @descr Wrap XDocumentHandler::endElement() + * @param oustr element tag name. + */ + virtual void EndElement(const rtl::OUString& oustr) = 0; + + /** + * @descr output text node. + * @param oustr text content. + */ + virtual void Characters(const rtl::OUString& oustr) = 0; + + /** + * @descr return the Attribute list interface. + * @return attribute list. + */ + virtual IXFAttrList* GetAttrList() = 0; +}; + +#endif //_IXFSTREAM_INC
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/ixfstyle.hxx b/lotuswordpro/source/filter/xfilter/ixfstyle.hxx new file mode 100644 index 000000000000..e965f2c85064 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/ixfstyle.hxx @@ -0,0 +1,113 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Interfer for all style object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ + +#ifndef _IXFSTYLE_HXX +#define _IXFSTYLE_HXX + +#include "xfglobal.hxx" +/** + * @descr + * Interface for all style object. + */ +class IXFStyle : public IXFObject +{ +public: + virtual ~IXFStyle(){} + /** + * @descr: return the style name. + */ + virtual rtl::OUString GetStyleName() = 0; + + /** + * @descr: set the name of the style. + */ + virtual void SetStyleName(const rtl::OUString& styleName) = 0; + + /** + * @descr return the parent style name. + */ + virtual rtl::OUString GetParentStyleName() = 0; + /** + * @descr: Parant paragraph style. + */ + virtual void SetParentStyleName(const rtl::OUString& parent) = 0; + /** + * @descr: return the style family. You can reference to enumXFStyle. + */ + virtual enumXFStyle GetStyleFamily() = 0; + + /** + * @descr: Set the style family,not quite useful. + */ + virtual void SetStyleFamily(enumXFStyle family) = 0; + + /** + * @descr: Compare wheather two style object are the same.Used only by XFStyleManager. + * @param: pStyle the style to be compared. + * @return: return sal_True if equals,else sal_False. + */ + virtual sal_Bool Equal(IXFStyle *pStyle) = 0; + +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/makefile.mk b/lotuswordpro/source/filter/xfilter/makefile.mk new file mode 100644 index 000000000000..fdd1a70a3419 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/makefile.mk @@ -0,0 +1,148 @@ +#************************************************************************* +# +# The Contents of this file are made available subject to the terms of +# either of the following licenses +# +# - GNU Lesser General Public License Version 2.1 +# - Sun Industry Standards Source License Version 1.1 +# +# Sun Microsystems Inc., October, 2000 +# +# GNU Lesser General Public License Version 2.1 +# ============================================= +# Copyright 2000 by Sun Microsystems, Inc. +# 901 San Antonio Road, Palo Alto, CA 94303, USA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License version 2.1, as published by the Free Software Foundation. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +# +# Sun Industry Standards Source License Version 1.1 +# ================================================= +# The contents of this file are subject to the Sun Industry Standards +# Source License Version 1.1 (the "License"); You may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at http://www.openoffice.org/license.html. +# +# Software provided under this License is provided on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, +# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. +# See the License for the specific provisions governing your rights and +# obligations concerning the Software. +# +# The Initial Developer of the Original Code is: IBM Corporation +# +# Copyright: 2008 by IBM Corporation +# +# All Rights Reserved. +# +# Contributor(s): _______________________________________ +# +# +# +#************************************************************************* + +PRJ=..$/..$/.. + +PRJNAME=lwpfilter +TARGET=xfilter + + +#ENABLE_EXCEPTIONS=TRUE + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk + + +SLOFILES= \ + $(SLO)$/xfsaxattrlist.obj \ + $(SLO)$/xfsaxstream.obj \ + $(SLO)$/xffilestream.obj \ + $(SLO)$/xffileattrlist.obj \ + $(SLO)$/xfstylemanager.obj \ + $(SLO)$/xfstyle.obj \ + $(SLO)$/xftextstyle.obj \ + $(SLO)$/xffont.obj \ + $(SLO)$/xffontdecl.obj \ + $(SLO)$/xfstylecont.obj \ + $(SLO)$/xfcontentcontainer.obj \ + $(SLO)$/xfutil.obj \ + $(SLO)$/xfparastyle.obj \ + $(SLO)$/xffontfactory.obj \ + $(SLO)$/xftextcontent.obj \ + $(SLO)$/xfparagraph.obj \ + $(SLO)$/xftextspan.obj \ + $(SLO)$/xfofficemeta.obj \ + $(SLO)$/xfglobal.obj \ + $(SLO)$/xflist.obj \ + $(SLO)$/xftextheading.obj \ + $(SLO)$/xfpagemaster.obj \ + $(SLO)$/xfmasterpage.obj \ + $(SLO)$/xfheaderstyle.obj \ + $(SLO)$/xfsectionstyle.obj \ + $(SLO)$/xfsection.obj \ + $(SLO)$/xfliststyle.obj \ + $(SLO)$/xfborders.obj \ + $(SLO)$/xfshadow.obj \ + $(SLO)$/xfcolor.obj \ + $(SLO)$/xfcolumns.obj \ + $(SLO)$/xfmargins.obj \ + $(SLO)$/xfdatestyle.obj \ + $(SLO)$/xftimestyle.obj \ + $(SLO)$/xftime.obj \ + $(SLO)$/xfdate.obj \ + $(SLO)$/xfframe.obj \ + $(SLO)$/xfframestyle.obj \ + $(SLO)$/xftable.obj \ + $(SLO)$/xfrow.obj \ + $(SLO)$/xfcell.obj \ + $(SLO)$/xfcolstyle.obj \ + $(SLO)$/xfcellstyle.obj \ + $(SLO)$/xfrowstyle.obj \ + $(SLO)$/xftablestyle.obj \ + $(SLO)$/xftabstyle.obj \ + $(SLO)$/xfoutlinestyle.obj \ + $(SLO)$/xfindex.obj \ + $(SLO)$/xfbookmarkref.obj \ + $(SLO)$/xfdrawobj.obj \ + $(SLO)$/xfdrawline.obj \ + $(SLO)$/xfdrawrect.obj \ + $(SLO)$/xfdrawcircle.obj \ + $(SLO)$/xfdrawellipse.obj \ + $(SLO)$/xfdrawpolyline.obj \ + $(SLO)$/xfdrawpolygon.obj \ + $(SLO)$/xfdrawpath.obj \ + $(SLO)$/xfdrawstyle.obj \ + $(SLO)$/xfdrawlinestyle.obj \ + $(SLO)$/xfdrawareastyle.obj \ + $(SLO)$/xfimage.obj \ + $(SLO)$/xfimagestyle.obj \ + $(SLO)$/xfbase64.obj \ + $(SLO)$/xfoleobj.obj \ + $(SLO)$/xfbgimage.obj \ + $(SLO)$/xfconfigmanager.obj \ + $(SLO)$/xfnumberstyle.obj \ + $(SLO)$/xffloatframe.obj \ + $(SLO)$/xfentry.obj \ + $(SLO)$/xfcrossref.obj \ + $(SLO)$/xfdocfield.obj \ + $(SLO)$/xfchange.obj \ + $(SLO)$/xftextboxstyle.obj + + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk diff --git a/lotuswordpro/source/filter/xfilter/xfannotation.hxx b/lotuswordpro/source/filter/xfilter/xfannotation.hxx new file mode 100644 index 000000000000..c8dba78be2be --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfannotation.hxx @@ -0,0 +1,119 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Annotation object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-31 create this file. + ************************************************************************/ +#ifndef _XFANNOTATION_HXX +#define _XFANNOTATION_HXX + +#include "xfglobal.hxx" +#include "xfcontent.hxx" +#include "xfcontentcontainer.hxx" + +class XFAnnotation : public XFContentContainer +{ +public: + void SetDate(rtl::OUString date); + + void SetAuthor(rtl::OUString author); + + //void Add(IXFContent *pContent); + + virtual void ToXml(IXFStream *pStrm); + +private: + rtl::OUString m_strDate; + rtl::OUString m_strAuthor; + //XFContentContainer m_aContents; +}; + +inline void XFAnnotation::SetDate(rtl::OUString date) +{ + m_strDate = date; +} + +inline void XFAnnotation::SetAuthor(rtl::OUString author) +{ + m_strAuthor = author; +} +/* +inline void XFAnnotation::Add(IXFContent *pContent) +{ + m_aContents.Add(pContent); +} +*/ +inline void XFAnnotation::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + if( m_strDate.getLength() ) + pAttrList->AddAttribute( A2OUSTR("office:create-date"), m_strDate ); + if( m_strAuthor.getLength() ) + pAttrList->AddAttribute( A2OUSTR("office:author"), m_strAuthor); + pStrm->StartElement( A2OUSTR("office:annotation") ); + + //m_aContents.ToXml(pStrm); + XFContentContainer::ToXml(pStrm); + + pStrm->EndElement( A2OUSTR("office:annotation") ); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfarrowstyle.hxx b/lotuswordpro/source/filter/xfilter/xfarrowstyle.hxx new file mode 100644 index 000000000000..f70861e9ca7e --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfarrowstyle.hxx @@ -0,0 +1,130 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Line Arrow. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-04-06 create this file. + ************************************************************************/ +#ifndef _XFARROWSTYLE_HXX +#define _XFARROWSTYLE_HXX + +#include "xfstyle.hxx" + +class XFArrowStyle : public XFStyle +{ +public: + XFArrowStyle(); + +public: + void SetArrowName(rtl::OUString name); + + void SetViewbox(rtl::OUString viewBox); + + void SetSVGPath(rtl::OUString path); + + virtual enumXFStyle GetStyleFamily(); + + virtual void ToXml(IXFStream *pStrm); + +private: + rtl::OUString m_strName; + rtl::OUString m_strViewBox; + rtl::OUString m_strPath; +}; + +inline XFArrowStyle::XFArrowStyle() +{ +} + +inline void XFArrowStyle::SetArrowName(rtl::OUString name) +{ + m_strName = name; +} + +inline void XFArrowStyle::SetViewbox(rtl::OUString viewBox) +{ + m_strViewBox = viewBox; +} + +inline void XFArrowStyle::SetSVGPath(rtl::OUString path) +{ + m_strPath = path; +} + +inline enumXFStyle XFArrowStyle::GetStyleFamily() +{ + return enumXFStyleArrow; +} + +inline void XFArrowStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + if( m_strName.getLength()>0 ) + pAttrList->AddAttribute( A2OUSTR("draw:name"), m_strName ); + else + pAttrList->AddAttribute( A2OUSTR("draw:name"), GetStyleName() ); + + pAttrList->AddAttribute( A2OUSTR("svg:viewBox"), m_strViewBox ); + pAttrList->AddAttribute( A2OUSTR("svg:d"), m_strPath ); + pStrm->StartElement(A2OUSTR("draw:marker")); + pStrm->EndElement(A2OUSTR("draw:marker")); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfbase64.cxx b/lotuswordpro/source/filter/xfilter/xfbase64.cxx new file mode 100644 index 000000000000..4bdba6425a36 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfbase64.cxx @@ -0,0 +1,136 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Base64 tool. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-02 create this file. + * 2005-02-28 make Encode_(...) to be inline for speed. + ************************************************************************/ +#include "xfbase64.hxx" + +const sal_Char aBase64EncodeTable[] = +{ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', +'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', +'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', +'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', +'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' }; + +/** + * @descr Encode 3 byte to 4 byte. + * Please refer to RFC to get the base64 algorithm. + */ +inline void Encode_(sal_uInt8 *src, sal_Char* dest) +{ + sal_Int32 nBinaer = (((sal_uInt8)src[ 0]) << 16) + + (((sal_uInt8)src[1]) << 8) + + ((sal_uInt8)src[2]); + + sal_uInt8 nIndex = ((nBinaer & 0xFC0000) >> 18); + dest[0] = aBase64EncodeTable [nIndex]; + + nIndex = (nBinaer & 0x3F000) >> 12; + dest[1] =aBase64EncodeTable [nIndex]; + + nIndex = (nBinaer & 0xFC0) >> 6; + dest[2] = aBase64EncodeTable [nIndex]; + + nIndex = (nBinaer & 0x3F); + dest[3] = aBase64EncodeTable [nIndex]; +} + +/** + * @descr Base64 encode. + */ +rtl::OUString XFBase64::Encode(sal_uInt8 *buf, sal_Int32 len) +{ + sal_Char *buffer; + sal_Int32 nNeeded; + sal_Int32 cycles = len/3; + sal_Int32 remain = len%3; + + if( remain == 0 ) + nNeeded = cycles*4; + else + nNeeded = (cycles+1)*4; + buffer = new sal_Char[nNeeded+1]; + + rtl_zeroMemory(buffer,nNeeded+1); + + for( sal_Int32 i=0; i<cycles; i++ ) + Encode_(buf+i*3,buffer+i*4); + + sal_uInt8 last[3]; + if( remain == 1 ) + { + last[0] = buf[len-1]; + last[1] = last[2] = 0; + Encode_(last,buffer+nNeeded+1-5); + } + else if( remain == 2 ) + { + last[0] = buf[len-2]; + last[1] = buf[len-1]; + last[2] = 0; + Encode_(last,buffer+nNeeded+1-5); + } + + rtl::OUString str = rtl::OUString::createFromAscii(buffer); + delete[] buffer; + + return str; +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfbase64.hxx b/lotuswordpro/source/filter/xfilter/xfbase64.hxx new file mode 100644 index 000000000000..58f16019b006 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfbase64.hxx @@ -0,0 +1,84 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Base64 tool. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-02 create this file. + ************************************************************************/ +#ifndef _XFBASE64_HXX +#define _XFBASE64_HXX + +#include "xfglobal.hxx" + +/** + * @brief + * Base64 algorithm implemetation. + * I only implements encode funtion now,i'll add decode if needed later. + * http://www.faqs.org/rfcs/rfc3548.html. + */ + +class XFBase64 +{ +public: + /** + * @descr Encode binary buffer to base64 encoding. + */ + static rtl::OUString Encode(sal_uInt8 *buf, sal_Int32 len); +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfbgimage.cxx b/lotuswordpro/source/filter/xfilter/xfbgimage.cxx new file mode 100644 index 000000000000..6a7a96b297ee --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfbgimage.cxx @@ -0,0 +1,162 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Background image. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-03-01 created. + ************************************************************************/ +#include "xfbgimage.hxx" +#include "xfbase64.hxx" + +XFBGImage::XFBGImage() +{ + m_bUserFileLink = sal_False; + m_bRepeate = sal_False; + m_bStretch = sal_False; + m_bPosition = sal_True; + m_eHoriAlign = enumXFAlignCenter; + m_eVertAlign = enumXFAlignCenter; +} + +void XFBGImage::SetImageData(sal_uInt8 *buf, int len) +{ + m_strData = XFBase64::Encode(buf,len); + m_bUserFileLink = sal_False; +} + +sal_Bool XFBGImage::Equal(IXFStyle *pStyle) +{ + return sal_False; +} + +void XFBGImage::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + if( m_bUserFileLink ) + { + pAttrList->AddAttribute( A2OUSTR("xlink:href"), m_strFileName); + } + + pAttrList->AddAttribute( A2OUSTR("xlink:type"), A2OUSTR("simple") ); + pAttrList->AddAttribute( A2OUSTR("xlink:actuate"), A2OUSTR("onLoad")); + + if( m_bPosition ) + { + rtl::OUString str = GetAlignName(m_eVertAlign) + A2OUSTR(" "); + if( m_eHoriAlign == enumXFAlignStart ) + str += A2OUSTR("left"); + else if( m_eHoriAlign == enumXFAlignCenter ) + str += A2OUSTR("center"); + else if( m_eHoriAlign == enumXFAlignEnd ) + str += A2OUSTR("right"); + + pAttrList->AddAttribute( A2OUSTR("style:position"), str ); + pAttrList->AddAttribute( A2OUSTR("style:repeat"), A2OUSTR("no-repeat") ); + } + else if( m_bRepeate ) + pAttrList->AddAttribute( A2OUSTR("style:repeat"), A2OUSTR("repeat") ); + else if( m_bStretch ) + pAttrList->AddAttribute( A2OUSTR("style:repeat"), A2OUSTR("stretch") ); + + pStrm->StartElement( A2OUSTR("style:background-image") ); + + if( !m_bUserFileLink ) + { + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("office:binary-data") ); + pStrm->Characters(m_strData); + pStrm->EndElement( A2OUSTR("office:binary-data") ); + } + + pStrm->EndElement( A2OUSTR("style:background-image") ); +} + +bool operator==(XFBGImage& img1, XFBGImage& img2) +{ + if( img1.m_bUserFileLink != img2.m_bUserFileLink ) + return false; + if( img1.m_bUserFileLink ) + { + if( img1.m_strFileName != img2.m_strFileName ) + return false; + } + else + { + //I'll not compare the content of the two buffer,it's time comsuming. + return sal_False; + } + if( img1.m_bPosition != img2.m_bPosition ) + return false; + if( img1.m_bRepeate != img2.m_bRepeate ) + return false; + if( img1.m_bStretch != img2.m_bStretch ) + return false; + if( img1.m_bPosition ) + { + if( (img1.m_eHoriAlign != img2.m_eHoriAlign) || (img1.m_eVertAlign != img2.m_eVertAlign) ) + return false; + } + return true; +} + +bool operator!=(XFBGImage& img1, XFBGImage& img2) +{ + return !(img1==img2); +} diff --git a/lotuswordpro/source/filter/xfilter/xfbgimage.hxx b/lotuswordpro/source/filter/xfilter/xfbgimage.hxx new file mode 100644 index 000000000000..4b54bfcaa0e6 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfbgimage.hxx @@ -0,0 +1,154 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Background image. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-03-01 created. + ************************************************************************/ +#ifndef _XFBGIMAGE_HXX +#define _XFBGIMAGE_HXX + +#include "xfstyle.hxx" + +/** + * @brief + * Background image object. + */ +class XFBGImage : public XFStyle +{ +public: + XFBGImage(); + +public: + /** + * @descr Use file link as image source. + */ + void SetFileLink(rtl::OUString fileName); + + /** + * @descr Use base64 stream as image source. + */ + void SetImageData(sal_uInt8 *buf, int len); + + /** + * @descr Set the iamge position type. + */ + void SetPosition(enumXFAlignType horiAlign = enumXFAlignCenter, enumXFAlignType vertAlign = enumXFAlignCenter); + + /** + * @descr Set background image repeat style. + */ + void SetRepeate(); + + /** + * @descr Set whether the image should be streatched to fill the owner object. + */ + void SetStretch(); + + /** + * @descr decide whether there has been a style that is the same as this object. + * If it use base64 stream, i'll simply return sal_False because it's too slow to compare two base64 stream. + */ + virtual sal_Bool Equal(IXFStyle *pStyle); + + virtual void ToXml(IXFStream *pStrm); + + friend bool operator==(XFBGImage& img1, XFBGImage& img2); + friend bool operator!=(XFBGImage& img1, XFBGImage& img2); +private: + rtl::OUString m_strFileName; + rtl::OUString m_strData; + sal_Bool m_bUserFileLink; + sal_Bool m_bRepeate; + sal_Bool m_bStretch; + sal_Bool m_bPosition; + enumXFAlignType m_eHoriAlign; + enumXFAlignType m_eVertAlign; +}; + +inline void XFBGImage::SetFileLink(rtl::OUString fileName) +{ + m_strFileName = fileName; + m_bUserFileLink = sal_True; +} + +inline void XFBGImage::SetPosition(enumXFAlignType horiAlign, enumXFAlignType vertAlign) +{ + m_bPosition = sal_True; + m_eHoriAlign = horiAlign; + m_eVertAlign = vertAlign; + + m_bStretch = sal_False; + m_bRepeate = sal_False; +} + +inline void XFBGImage::SetRepeate() +{ + m_bRepeate = sal_True; + m_bStretch = sal_False; + m_bPosition = sal_False; +} + +inline void XFBGImage::SetStretch() +{ + m_bStretch = sal_True; + m_bRepeate = sal_False; + m_bPosition = sal_False; +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfbookmark.hxx b/lotuswordpro/source/filter/xfilter/xfbookmark.hxx new file mode 100644 index 000000000000..3adfd464484a --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfbookmark.hxx @@ -0,0 +1,129 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Bookmark ref. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-02-03 create this file. + ************************************************************************/ +#ifndef _XFBOOKMARK_HXX +#define _XFBOOKMARK_HXX + +#include "xfcontent.hxx" + +/** + * @brief + * Bookmark object. + */ +class XFBookmark : public XFContent +{ +public: + XFBookmark(sal_Bool isStart) + { + m_bStart = isStart; + } + + rtl::OUString GetDivision(){return m_strDivision;} + void SetDivision(rtl::OUString sDivName){m_strDivision = sDivName;} + rtl::OUString GetName(){return m_strName;} + +public: + /** + * @descr Set bookmark name, which will be used in bookmark-ref or formula. + */ + void SetName(rtl::OUString name) + { + m_strName = name; + } + + virtual void ToXml(IXFStream *pStrm) + { + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pAttrList->AddAttribute( A2OUSTR("text:name"), m_strName ); + if( m_bStart ) + { + pStrm->StartElement( A2OUSTR("text:bookmark-start") ); + pStrm->EndElement( A2OUSTR("text:bookmark-start") ); + } + else + { + pStrm->StartElement( A2OUSTR("text:bookmark-end") ); + pStrm->EndElement( A2OUSTR("text:bookmark-end") ); + } + } + +private: + sal_Bool m_bStart; + rtl::OUString m_strName; + rtl::OUString m_strDivision; +}; + +class XFBookmarkStart : public XFBookmark +{ +public: + XFBookmarkStart():XFBookmark(sal_True){} +}; + +class XFBookmarkEnd : public XFBookmark +{ +public: + XFBookmarkEnd():XFBookmark(sal_False){} +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfbookmarkref.cxx b/lotuswordpro/source/filter/xfilter/xfbookmarkref.cxx new file mode 100644 index 000000000000..c81445da3d0e --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfbookmarkref.cxx @@ -0,0 +1,107 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Bookmark reference. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-02-03 create this file. + ************************************************************************/ +#include "xfbookmarkref.hxx" + +XFBookmarkRef::XFBookmarkRef() +{ + m_eRefType = enumXFBookmarkNone; +} + +void XFBookmarkRef::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + assert(m_strBookmark.getLength() > 0 ); + if( m_eRefType == enumXFBookmarkNone ) + return; + else if( m_eRefType == enumXFBookmarkPage ) + { + pAttrList->AddAttribute( A2OUSTR("text:reference-format"), A2OUSTR("page") ); + pAttrList->AddAttribute( A2OUSTR("text:ref-name"), m_strBookmark ); + } + else if( m_eRefType == enumXFBookmarkChapter ) + { + pAttrList->AddAttribute( A2OUSTR("text:reference-format"), A2OUSTR("chapter") ); + pAttrList->AddAttribute( A2OUSTR("text:ref-name"), m_strBookmark ); + } + else if( m_eRefType == enumXFBookmarkPage ) + { + pAttrList->AddAttribute( A2OUSTR("text:reference-format"), A2OUSTR("text") ); + pAttrList->AddAttribute( A2OUSTR("text:ref-name"), m_strBookmark ); + + } + else if( m_eRefType == enumXFBookmarkDir ) + { + pAttrList->AddAttribute( A2OUSTR("text:reference-format"), A2OUSTR("direction") ); + pAttrList->AddAttribute( A2OUSTR("text:ref-name"), m_strBookmark ); + } + else if( m_eRefType == enumXFBookmarkDef ) + { + pAttrList->AddAttribute( A2OUSTR("text:ref-name"), m_strBookmark ); + } + pStrm->StartElement( A2OUSTR("text:bookmark-ref") ); + if( m_strText.getLength() ) + pStrm->Characters(m_strBookmark); + pStrm->EndElement( A2OUSTR("text:bookmark-ref") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfbookmarkref.hxx b/lotuswordpro/source/filter/xfilter/xfbookmarkref.hxx new file mode 100644 index 000000000000..6460253ff6fd --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfbookmarkref.hxx @@ -0,0 +1,103 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Bookmark ref. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-02-03 create this file. + ************************************************************************/ +#ifndef _XFBOOKMARKREF_HXX +#define _XFBOOKMARKREF_HXX + +#include "xfcontent.hxx" + +class XFBookmarkRef : public XFContent +{ +public: + XFBookmarkRef(); + +public: + void SetRefType(enumXFBookmarkRef type); + + void SetBookmark(rtl::OUString name); + + void SetText(rtl::OUString text); + + virtual void ToXml(IXFStream *pStrm); + +private: + enumXFBookmarkRef m_eRefType; + rtl::OUString m_strBookmark; + rtl::OUString m_strText; +}; + +inline void XFBookmarkRef::SetRefType(enumXFBookmarkRef ref) +{ + m_eRefType = ref; +} + +inline void XFBookmarkRef::SetBookmark(rtl::OUString name) +{ + m_strBookmark = name; +} + +inline void XFBookmarkRef::SetText(rtl::OUString text) +{ + m_strText = text; +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfborders.cxx b/lotuswordpro/source/filter/xfilter/xfborders.cxx new file mode 100644 index 000000000000..8270889ede3e --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfborders.cxx @@ -0,0 +1,360 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Border object,now only used by paragraph object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-14 create this file. + * 2005-01-17 change for the XFColor object. + ************************************************************************/ +#include "xfborders.hxx" + +XFBorder::XFBorder() +{ + m_fOffset = 0; + m_bDouble = sal_False; + m_bSameWidth = sal_False; + m_fWidthInner = 0; + m_fWidthSpace = 0; + m_fWidthOutter = 0; +} + +void XFBorder::SetColor(XFColor& color) +{ + m_aColor = color; +} + +void XFBorder::SetWidth(double width) +{ + if( !m_bDouble ) + { + m_fWidthInner = width; + m_bSameWidth = sal_True; + } + else if( m_bDouble && m_bSameWidth ) + { + m_fWidthInner = width; + m_fWidthOutter = width; + m_fWidthSpace = width; + } +} + +void XFBorder::SetDoubleLine(sal_Bool dual,sal_Bool bSameWidth) +{ + m_bDouble = dual; + m_bSameWidth = bSameWidth; +} + +void XFBorder::SetWidthInner(double inner) +{ + assert(m_bDouble); + m_fWidthInner = inner; +} + +void XFBorder::SetWidthSpace(double space) +{ + assert(m_bDouble); + m_fWidthSpace = space; +} + +void XFBorder::SetWidthOutter(double outer) +{ + assert(m_bDouble); + m_fWidthOutter = outer; +} + +rtl::OUString XFBorder::GetLineWidth() +{ + rtl::OUString str; + + if( m_bDouble ) + { + str = FloatToOUString(m_fWidthInner); + str += A2OUSTR("cm ") + DoubleToOUString(m_fWidthSpace); + str += A2OUSTR("cm ") + DoubleToOUString(m_fWidthOutter) + A2OUSTR("cm"); + } + return str; +} + +rtl::OUString XFBorder::ToString() +{ + rtl::OUString str; + + if( m_bDouble ) + { + double width = m_fWidthInner + m_fWidthSpace + m_fWidthOutter; + if( width<FLOAT_MIN ) + { + return str; + } + + str = DoubleToOUString(width) + A2OUSTR("cm"); + str += A2OUSTR(" double ") + m_aColor.ToString(); + } + else + { + double width = m_fWidthInner; + if( width<FLOAT_MIN ) + { + return str; + } + str = DoubleToOUString(width) + A2OUSTR("cm"); + str += A2OUSTR(" solid ") + m_aColor.ToString(); + } + return str; +} + +bool operator==(XFBorder& b1, XFBorder& b2) +{ + if( b1.m_fOffset != b2.m_fOffset ) + return false; + if( b1.m_bDouble != b2.m_bDouble ) + return false; + if( !b1.m_bDouble ) + { + if( b1.m_fWidthInner != b2.m_fWidthInner ) + return false; + } + else + { + if( b1.m_bSameWidth != b2.m_bSameWidth ) + return true; + if( b1.m_fWidthInner != b2.m_fWidthInner || + b1.m_fWidthSpace != b2.m_fWidthSpace || + b1.m_fWidthOutter != b2.m_fWidthOutter + ) + return false; + } + if( b1.m_aColor != b2.m_aColor ) + return sal_False; + return true; +} + +bool operator!=(XFBorder& b1, XFBorder& b2) +{ + return !(b1 == b2); +} + +// +//XFBorders: +// +void XFBorders::SetColor(enumXFBorder side, XFColor& color) +{ + switch(side) + { + case enumXFBorderLeft: + m_aBorderLeft.SetColor(color); + break; + case enumXFBorderRight: + m_aBorderRight.SetColor(color); + break; + case enumXFBorderTop: + m_aBorderTop.SetColor(color); + break; + case enumXFBorderBottom: + m_aBorderBottom.SetColor(color); + break; + } +} + +void XFBorders::SetWidth(enumXFBorder side, double width) +{ + switch(side) + { + case enumXFBorderLeft: + m_aBorderLeft.SetWidth(width); + break; + case enumXFBorderRight: + m_aBorderRight.SetWidth(width); + break; + case enumXFBorderTop: + m_aBorderTop.SetWidth(width); + break; + case enumXFBorderBottom: + m_aBorderBottom.SetWidth(width); + break; + } +} + +void XFBorders::SetDoubleLine(enumXFBorder side, sal_Bool dual,sal_Bool bSameWidth) +{ + switch(side) + { + case enumXFBorderLeft: + m_aBorderLeft.SetDoubleLine(dual,bSameWidth); + break; + case enumXFBorderRight: + m_aBorderRight.SetDoubleLine(dual,bSameWidth); + break; + case enumXFBorderTop: + m_aBorderTop.SetDoubleLine(dual,bSameWidth); + break; + case enumXFBorderBottom: + m_aBorderBottom.SetDoubleLine(dual,bSameWidth); + break; + } +} + +void XFBorders::SetWidthInner(enumXFBorder side, double inner) +{ + switch(side) + { + case enumXFBorderLeft: + m_aBorderLeft.SetWidthInner(inner); + break; + case enumXFBorderRight: + m_aBorderRight.SetWidthInner(inner); + break; + case enumXFBorderTop: + m_aBorderTop.SetWidthInner(inner); + break; + case enumXFBorderBottom: + m_aBorderBottom.SetWidthInner(inner); + break; + } +} + +void XFBorders::SetWidthSpace(enumXFBorder side, double space) +{ + switch(side) + { + case enumXFBorderLeft: + m_aBorderLeft.SetWidthSpace(space); + break; + case enumXFBorderRight: + m_aBorderRight.SetWidthSpace(space); + break; + case enumXFBorderTop: + m_aBorderTop.SetWidthSpace(space); + break; + case enumXFBorderBottom: + m_aBorderBottom.SetWidthSpace(space); + break; + } +} + +void XFBorders::SetWidthOutter(enumXFBorder side, double outer) +{ + switch(side) + { + case enumXFBorderLeft: + m_aBorderLeft.SetWidthOutter(outer); + break; + case enumXFBorderRight: + m_aBorderRight.SetWidthOutter(outer); + break; + case enumXFBorderTop: + m_aBorderTop.SetWidthOutter(outer); + break; + case enumXFBorderBottom: + m_aBorderBottom.SetWidthOutter(outer); + break; + } +} + +bool operator ==(XFBorders& b1, XFBorders& b2) +{ + if( b1.m_aBorderLeft != b2.m_aBorderLeft ) + return false; + if( b1.m_aBorderRight != b2.m_aBorderRight ) + return false; + if( b1.m_aBorderTop != b2.m_aBorderTop ) + return false; + if( b1.m_aBorderBottom != b2.m_aBorderBottom ) + return false; + return true; +} + +bool operator!=(XFBorders& b1, XFBorders& b2) +{ + return !(b1 == b2); +} + +void XFBorders::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + if( m_aBorderLeft.GetLineWidth().getLength() ) + pAttrList->AddAttribute( A2OUSTR("style:border-line-width-left"), m_aBorderLeft.GetLineWidth() ); + if( m_aBorderRight.GetLineWidth().getLength() ) + pAttrList->AddAttribute( A2OUSTR("style:border-line-width-right"), m_aBorderRight.GetLineWidth() ); + if( m_aBorderTop.GetLineWidth().getLength() ) + pAttrList->AddAttribute( A2OUSTR("style:border-line-width-top"), m_aBorderTop.GetLineWidth() ); + if( m_aBorderBottom.GetLineWidth().getLength() ) + pAttrList->AddAttribute( A2OUSTR("style:border-line-width-bottom"), m_aBorderBottom.GetLineWidth() ); + + if( m_aBorderLeft.ToString().getLength() ) + pAttrList->AddAttribute( A2OUSTR("fo:border-left"), m_aBorderLeft.ToString() ); + else + pAttrList->AddAttribute( A2OUSTR("fo:border-left"), A2OUSTR("none") ); + + if( m_aBorderRight.ToString().getLength() ) + pAttrList->AddAttribute( A2OUSTR("fo:border-right"), m_aBorderRight.ToString() ); + else + pAttrList->AddAttribute( A2OUSTR("fo:border-right"), A2OUSTR("none") ); + + if( m_aBorderTop.ToString().getLength() ) + pAttrList->AddAttribute( A2OUSTR("fo:border-top"), m_aBorderTop.ToString() ); + else + pAttrList->AddAttribute( A2OUSTR("fo:border-top"), A2OUSTR("none") ); + + if( m_aBorderBottom.ToString().getLength() ) + pAttrList->AddAttribute( A2OUSTR("fo:border-bottom"), m_aBorderBottom.ToString() ); + else + pAttrList->AddAttribute( A2OUSTR("fo:border-bottom"), A2OUSTR("none") ); + +} diff --git a/lotuswordpro/source/filter/xfilter/xfborders.hxx b/lotuswordpro/source/filter/xfilter/xfborders.hxx new file mode 100644 index 000000000000..a4c82736e4bf --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfborders.hxx @@ -0,0 +1,195 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Border object,now only used by paragraph object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-14 create this file. + * 2005-01-17 changed for the XFColor object. + ************************************************************************/ +#ifndef _XFBORDERS_HXX +#define _XFBORDERS_HXX + +#include "xfglobal.hxx" +#include "xfcolor.hxx" + +/** + * @brief + * Single border obejct for all objects with borders. + */ +class XFBorder +{ +public: + XFBorder(); + +public: + /** + * @descr Set border color. + */ + void SetColor(XFColor& color); + + /** + * @descr Set border width in cm. + */ + void SetWidth(double width); + + /** + * @descr Set whether the border has double line. + */ + void SetDoubleLine(sal_Bool dual,sal_Bool bSameWidth); + + /** + * @descr Set inner line width for border with double line. + */ + void SetWidthInner(double inner); + + /** + * @descr Set space between double lines fo border. + */ + void SetWidthSpace(double space); + + /** + * @descr Set outter line width for border with double line. + */ + void SetWidthOutter(double outer); + +private: + /** + * @descr Forst line width to OOo border width format. + */ + rtl::OUString GetLineWidth(); + + rtl::OUString ToString(); + + friend bool operator==(XFBorder& b1, XFBorder& b2); + friend bool operator!=(XFBorder& b1, XFBorder& b2); + friend class XFBorders; + +private: + double m_fOffset; + XFColor m_aColor; + sal_Bool m_bDouble; + sal_Bool m_bSameWidth; + double m_fWidthInner; + double m_fWidthSpace; + double m_fWidthOutter; +}; + +/** + * @brief + * Borders for object with borders. + * Borders may include (right,left,top,bottom) borders. + */ +class XFBorders +{ +public: + XFBorders(){} + +public: + /** + * @descr Set color of border side. + */ + void SetColor(enumXFBorder side, XFColor& color); + + /** + * @descr Set width or border side. + */ + void SetWidth(enumXFBorder side, double width); + + /** + * @descr Set border side as doubel line. + * @param bSameWidth whether two borders are same width. + */ + void SetDoubleLine(enumXFBorder side, sal_Bool dual,sal_Bool bSameWidth); + + /** + * @descr Set inner border with of border side. + */ + void SetWidthInner(enumXFBorder side, double inner); + + /** + * @descr Set space between two borders fo border side. + */ + void SetWidthSpace(enumXFBorder side, double space); + + /** + * @descr Set outter border width of border side. + */ + void SetWidthOutter(enumXFBorder side, double outer); + + XFBorder * GetLeft() {return &m_aBorderLeft;}; + + XFBorder * GetRight() {return &m_aBorderRight;}; + + XFBorder * GetTop() {return &m_aBorderTop;}; + + XFBorder * GetBottom() {return &m_aBorderBottom;}; + + void ToXml(IXFStream *pStrm); + + friend bool operator==(XFBorders& b1, XFBorders& b2); + friend bool operator!=(XFBorders& b1, XFBorders& b2); + +private: + XFBorder m_aBorderLeft; + XFBorder m_aBorderRight; + XFBorder m_aBorderTop; + XFBorder m_aBorderBottom; +}; + + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfbreaks.hxx b/lotuswordpro/source/filter/xfilter/xfbreaks.hxx new file mode 100644 index 000000000000..320416b52de3 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfbreaks.hxx @@ -0,0 +1,146 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Breaks of paragraph. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-27 create this file. + ************************************************************************/ +#ifndef _XFBREAKS_HXX +#define _XFBREAKS_HXX + +#include "xfglobal.hxx" +#include "ixfproperty.hxx" + +/** + * @descr Page|Column break object. + */ +class XFBreaks : public IXFProperty +{ +public: + XFBreaks(); + + XFBreaks(enumXFBreaks breaks); + +public: + /** + * @descr Set break type, pls refer to enumXFBreaks. + */ + void SetBreakType(enumXFBreaks breaks); + + /** + * @descr Output breaks object. + */ + virtual void ToXml(IXFStream *pStrm); + + friend bool operator==(XFBreaks& b1, XFBreaks& b2); + friend bool operator!=(XFBreaks& b1, XFBreaks& b2); + +private: + enumXFBreaks m_eBreaks; +}; + +inline XFBreaks::XFBreaks() +{ + m_eBreaks = enumXFBreakAuto; +} + +inline XFBreaks::XFBreaks(enumXFBreaks breaks):m_eBreaks(breaks) +{ +} + +inline void XFBreaks::SetBreakType(enumXFBreaks breaks) +{ + m_eBreaks = breaks; +} + +inline void XFBreaks::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + switch(m_eBreaks) + { + case enumXFBreakAuto: + break; + case enumXFBreakBefPage: + pAttrList->AddAttribute( A2OUSTR("fo:break-before"), A2OUSTR("page") ); + break; + case enumXFBreakBefColumn: + pAttrList->AddAttribute( A2OUSTR("fo:break-before"), A2OUSTR("column") ); + break; + case enumXFBreakAftPage: + pAttrList->AddAttribute( A2OUSTR("fo:break-after"), A2OUSTR("page") ); + break; + case enumXFBreakAftColumn: + pAttrList->AddAttribute( A2OUSTR("fo:break-after"), A2OUSTR("column") ); + break; + case enumXFBreakKeepWithNext: + pAttrList->AddAttribute( A2OUSTR("fo:keep-with-next"), A2OUSTR("true") ); + break; + } +} + +inline bool operator==(XFBreaks& b1, XFBreaks& b2) +{ + return b1.m_eBreaks == b2.m_eBreaks; +} + +inline bool operator!=(XFBreaks& b1, XFBreaks& b2) +{ + return !(b1==b2); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfcell.cxx b/lotuswordpro/source/filter/xfilter/xfcell.cxx new file mode 100644 index 000000000000..cd0ed984ecde --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfcell.cxx @@ -0,0 +1,303 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Table cell. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-21 create this file. + ************************************************************************/ +#include "xfcell.hxx" +#include "xfparagraph.hxx" +#include "xftable.hxx" +#include "xfrow.hxx" + +XFCell::XFCell() +{ + m_pSubTable = NULL; + m_nCol = 0; + m_nColSpaned = 1; + m_nRepeated = 0; + m_eValueType = enumXFValueTypeNone; + m_bProtect = sal_False; +} + +XFCell::XFCell(const XFCell& other) +{ + if( other.m_pSubTable ) + m_pSubTable = new XFTable(*other.m_pSubTable); + else + m_pSubTable = NULL; + m_pOwnerRow = NULL; + m_nCol = other.m_nCol; + m_nColSpaned = other.m_nColSpaned; + m_nRepeated = other.m_nRepeated; + m_eValueType = other.m_eValueType; + m_bProtect = other.m_bProtect; + m_strValue = other.m_strValue; + m_strDisplay = other.m_strDisplay; + m_strFormula = other.m_strFormula; +} + +XFCell& XFCell::operator=(const XFCell& other) +{ + if( m_pSubTable ) + delete m_pSubTable; + + if( other.m_pSubTable ) + m_pSubTable = new XFTable(*other.m_pSubTable); + else + m_pSubTable = NULL; + m_pOwnerRow = NULL; + m_nCol = other.m_nCol; + m_nColSpaned = other.m_nColSpaned; + m_nRepeated = other.m_nRepeated; + m_eValueType = other.m_eValueType; + m_bProtect = other.m_bProtect; + m_strValue = other.m_strValue; + m_strDisplay = other.m_strDisplay; + m_strFormula = other.m_strFormula; + + return *this; +} + +XFCell::~XFCell() +{ + if( m_pSubTable ) + delete m_pSubTable; +} + +void XFCell::Add(IXFContent *pContent) +{ + if( m_eValueType != enumXFValueTypeNone ) + { + Reset(); + m_eValueType = enumXFValueTypeNone; + } + if( m_pSubTable ) + { + assert(false); + return; + } + if( pContent->GetContentType() == enumXFContentTable ) + { + XFTable *pTable = static_cast<XFTable*>(pContent); + if( !pTable ) + return; + //the sub table will fill all the cell, there can't be other contents. + pTable->SetOwnerCell(this); + m_pSubTable = pTable; + } + else if( pContent->GetContentType() == enumXFContentText ) + { + XFParagraph *pPara = new XFParagraph(); + pPara->Add(pContent); + XFContentContainer::Add(pPara); + } + else if( pContent->GetContentType() == enumXFContentFrame ) + { + XFParagraph *pPara = new XFParagraph(); + pPara->Add(pContent); + XFContentContainer::Add(pPara); + } + else + { + XFContentContainer::Add(pContent); + } +} + + +void XFCell::SetValue(double value) +{ + SetValue(DoubleToOUString(value,18)); +} + +void XFCell::SetValue(rtl::OUString value) +{ + m_eValueType = enumXFValueTypeFloat; + m_strValue = value; + + //Reset(); + //XFParagraph *pPara = new XFParagraph(); + //pPara->Add(m_strValue); + //XFContentContainer::Add(pPara); +} + +void XFCell::SetString(rtl::OUString str) +{ + m_eValueType = enumXFValueTypeString; + m_strValue = str; + + Reset(); + XFParagraph *pPara = new XFParagraph(); + pPara->Add(m_strValue); + XFContentContainer::Add(pPara); +} + +void XFCell::SetPercent(double percent) +{ + SetPercent(DoubleToOUString(percent)); +} + +void XFCell::SetPercent(rtl::OUString percent) +{ + m_eValueType = enumXFValueTypePercentage; + m_strValue = percent; + + Reset(); + XFParagraph *pPara = new XFParagraph(); + pPara->Add(m_strValue); + XFContentContainer::Add(pPara); +} + +void XFCell::SetDate(rtl::OUString date) +{ + m_eValueType = enumXFValueTypeDate; + m_strValue = date; + + Reset(); + XFParagraph *pPara = new XFParagraph(); + pPara->Add(m_strValue); + XFContentContainer::Add(pPara); +} + +void XFCell::SetTime(rtl::OUString time) +{ + m_eValueType = enumXFValueTypeTime; + m_strValue = time; + + Reset(); + XFParagraph *pPara = new XFParagraph(); + pPara->Add(m_strValue); + XFContentContainer::Add(pPara); +} + +void XFCell::SetCurrency(rtl::OUString currency) +{ + m_eValueType = enumXFValueTypeCurrency; + m_strValue = currency; + + Reset(); + XFParagraph *pPara = new XFParagraph(); + pPara->Add(m_strValue); + XFContentContainer::Add(pPara); +} + +void XFCell::SetDisplay(rtl::OUString display) +{ + m_strDisplay = display; + + Reset(); + XFParagraph *pPara = new XFParagraph(); + pPara->Add(m_strDisplay); + XFContentContainer::Add(pPara); +} + +rtl::OUString XFCell::GetCellName() +{ + rtl::OUString name; + XFRow *pRow = m_pOwnerRow; + XFTable *pTable = pRow->GetOwnerTable(); + + if( !pRow || !pTable ) + return A2OUSTR(""); + if( pTable->IsSubTable() ) + { + name = pTable->GetTableName() + A2OUSTR(".") + Int32ToOUString(m_nCol) + A2OUSTR(".") + Int32ToOUString(pRow->GetRow()); + } + else + { + name = GetTableColName(m_nCol) + Int32ToOUString(pRow->GetRow()); + } + return name; +} + +void XFCell::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + if( GetStyleName().getLength() ) + pAttrList->AddAttribute( A2OUSTR("table:style-name"), GetStyleName() ); + if( m_nColSpaned>1 ) + pAttrList->AddAttribute( A2OUSTR("table:number-columns-spanned"), Int32ToOUString(m_nColSpaned) ); + if( m_nRepeated ) + pAttrList->AddAttribute( A2OUSTR("table:number-columns-repeated"), Int32ToOUString(m_nRepeated) ); + if( m_eValueType != enumXFValueTypeNone ) + { + pAttrList->AddAttribute( A2OUSTR("table:value-type"), GetValueType(m_eValueType) ); + pAttrList->AddAttribute( A2OUSTR("table:value"), m_strValue ); + } + if( m_strFormula.getLength() > 0 ) + pAttrList->AddAttribute( A2OUSTR("table:formula"), m_strFormula ); + + if( m_bProtect ) + pAttrList->AddAttribute( A2OUSTR("table:protected"), A2OUSTR("true") ); + + //for test only. +// pAttrList->AddAttribute( A2OUSTR("table:cell-name"), GetCellName() ); + + pStrm->StartElement( A2OUSTR("table:table-cell") ); + + if( m_pSubTable ) + m_pSubTable->ToXml(pStrm); + else + { + XFContentContainer::ToXml(pStrm); + } + + pStrm->EndElement( A2OUSTR("table:table-cell") ); +} diff --git a/lotuswordpro/source/filter/xfilter/xfcell.hxx b/lotuswordpro/source/filter/xfilter/xfcell.hxx new file mode 100644 index 000000000000..419df9174acc --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfcell.hxx @@ -0,0 +1,261 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Table cell. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-21 create this file. + ************************************************************************/ +#ifndef _XFCell_HXX +#define _XFCell_HXX + +#include "xfcontent.hxx" +#include "xfcontentcontainer.hxx" +#include <vector> + +class XFTable; +class XFRow; + +/** + * @descr Table cell object. + */ +class XFCell : public XFContentContainer +{ +public: + XFCell(); + + XFCell(const XFCell& other); + + XFCell& operator=(const XFCell& other); + + virtual ~XFCell(); + +public: + /** + * @descr Add content for table cell. + */ + void Add(IXFContent *pContent); + + /** + * @descr If cell spans more the one column, then set column span. + */ + void SetColumnSpaned(sal_Int32 num); + + /** + * @descr Set whether the following cells use the same style and content. + */ + void SetRepeated(sal_Int32 num); + + /** + * @descr Set cell number value. + */ + void SetValue(double value); + + /** + * @descr Set cell number value. + */ + void SetValue(rtl::OUString value); + + /** + * @descr Set cell string value. + */ + void SetString(rtl::OUString str); + + /** + * @descr Set cell as a percent value with value percent. + */ + void SetPercent(double percent); + + /** + * @descr Set cell as a percent value with value percent. + */ + void SetPercent(rtl::OUString percent); + + /** + * @descr Set cell as a date value. + */ + void SetDate(rtl::OUString date); + + /** + * @descr Set cell as a time value. + */ + void SetTime(rtl::OUString time); + + /** + * @descr Set cell as a currency value. + */ + void SetCurrency(rtl::OUString currency); + + /** + * @descr Set cell display string. + */ + void SetDisplay(rtl::OUString display); + + /** + * @descr Set cell formula. + */ + void SetFormula(rtl::OUString formula); + + /** + * @descr Set cell protected. + */ + void SetProtect(sal_Bool protect=sal_True); + + /** + * @descr Set cell column id. + */ + void SetCol(sal_Int32 col); + + /** + * @descr Set cell owner row. + */ + void SetOwnerRow(XFRow *pRow); + + /** + * @descr Return cell name. It's a tool function for formula. + */ + rtl::OUString GetCellName(); + + /** + * @descr Return cell column id. + */ + sal_Int32 GetCol(); + + /** + * @descr return cell'owner row. + */ + XFRow* GetOwnerRow(); + + /** + * @descr If cell has a sub-table, return it, else return NULL. + */ + XFTable* GetSubTable(); + + /** + * @descr return cell column span property. + */ + sal_Int32 GetColSpaned(); + + /** + * @descr Output cell as xml element. + */ + virtual void ToXml(IXFStream *pStrm); + +private: + XFRow *m_pOwnerRow; + XFTable *m_pSubTable; + sal_Int32 m_nCol; + sal_Int32 m_nColSpaned; + sal_Int32 m_nRepeated; + enumXFValueType m_eValueType; + rtl::OUString m_strValue; + rtl::OUString m_strDisplay; + rtl::OUString m_strFormula; + sal_Bool m_bProtect; +}; + +inline void XFCell::SetColumnSpaned(sal_Int32 num) +{ + m_nColSpaned = num; +} + +inline void XFCell::SetRepeated(sal_Int32 repeated) +{ + m_nRepeated = repeated; +} + +inline void XFCell::SetFormula(rtl::OUString formula) +{ + m_strFormula = formula; +} + +inline void XFCell::SetProtect(sal_Bool protect/* =sal_True */) +{ + m_bProtect = protect; +} + +inline void XFCell::SetCol(sal_Int32 col) +{ + m_nCol = col; +} + +inline void XFCell::SetOwnerRow(XFRow *pRow) +{ + m_pOwnerRow = pRow; +} + +inline sal_Int32 XFCell::GetCol() +{ + return m_nCol; +} + +inline XFRow* XFCell::GetOwnerRow() +{ + return m_pOwnerRow; +} + +inline XFTable* XFCell::GetSubTable() +{ + return m_pSubTable; +} + +inline sal_Int32 XFCell::GetColSpaned() +{ + return m_nColSpaned; +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfcellstyle.cxx b/lotuswordpro/source/filter/xfilter/xfcellstyle.cxx new file mode 100644 index 000000000000..cd1e04c77f68 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfcellstyle.cxx @@ -0,0 +1,308 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Table cell style. Number format, string value, and so on... + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-28 create this file. + ************************************************************************/ +#include "xfcellstyle.hxx" +#include "xfborders.hxx" +#include "xffont.hxx" +#include "xfbgimage.hxx" + + +XFCellStyle::XFCellStyle() +{ + m_eHoriAlign = enumXFAlignNone; + m_eVertAlign = enumXFAlignNone; + m_fTextIndent = 0; + m_pBorders = NULL; + m_pFont = NULL; + m_pBackImage = NULL; + m_bWrapText = sal_False; +} + +XFCellStyle::~XFCellStyle() +{ + if( m_pBorders ) + delete m_pBorders; +} + + +void XFCellStyle::SetParentStyle(rtl::OUString parent) +{ + m_strParentStyleName = parent; +} + +void XFCellStyle::SetFont(XFFont *pFont) +{ + m_pFont = pFont; +} + +void XFCellStyle::SetIndent(double indent ) +{ + m_fTextIndent = indent; +} + +void XFCellStyle::SetMargins(double left, double right, double top, double bottom) +{ + if( left != -1 ) + m_aMargin.SetLeft(left); + if( right != -1 ) + m_aMargin.SetRight(right); + if( top != -1 ) + m_aMargin.SetTop(top); + if( bottom != -1 ) + m_aMargin.SetBottom( bottom ); +} + +void XFCellStyle::SetPadding(double left, double right,double top, double bottom) +{ + if( left != -1 ) + m_aPadding.SetLeft(left); + if( right != -1 ) + m_aPadding.SetRight(right); + if( top != -1 ) + m_aPadding.SetTop(top); + if( bottom != -1 ) + m_aPadding.SetBottom( bottom ); +} + +void XFCellStyle::SetShadow(enumXFShadowPos pos, double offset, XFColor& color) +{ + m_aShadow.SetPosition(pos); + m_aShadow.SetOffset(offset); + m_aShadow.SetColor(color); +} + +void XFCellStyle::SetBackColor(XFColor& color) +{ + m_aBackColor = color; +} + +void XFCellStyle::SetBackImage(XFBGImage *pImage) +{ + if( m_pBackImage ) + delete m_pBackImage; + m_pBackImage = pImage; +} + +void XFCellStyle::SetBorders(XFBorders *pBorders) +{ + if( m_pBorders ) + delete m_pBorders; + m_pBorders = pBorders; +} + +enumXFStyle XFCellStyle::GetStyleFamily() +{ + return enumXFStyleTableCell; +} + +/** + *Affirm whether two XFCellStyle objects are equal. + */ +sal_Bool XFCellStyle::Equal(IXFStyle *pStyle) +{ + if( this == pStyle ) + return sal_True; + if( !pStyle || pStyle->GetStyleFamily() != enumXFStyleTableCell ) + return sal_False; + + XFCellStyle *pOther = static_cast<XFCellStyle*>(pStyle); + if( !pOther ) + return sal_False; + + if( m_strDataStyle != pOther->m_strDataStyle ) + return sal_False; + + if( m_strParentStyleName != pOther->m_strParentStyleName ) + return sal_False; + if( m_fTextIndent != pOther->m_fTextIndent ) + return sal_False; + + //align: + if( m_eHoriAlign != pOther->m_eHoriAlign ) + return sal_False; + if( m_eVertAlign != pOther->m_eVertAlign ) + return sal_False; + + if( m_aBackColor != pOther->m_aBackColor ) + return sal_False; + //shadow: + if( m_aShadow != pOther->m_aShadow ) + return sal_False; + //margin: + if( m_aMargin != pOther->m_aMargin ) + return sal_False; + //padding: + if( m_aPadding != pOther->m_aPadding ) + return sal_False; + + //wrap: + if( m_bWrapText != pOther->m_bWrapText ) + return sal_False; + + //font: + if( m_pFont ) + { + if( !pOther->m_pFont ) + return sal_False; + if(*m_pFont != *pOther->m_pFont ) + return sal_False; + } + else if( pOther->m_pFont ) + return sal_False; + + //border: + if( m_pBorders ) + { + if( !pOther->m_pBorders ) + return sal_False; + if( *m_pBorders != *pOther->m_pBorders ) + return sal_False; + } + else if( pOther->m_pBorders ) + return sal_False; + + //if there is backimage + if( m_pBackImage ) + { + if( !pOther->m_pBackImage ) + return sal_False; + if( !m_pBackImage->Equal(pOther) ) + return sal_False; + } + else + { + if( pOther->m_pBackImage ) + return sal_False; + } + + return sal_True; +} + +void XFCellStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + rtl::OUString style = GetStyleName(); + + pAttrList->Clear(); + if( style.getLength() ) + pAttrList->AddAttribute(A2OUSTR("style:name"),GetStyleName()); + if( GetParentStyleName().getLength() > 0 ) + pAttrList->AddAttribute(A2OUSTR("style:parent-style-name"),GetParentStyleName()); + + pAttrList->AddAttribute(A2OUSTR("style:family"), A2OUSTR("table-cell")); + if( m_strParentStyleName.getLength() > 0 ) + pAttrList->AddAttribute(A2OUSTR("style:parent-style-name"),m_strParentStyleName); + if( m_strDataStyle.getLength()>0 ) + pAttrList->AddAttribute( A2OUSTR("style:data-style-name"), m_strDataStyle ); + + pStrm->StartElement(A2OUSTR("style:style")); + + //Paragraph properties: + pAttrList->Clear(); + + //text indent: + if( m_fTextIndent>FLOAT_MIN ) + { + pAttrList->AddAttribute(A2OUSTR("fo:text-indent"), DoubleToOUString(m_fTextIndent) + A2OUSTR("cm") ); + } + //padding: + m_aPadding.ToXml(pStrm); + //margin: + m_aMargin.ToXml(pStrm); + + //text horizontal align: + if( m_eHoriAlign != enumXFAlignNone ) + { + pAttrList->AddAttribute(A2OUSTR("fo:text-align"), GetAlignName(m_eHoriAlign) ); + } + //text vertical align + if( m_eVertAlign != enumXFAlignNone ) + pAttrList->AddAttribute( A2OUSTR("fo:vertical-align"), GetAlignName(m_eVertAlign) ); + + //wrap text: + if( m_bWrapText ) + pAttrList->AddAttribute( A2OUSTR("fo:wrap-option"), A2OUSTR("wrap") ); + + //shadow: + m_aShadow.ToXml(pStrm); + //borders: + if( m_pBorders ) + m_pBorders->ToXml(pStrm); + + //background color: + if( m_aBackColor.IsValid() && !m_pBackImage ) + { + pAttrList->AddAttribute(A2OUSTR("fo:background-color"), m_aBackColor.ToString() ); + } + //Font properties: + if( m_pFont ) + m_pFont->ToXml(pStrm); + + pStrm->StartElement(A2OUSTR("style:properties")); + + if( m_pBackImage ) + m_pBackImage->ToXml(pStrm); + + pStrm->EndElement(A2OUSTR("style:properties")); + + pStrm->EndElement(A2OUSTR("style:style")); +} diff --git a/lotuswordpro/source/filter/xfilter/xfcellstyle.hxx b/lotuswordpro/source/filter/xfilter/xfcellstyle.hxx new file mode 100644 index 000000000000..9b6dd0d9bccf --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfcellstyle.hxx @@ -0,0 +1,204 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Table cell style. Number format, string value, and so on... + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-28 create this file. + ************************************************************************/ +#ifndef _XFCELLSTYLE_HXX +#define _XFCELLSTYLE_HXX + +#include "xfstyle.hxx" +#include "xfcolor.hxx" +#include "xfmargins.hxx" +#include "xfpadding.hxx" +#include "xfshadow.hxx" + +class XFBorders; +class XFFont; +class XFBorders; +class XFMargins; +class XFBGImage; + +/** + * @descr Style obejct for cell. + */ +class XFCellStyle : public XFStyle +{ +public: + XFCellStyle(); + + virtual ~XFCellStyle(); + +public: + /** + * @descr Set cell data format style name. + */ + void SetDataStyle(rtl::OUString style); + + /** + * @descr: Parant paragraph style. + */ + void SetParentStyle(rtl::OUString parent); + + /** + * @descr: set the paragraph defaut font. + * @param: font font obejct to be setted.Font object are deleted by font-factory,so + * dont't delete it in the destructure function of para style. + */ + void SetFont(XFFont *font); + + /** + * @descr: Set the indent of the paragraph.This is the indent for + the first line. + * @param: indent value of the first-line indent. + */ + void SetIndent(double indent ); + + /** + * @descr: Set the pading of the paragraph.This is the distance + between the border and the top of the text. + * @param: indent value of the padding. + */ + void SetPadding(double left, double right = -1, double top = -1, double bottom = -1); + + /** + * @descr: Set the Margins of the paragraph. + * @param: -1: don't change. + other: set value. + */ + void SetMargins(double left, double right=-1,double top=-1, double bottom=-1); + + /** + * @descr: Set alignment property of the cell. + * @param: eAlign alignment type,left,right,center or justify. + */ + void SetAlignType(enumXFAlignType hori=enumXFAlignNone, enumXFAlignType vert = enumXFAlignBottom); + + /** + * @descr: Set the shadow of the paragraph.there is 4 postions, you + can find it in the definition of enumShadowPos. + * @param: pos + * @param: offset the distance between the paragraph border and the shadow. + * @param: color color to fill the shadow. + */ + void SetShadow(enumXFShadowPos pos, double offset, XFColor& color); + + /** + * @descr: The borders is complex,so you have to create one before use. + Very few paragraphs will readly have borders property,this way + we can save much memory. + * @param: pBorders borders of the paragraph,please reference the XFBorders. + */ + void SetBorders(XFBorders *pBorders); + + /** + * @descr: Set background color of the cell. + * @param: color value of the back color. + */ + void SetBackColor(XFColor& color); + + /** + * descr: set cell background image. + */ + void SetBackImage(XFBGImage *pImage); + + /** + * @descr Set cell value to warp if it's content is too long to be placed in an single cell. + */ + void SetWrapText(sal_Bool wrap); + + virtual enumXFStyle GetStyleFamily(); + + virtual sal_Bool Equal(IXFStyle *pStyle); + + virtual void ToXml(IXFStream *pStrm); + +private: + rtl::OUString m_strDataStyle; + rtl::OUString m_strParentStyleName; + enumXFAlignType m_eHoriAlign; + enumXFAlignType m_eVertAlign; + + double m_fTextIndent; + XFColor m_aBackColor; + XFBGImage *m_pBackImage; + XFMargins m_aMargin; + XFPadding m_aPadding; + XFFont *m_pFont; + XFShadow m_aShadow; + XFBorders *m_pBorders; + sal_Bool m_bWrapText; +}; + +inline void XFCellStyle::SetAlignType(enumXFAlignType hori, enumXFAlignType vert) +{ + m_eHoriAlign = hori; + m_eVertAlign = vert; +} + +inline void XFCellStyle::SetDataStyle(rtl::OUString style) +{ + m_strDataStyle = style; +} + +inline void XFCellStyle::SetWrapText(sal_Bool wrap) +{ + m_bWrapText = wrap; +} +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfchange.cxx b/lotuswordpro/source/filter/xfilter/xfchange.cxx new file mode 100644 index 000000000000..9f4eee282ccb --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfchange.cxx @@ -0,0 +1,163 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jun 2005 Created + ************************************************************************/ +#include "xfchange.hxx" + +void XFChangeList::ToXml(IXFStream *pStrm) +{ + if (XFContentContainer::GetCount() == 0) + return; + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); +//Add by ,for disable change tracking,2005/11/21 + pAttrList->AddAttribute( A2OUSTR("text:track-changes"),A2OUSTR("false")); +//Add end + pStrm->StartElement( A2OUSTR("text:tracked-changes") ); + XFContentContainer::ToXml(pStrm); + pStrm->EndElement(A2OUSTR("text:tracked-changes")); +} + +void XFChangeRegion::ToXml(IXFStream *pStrm) +{ +} + +void XFChangeInsert::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + if(m_sID.getLength() == 0) + return; + pAttrList->AddAttribute( A2OUSTR("text:id"),m_sID); + + pStrm->StartElement( A2OUSTR("text:changed-region") ); + pStrm->StartElement( A2OUSTR("text:insertion") ); + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("office:chg-author"),m_sEditor); + pAttrList->AddAttribute( A2OUSTR("office:chg-date-time"),A2OUSTR("0000-00-00T00:00:00")); + pStrm->StartElement( A2OUSTR("office:change-info") ); + pStrm->EndElement( A2OUSTR("office:change-info") ); + pStrm->EndElement( A2OUSTR("text:insertion") ); + pStrm->EndElement( A2OUSTR("text:changed-region") ); +} + +void XFChangeDelete::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + if(m_sID.getLength() == 0) + return; + pAttrList->AddAttribute( A2OUSTR("text:id"),m_sID); + + pStrm->StartElement( A2OUSTR("text:changed-region") ); + pStrm->StartElement( A2OUSTR("text:deletion") ); + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("office:chg-author"),m_sEditor); + pAttrList->AddAttribute( A2OUSTR("office:chg-date-time"),A2OUSTR("0000-00-00T00:00:00")); + pStrm->StartElement( A2OUSTR("office:change-info") ); + pStrm->EndElement( A2OUSTR("office:change-info") ); + +/// XFContentContainer::ToXml(pStrm);//delete , note by ,2005/7/1 + + pStrm->EndElement( A2OUSTR("text:deletion") ); + pStrm->EndElement( A2OUSTR("text:changed-region") ); +} + +void XFChange::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + if(m_sID.getLength() == 0) + return; + pAttrList->AddAttribute( A2OUSTR("text:change-id"),m_sID); + + pStrm->StartElement( A2OUSTR("text:change") ); + pStrm->EndElement( A2OUSTR("text:change") ); +} + +void XFChangeStart::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + if(m_sID.getLength() == 0) + return; + pAttrList->AddAttribute( A2OUSTR("text:change-id"),m_sID); + + pStrm->StartElement( A2OUSTR("text:change-start") ); + pStrm->EndElement( A2OUSTR("text:change-start") ); +} + +void XFChangeEnd::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + if(m_sID.getLength() == 0) + return; + pAttrList->AddAttribute( A2OUSTR("text:change-id"),m_sID); + + pStrm->StartElement( A2OUSTR("text:change-end") ); + pStrm->EndElement( A2OUSTR("text:change-end") ); +} diff --git a/lotuswordpro/source/filter/xfilter/xfchange.hxx b/lotuswordpro/source/filter/xfilter/xfchange.hxx new file mode 100644 index 000000000000..e1e627f36253 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfchange.hxx @@ -0,0 +1,146 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ +/************************************************************************* + * Change History + Jun 2005 Created + ************************************************************************/ +#ifndef _XFCHANGE_HXX_ +#define _XFCHANGE_HXX_ + +#include "xfglobal.hxx" +#include "ixfstream.hxx" +#include "xfcontent.hxx" +#include "xfcontentcontainer.hxx" +#include <rtl/ustring.hxx> + +class XFChangeList : public XFContentContainer +{ +public: + XFChangeList(){}; + ~XFChangeList(){}; + virtual void ToXml(IXFStream *pStrm); +}; + +class XFChangeRegion : public XFContentContainer +{ +public: + XFChangeRegion(){}; + ~XFChangeRegion(){}; + virtual void ToXml(IXFStream *pStrm); + void SetChangeID(rtl::OUString sID){m_sID=sID;} + rtl::OUString GetChangeID(){return m_sID;} + void SetEditor(rtl::OUString sEditor){m_sEditor=sEditor;} +protected: + rtl::OUString m_sID; + rtl::OUString m_sEditor; +}; + +class XFChangeInsert : public XFChangeRegion +{ +public: + XFChangeInsert(){}; + ~XFChangeInsert(){}; + void ToXml(IXFStream *pStrm); +}; + +class XFChangeDelete : public XFChangeRegion +{ +public: + XFChangeDelete(){}; + ~XFChangeDelete(){}; + void ToXml(IXFStream *pStrm); +}; + +class XFChange : public XFContent +{ +public: + XFChange(){}; + ~XFChange(){}; + void ToXml(IXFStream *pStrm); + void SetChangeID(rtl::OUString sID){m_sID=sID;} + rtl::OUString GetChangeID(){return m_sID;} +private: + rtl::OUString m_sID; +}; + +class XFChangeStart : public XFContent +{ +public: + XFChangeStart(){}; + ~XFChangeStart(){}; + void ToXml(IXFStream *pStrm); + void SetChangeID(rtl::OUString sID){m_sID=sID;} + rtl::OUString GetChangeID(){return m_sID;} +private: + rtl::OUString m_sID; +}; + +class XFChangeEnd : public XFContent +{ +public: + XFChangeEnd(){}; + ~XFChangeEnd(){}; + void ToXml(IXFStream *pStrm); + void SetChangeID(rtl::OUString sID){m_sID=sID;} + rtl::OUString GetChangeID(){return m_sID;} +private: + rtl::OUString m_sID; +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfchartstreamtools.cxx b/lotuswordpro/source/filter/xfilter/xfchartstreamtools.cxx new file mode 100644 index 000000000000..9befd8c4d4fc --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfchartstreamtools.cxx @@ -0,0 +1,117 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/***************************************************************************** +* Change History +* <<Date>> <<Name of editor>> <<Description>> +2005/2 draft code for implementation of chart stream helpers +****************************************************************************/ + +/** + * @file + * For LWP filter architecture prototype +*/ + +#include "xfchartstreamtools.hxx" +#include "xfdrawchart.hxx" +#include "xfparagraph.hxx" + +#include <com/sun/star/xml/sax/SAXParseException.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> + +/** +* @short Parse the xml stream +* @param rInpStream the xml stream +* @param aHandler xml handler +*/ +void XFChartStreamTools::ParseStream(SvStorageStreamRef rInpStream, Reference<XDocumentHandler> aHandler) +{ + //Create parser + uno::Reference< xml::sax::XParser > xParser; + { + uno::Reference< lang::XMultiServiceFactory> + xServiceFactory( ::comphelper::getProcessServiceFactory() ); + if( !xServiceFactory.is() ) + { + assert(false); + return; + } + xParser = uno::Reference< xml::sax::XParser > ( + xServiceFactory->createInstance( ::rtl::OUString::createFromAscii( "com.sun.star.xml.sax.Parser" )), + uno::UNO_QUERY ); + + if( ! xParser.is() ) + { + assert(false); + return; + } + } + + xParser->setDocumentHandler( aHandler ); + xml::sax::InputSource aParserInput; + aParserInput.aInputStream = rInpStream->GetXInputStream(); + xParser->parseStream( aParserInput ); +} + +/** +* @short Parse the xml stream, content.xml & styles.xml for chart +* @param rStyleStream styles xml stream +* @param rCntStream the content xml stream +* @param pOutputStream the output stream +*/ +void XFChartStreamTools::ParseStream(SvStorageStreamRef rCntStream,IXFStream* pOutputStream) +{ + Reference<XDocumentHandler> pHandler( new XFChartXMLHandler(pOutputStream) ); + ParseStream(rCntStream,pHandler); +} diff --git a/lotuswordpro/source/filter/xfilter/xfchartstreamtools.hxx b/lotuswordpro/source/filter/xfilter/xfchartstreamtools.hxx new file mode 100644 index 000000000000..1a0f4dbf1fe6 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfchartstreamtools.hxx @@ -0,0 +1,111 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/***************************************************************************** +* Change History +* <<Date>> <<Name of editor>> <<Description>> +2005/2 draft code for chart stream helpers +****************************************************************************/ + +/** + * @file + * For LWP filter architecture prototype +*/ + +#ifndef LWPCHARTSTREAMTOOLS_HXX_ +#define LWPCHARTSTREAMTOOLS_HXX_ + +#include <tools/stream.hxx> +#include <tools/gen.hxx> + +//For sax parser +#ifndef _COM_SUN_STAR_XML_SAX_INPUTSOURCE_HPP_ +#include <com/sun/star/xml/sax/InputSource.hpp> +#endif + +#ifndef _COM_SUN_STAR_XML_SAX_XDTDHANDLER_HPP_ +#include <com/sun/star/xml/sax/XDTDHandler.hpp> +#endif + +#ifndef _COM_SUN_STAR_XML_SAX_XPARSER_HPP_ +#include <com/sun/star/xml/sax/XParser.hpp> +#endif + +#ifndef _COMPHELPER_PROCESSFACTORY_HXX_ +#include <comphelper/processfactory.hxx> +#endif + +using namespace ::com::sun::star; +using namespace ::rtl; +using namespace comphelper; + +#include "xfchartxmlhandler.hxx" +#include "xfrect.hxx" +class IXFContent; + +/** +* @brief +* tools class for chart stream process +*/ + +class XFChartStreamTools +{ +public: + static void ParseStream(SvStorageStreamRef rInpStream, Reference<XDocumentHandler> aHandler); + + static void ParseStream( SvStorageStreamRef rCntStream, + IXFStream* pOutputStream); +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfchartxmlhandler.cxx b/lotuswordpro/source/filter/xfilter/xfchartxmlhandler.cxx new file mode 100644 index 000000000000..6f613965ab51 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfchartxmlhandler.cxx @@ -0,0 +1,125 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/***************************************************************************** +* Change History +* <<Date>> <<Name of editor>> <<Description>> + 2005/2 draft code for Implementation of chart xml hander +****************************************************************************/ +/** +* @file +* For LWP filter architecture prototype +*/ + +#include "xfchartxmlhandler.hxx" + +Any SAL_CALL XFChartXMLHandler::queryInterface( const Type & rType ) throw( RuntimeException ) +{ + Any a = ::cppu::queryInterface( rType ,SAL_STATIC_CAST( XDocumentHandler*, this )); + if ( a.hasValue() ) + return a; + else + return OWeakObject::queryInterface( rType ); +} + +/** +* @short constructor of chart xml handler +* @descr +* @param pOutputStream the output stream +*/ +XFChartXMLHandler::XFChartXMLHandler(IXFStream* pOutputStream) +{ + m_pOutputStream = pOutputStream; +} + +/** +* @short handle the start element +* @descr ignore some elements here +* @param aName element name +* @param xAttribs the attribute list +*/ +void SAL_CALL XFChartXMLHandler::startElement( const ::rtl::OUString& aName, const Reference< XAttributeList >& xAttribs ) +throw (SAXException, RuntimeException) +{ + IXFAttrList* pList = m_pOutputStream->GetAttrList(); + pList->Clear(); + { + INT16 nLen = xAttribs->getLength(); + for( INT16 nC=0;nC<nLen;nC++) + { + OUString aName = xAttribs->getNameByIndex(nC); + OUString aVal = xAttribs->getValueByIndex(nC); + pList->AddAttribute(aName, aVal); + } + } + + m_pOutputStream->StartElement(aName); +} + +/** +* @short handle the end element +* @descr ignore some elements here +* @param aName element name +*/ +void SAL_CALL XFChartXMLHandler::endElement( const ::rtl::OUString& aName ) +throw (SAXException, RuntimeException) +{ + m_pOutputStream->EndElement(aName); +} + +void SAL_CALL XFChartXMLHandler::characters( const ::rtl::OUString& aChars ) +throw (SAXException, RuntimeException) +{ + m_pOutputStream->Characters(aChars); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfchartxmlhandler.hxx b/lotuswordpro/source/filter/xfilter/xfchartxmlhandler.hxx new file mode 100644 index 000000000000..0768dc1c3622 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfchartxmlhandler.hxx @@ -0,0 +1,128 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/***************************************************************************** +* Change History +* <<Date>> <<Name of editor>> <<Description>> +* 2005/2 draft code for XML handler of chart xml. +****************************************************************************/ + +/************************************************************************* + * @file + * For LWP filter architecture prototype + ************************************************************************/ + +#ifndef XFCHARTXMLHANDLER_HXX_ +#define XFCHARTXMLHANDLER_HXX_ + +#include <cppuhelper/weak.hxx> +#include <com/sun/star/xml/sax/XAttributeList.hpp> +#include <com/sun/star/xml/sax/XDocumentHandler.hpp> +#include <com/sun/star/xml/sax/SAXParseException.hpp> +#include <com/sun/star/uno/RuntimeException.hpp> + +#include <so3/svstor.hxx> +#include "ixfstream.hxx" +#include "ixfattrlist.hxx" +#include <rtl/ustring.hxx> +using namespace rtl; +using namespace ::com::sun::star::xml::sax; +using namespace ::com::sun::star::uno; + +/** +* @brief +* Chart xml handler +*/ + +class XFChartXMLHandler: public XDocumentHandler,public ::cppu::OWeakObject +{ +public: + XFChartXMLHandler(IXFStream* pOutputStream); + + // XInterface + virtual void SAL_CALL acquire() throw() + { OWeakObject::acquire(); } + virtual void SAL_CALL release() throw() + { OWeakObject::release(); } + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( + const ::com::sun::star::uno::Type & rType ) throw( ::com::sun::star::uno::RuntimeException ); + + virtual void SAL_CALL startDocument( ) + throw (SAXException, RuntimeException) {} + + virtual void SAL_CALL endDocument( ) + throw (SAXException, RuntimeException) {} + + virtual void SAL_CALL startElement( const ::rtl::OUString& aName, const Reference< XAttributeList >& xAttribs ) + throw (SAXException, RuntimeException); + + virtual void SAL_CALL endElement( const ::rtl::OUString& aName ) + throw (SAXException, RuntimeException); + + virtual void SAL_CALL characters( const ::rtl::OUString& aChars ) + throw (SAXException, RuntimeException); + + virtual void SAL_CALL ignorableWhitespace( const ::rtl::OUString& aWhitespaces ) + throw (SAXException, RuntimeException){} + + virtual void SAL_CALL processingInstruction( const ::rtl::OUString& aTarget, const ::rtl::OUString& aData ) + throw (SAXException, RuntimeException){} + + virtual void SAL_CALL setDocumentLocator( const Reference< XLocator >& xLocator ) + throw (SAXException, RuntimeException){} +protected: + IXFStream* m_pOutputStream; +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfcolor.cxx b/lotuswordpro/source/filter/xfilter/xfcolor.cxx new file mode 100644 index 000000000000..84ac9d684dd4 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfcolor.cxx @@ -0,0 +1,92 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Color object to serial to xml filter. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-17 create this file. + ************************************************************************/ +#include <stdio.h> +#include "xfcolor.hxx" + +rtl::OUString XFColor::ToString() const +{ + char buf[8]; + + rtl_zeroMemory(buf,8); + sprintf(buf,"#%2x%2x%2x",m_nRed, m_nGreen, m_nBlue); + for( int i=1; i<7;i++ ) + { + if( buf[i] == ' ' ) + buf[i] = '0'; + } + return rtl::OUString::createFromAscii(buf); +} + +bool operator==(XFColor& c1, XFColor& c2) +{ + return ( + (c1.m_nRed==c2.m_nRed)&& + (c1.m_nGreen==c2.m_nGreen)&& + (c1.m_nBlue==c2.m_nBlue) + ); +} + +bool operator!=(XFColor& c1, XFColor& c2) +{ + return !(c1==c2); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfcolor.hxx b/lotuswordpro/source/filter/xfilter/xfcolor.hxx new file mode 100644 index 000000000000..fd4f61d0ca31 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfcolor.hxx @@ -0,0 +1,130 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Color object to serial to xml filter. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-17 create this file. + ************************************************************************/ +#ifndef _XFCOLOR_HXX +#define _XFCOLOR_HXX + +#include "xfglobal.hxx" + +/** + * @brief + * Color object. + */ +class XFColor +{ +public: + XFColor():m_nRed((sal_Int8)0),m_nGreen((sal_Int8)0),m_nBlue((sal_Int8)0) + { + m_bValid = sal_False; + } + XFColor(sal_Int32 red, sal_Int32 green, sal_Int32 blue) + :m_nRed((sal_Int8)red),m_nGreen((sal_Int8)green),m_nBlue((sal_Int8)blue) + { + m_bValid = sal_True; + } + XFColor(sal_uInt32 color) + { + unsigned int c = color&0x00ffffff; + unsigned int temp = c; + m_nRed = temp&0x000000ff; + + temp = c; + m_nGreen = (temp&0x0000ff00)>>8; + + temp = c; + m_nBlue = (temp&0x00ff0000)>>16; + + m_bValid = sal_True; + } + + /** + * @descr return red part of the color. + */ + sal_uInt8 GetRed() const{ return m_nRed; } + + /** + * @descr return green part of the color. + */ + sal_uInt8 GetGreen() const{ return m_nGreen; } + + /** + * @descr return blue part of the color. + */ + sal_uInt8 GetBlue() const{ return m_nBlue; } + + /** + * @descr helper function to assert whether a color is valid. + */ + sal_Bool IsValid() const{ return m_bValid;}; + + rtl::OUString ToString ()const; + + friend bool operator==(XFColor& c1, XFColor& c2); + friend bool operator!=(XFColor& c1, XFColor& c2); +private: + sal_uInt8 m_nRed; + sal_uInt8 m_nGreen; + sal_uInt8 m_nBlue; + sal_Bool m_bValid; +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfcolstyle.cxx b/lotuswordpro/source/filter/xfilter/xfcolstyle.cxx new file mode 100644 index 000000000000..1a446d09a00d --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfcolstyle.cxx @@ -0,0 +1,95 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Column style object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-03-17 create this file. + ************************************************************************/ +#include "xfcolstyle.hxx" + +XFColStyle::XFColStyle() +{ + m_fWidth = 0; +} + +XFColStyle::~XFColStyle() +{ +} + +enumXFStyle XFColStyle::GetStyleFamily() +{ + return enumXFStyleTableCol; +} + +void XFColStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + + pAttrList->AddAttribute( A2OUSTR("style:name"), GetStyleName() ); + pAttrList->AddAttribute( A2OUSTR("style:family"), A2OUSTR("table-column") ); + pStrm->StartElement( A2OUSTR("style:style") ); + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("style:column-width"), DoubleToOUString(m_fWidth) + A2OUSTR("cm") ); + pStrm->StartElement( A2OUSTR("style:properties") ); + pStrm->EndElement( A2OUSTR("style:properties") ); + + pStrm->EndElement( A2OUSTR("style:style") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfcolstyle.hxx b/lotuswordpro/source/filter/xfilter/xfcolstyle.hxx new file mode 100644 index 000000000000..68216e50fd33 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfcolstyle.hxx @@ -0,0 +1,112 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Column style object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-03-17 create this file. + ************************************************************************/ +#ifndef _XFCOLSTYLE_HXX +#define _XFCOLSTYLE_HXX + +#include "xfstyle.hxx" + +/** + * @brief + * Column style, it has only one property-the column width. + */ +class XFColStyle : public XFStyle +{ +public: + XFColStyle(); + + virtual ~XFColStyle(); + +public: + /** + * @descr Set column width. + */ + void SetWidth(double width); + + /** + * @descr return column width. + */ + double GetWidth(); + + virtual enumXFStyle GetStyleFamily(); + + /** + * @descr output column style as an xml node. + */ + virtual void ToXml(IXFStream *pStrm); + +private: + double m_fWidth; +}; + +inline void XFColStyle::SetWidth(double width) +{ + m_fWidth = width; +} + +inline double XFColStyle::GetWidth() +{ + return m_fWidth; +} + + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfcolumns.cxx b/lotuswordpro/source/filter/xfilter/xfcolumns.cxx new file mode 100644 index 000000000000..b13ab6a49112 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfcolumns.cxx @@ -0,0 +1,213 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Columns styles for section, or paragraph. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-17 create this file. + ************************************************************************/ + +#include "xfcolumns.hxx" + +void XFColumn::SetRelWidth(sal_Int32 width) +{ + m_nRelWidth = width; +} + +sal_Int32 XFColumn::GetRelWidth() +{ + return m_nRelWidth; +} + +void XFColumn::SetMargins(double left, double right) +{ + m_fMarginLeft = left; + m_fMarginRight = right; +} + +double XFColumn::GetMarginLeft() +{ + return m_fMarginLeft; +} +double XFColumn::GetMarginRight() +{ + return m_fMarginRight; +} + +void XFColumn::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pAttrList->AddAttribute( A2OUSTR("style:rel-width"), Int32ToOUString(m_nRelWidth) + A2OUSTR("*") ); + pAttrList->AddAttribute( A2OUSTR("fo:margin-left"), DoubleToOUString(m_fMarginLeft) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("fo:margin-right"), DoubleToOUString(m_fMarginRight) + A2OUSTR("cm") ); + + pStrm->StartElement( A2OUSTR("style:column") ); + pStrm->EndElement( A2OUSTR("style:column") ); +} + +void XFColumnSep::SetRelHeight(sal_Int32 height) +{ + assert(height>=0&&height<=100); + m_nRelHeight = height; +} +void XFColumnSep::SetWidth(double width) +{ + m_fWidth = width; +} +void XFColumnSep::SetColor(XFColor& color) +{ + m_aColor = color; +} +void XFColumnSep::SetVerticalAlign(enumXFAlignType align) +{ + m_eVertAlign = align; +} + +void XFColumnSep::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("style:width"), DoubleToOUString(m_fWidth) + A2OUSTR("cm") ); + if( m_aColor.IsValid() ) + pAttrList->AddAttribute( A2OUSTR("style:color"), m_aColor.ToString() ); + pAttrList->AddAttribute( A2OUSTR("style:height"), Int32ToOUString(m_nRelHeight) + A2OUSTR("%") ); + //text align: + if( m_eVertAlign == enumXFAlignTop ) + { + pAttrList->AddAttribute(A2OUSTR("style:vertical-align"),A2OUSTR("top")); + } + else if( m_eVertAlign == enumXFAlignMiddle ) + { + pAttrList->AddAttribute(A2OUSTR("style:vertical-align"),A2OUSTR("middle")); + } + else if( m_eVertAlign == enumXFAlignBottom ) + { + pAttrList->AddAttribute(A2OUSTR("style:vertical-align"),A2OUSTR("bottom")); + } + + pStrm->StartElement( A2OUSTR("style:column-sep") ); + pStrm->EndElement( A2OUSTR("style:column-sep") ); +} + +void XFColumns::SetSeperator(sal_Int32 height, double width, XFColor color,enumXFAlignType align) +{ + m_aSeperator.SetRelHeight(height); + m_aSeperator.SetWidth(0.1); + m_aSeperator.SetColor(color); + m_aSeperator.SetVerticalAlign(align); + m_nFlag |= XFCOLUMNS_FLAG_SEPERATOR; +} + +void XFColumns::SetSeperator(XFColumnSep& aSeperator) +{ + m_aSeperator = aSeperator; + m_nFlag |= XFCOLUMNS_FLAG_SEPERATOR; +} + +void XFColumns::AddColumn(XFColumn& column) +{ + m_aColumns.push_back(column); +} + +sal_Int32 XFColumns::GetCount() +{ + return m_aColumns.size();; +} + +void XFColumns::SetGap(double fGap) +{ + m_fGap = fGap; + m_nFlag |= XFCOLUMNS_FLAG_GAP; +} + +void XFColumns::SetCount(sal_uInt16 nCount) +{ + m_nCount = nCount; +} + +void XFColumns::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + //pAttrList->AddAttribute( A2OUSTR("fo:column-count"), Int32ToOUString(GetCount()) ); + pAttrList->AddAttribute( A2OUSTR("fo:column-count"), Int32ToOUString(m_nCount)); + if( m_nFlag&XFCOLUMNS_FLAG_GAP ) + { + pAttrList->AddAttribute( A2OUSTR("fo:column-gap"), DoubleToOUString(m_fGap)+A2OUSTR("cm") ); + } + + pStrm->StartElement( A2OUSTR("style:columns") ); + + if( m_nFlag&XFCOLUMNS_FLAG_SEPERATOR ) //column-sep: + { + m_aSeperator.ToXml(pStrm); + } + + if(!(m_nFlag&XFCOLUMNS_FLAG_GAP) ) + { + std::vector<XFColumn>::iterator it; + for( it = m_aColumns.begin(); it != m_aColumns.end(); it++ ) + { + (*it).ToXml(pStrm); + } + } + pStrm->EndElement( A2OUSTR("style:columns") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfcolumns.hxx b/lotuswordpro/source/filter/xfilter/xfcolumns.hxx new file mode 100644 index 000000000000..01ec5d0aad64 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfcolumns.hxx @@ -0,0 +1,180 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Columns styles for section, or paragraph. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-17 create this file. + ************************************************************************/ +#ifndef _XFCOLUMNS_HXX +#define _XFCOLUMNS_HXX + +#include "xfglobal.hxx" +#include "xfcolor.hxx" +#include <vector> + +#define XFCOLUMNS_FLAG_SEPERATOR 0X00000001 +#define XFCOLUMNS_FLAG_GAP 0X00000010 + +/** + * @descr Columns object for page or section. + */ +class XFColumn : public IXFObject +{ +public: + XFColumn() + { + m_nRelWidth = 0; + m_fMarginLeft = 0; + m_fMarginRight = 0; + } + +public: + /** + * @descr Set column relative width. + */ + void SetRelWidth(sal_Int32 width); + + /** + * @descr return column relative width. + */ + sal_Int32 GetRelWidth(); + + /** + * @descr Set column margin left and margin right. + */ + void SetMargins(double left, double right); + + /** + * @descr return column left margin. + */ + double GetMarginLeft(); + + /** + * @descr return column right margin. + */ + double GetMarginRight(); + + /** + * @descr output column style as an xml node. + */ + virtual void ToXml(IXFStream *pStrm); + + friend bool operator==(XFColumn& c1, XFColumn& c2); + friend bool operator!=(XFColumn& c1, XFColumn& c2); + friend class XFColumns; + +private: + sal_Int32 m_nRelWidth; + double m_fMarginLeft; + double m_fMarginRight; +}; + +class XFColumnSep : public IXFObject +{ +public: + XFColumnSep() + { + m_nRelHeight = 100; + m_fWidth = 0; + m_eVertAlign = enumXFAlignMiddle; + } +public: + void SetRelHeight(sal_Int32 height); + void SetWidth(double width); + void SetColor(XFColor& color); + void SetVerticalAlign(enumXFAlignType align); + + virtual void ToXml(IXFStream *pStrm); + + friend bool operator==(XFColumnSep& sep1, XFColumnSep& sep2); + friend bool operator!=(XFColumnSep& sep1, XFColumnSep& sep2); + friend class XFColumns; +private: + sal_Int32 m_nRelHeight; + double m_fWidth; + XFColor m_aColor; + enumXFAlignType m_eVertAlign; +}; + +class XFColumns +{ +public: + XFColumns() + { + m_nFlag = 0; + m_fGap = 0; + } +public: + void SetSeperator(sal_Int32 height, double width, XFColor color = XFColor(0,0,0),enumXFAlignType align = enumXFAlignMiddle); + void SetSeperator(XFColumnSep& aSeperator); + void SetGap(double fGap); + void SetCount(sal_uInt16 nCount); + void AddColumn(XFColumn& column); + sal_Int32 GetCount(); + + void ToXml(IXFStream *pStrm); +private: + sal_Int32 m_nFlag; + sal_uInt16 m_nCount; + double m_fGap; + std::vector<XFColumn> m_aColumns; + XFColumnSep m_aSeperator; + +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfconditionformat.hxx b/lotuswordpro/source/filter/xfilter/xfconditionformat.hxx new file mode 100644 index 000000000000..264f9aef3b9d --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfconditionformat.hxx @@ -0,0 +1,70 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _XFCONDITIONFORMAT_HXX +#define _XFCONDITIONFORMAT_HXX + +class XFConditionFormat +{ +public: + XFConditionFormat(); + +public: + void SetCondition(); + +private: + +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfconfigmanager.cxx b/lotuswordpro/source/filter/xfilter/xfconfigmanager.cxx new file mode 100644 index 000000000000..4f24f124d05a --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfconfigmanager.cxx @@ -0,0 +1,107 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Manager for all config object,include line number config. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-03-23 create this file. + ************************************************************************/ +#include "xfconfigmanager.hxx" + +XFConfigManager::XFConfigManager() +{ + m_pLineNumberConfig = NULL; + m_pFootnoteConfig = NULL; + m_pEndnoteConfig = NULL; +} + +void XFConfigManager::SetLineNumberConfig(XFLineNumberConfig *pLNConfig) +{ + if( m_pLineNumberConfig ) + delete m_pLineNumberConfig; + m_pLineNumberConfig = pLNConfig; +} + +void XFConfigManager::SetFootnoteConfig(XFFootnoteConfig *pFNConfig) +{ + if( m_pFootnoteConfig ) + delete m_pFootnoteConfig; + m_pFootnoteConfig = pFNConfig; +} + +void XFConfigManager::SetEndnoteConfig(XFEndnoteConfig *pENConfig) +{ + if( m_pEndnoteConfig ) + delete m_pEndnoteConfig; + m_pEndnoteConfig = pENConfig; +} + +void XFConfigManager::ToXml(IXFStream *pStrm) +{ + if( m_pLineNumberConfig ) + AddStyle(m_pLineNumberConfig); + if( m_pFootnoteConfig ) + AddStyle(m_pFootnoteConfig); + if( m_pEndnoteConfig ) + AddStyle(m_pEndnoteConfig); + + XFStyleContainer::ToXml(pStrm); + XFStyleContainer::Reset(); + m_pLineNumberConfig = NULL; + m_pFootnoteConfig = NULL; + m_pEndnoteConfig = NULL; +} diff --git a/lotuswordpro/source/filter/xfilter/xfconfigmanager.hxx b/lotuswordpro/source/filter/xfilter/xfconfigmanager.hxx new file mode 100644 index 000000000000..34ec73952e77 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfconfigmanager.hxx @@ -0,0 +1,110 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Manager for all config object,include line number config. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-03-23 create this file. + ************************************************************************/ +#ifndef _XFCONFIGMANAGER_HXX +#define _XFCONFIGMANAGER_HXX + +#include "xfstylecont.hxx" +#include "xflinenumberconfig.hxx" +#include "xffootnoteconfig.hxx" +#include "xfendnoteconfig.hxx" +#include "xfdefs.hxx" + +/** + * @brief + * Config infomation for OOo document, ie, line count config, endnote and footnote config. + * This object should only exist one instance. + * Don't make this obejct an singleton because it's managed by XFStyleManager. + */ +class XFConfigManager : public XFStyleContainer +{ +public: + XFConfigManager(); + +public: + /** + * @descr Set line number config. + */ + void SetLineNumberConfig(XFLineNumberConfig *pLNConfig); + + /** + * @descr Set footnote config. + */ + void SetFootnoteConfig(XFFootnoteConfig *pFNConfig); + + /** + * @descr Set endnote config. + */ + void SetEndnoteConfig(XFEndnoteConfig *pFNConfig); + + /** + * @descr Output config information. + */ + virtual void ToXml(IXFStream *pStrm); + +private: + XFLineNumberConfig *m_pLineNumberConfig; + XFFootnoteConfig *m_pFootnoteConfig; + XFEndnoteConfig *m_pEndnoteConfig; +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfcontent.hxx b/lotuswordpro/source/filter/xfilter/xfcontent.hxx new file mode 100644 index 000000000000..f830d3782874 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfcontent.hxx @@ -0,0 +1,99 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Base class for the all content object,ie. text,paragraph,picture,and so on. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#ifndef _XFCONTENT_HXX +#define _XFCONTENT_HXX + +#include "ixfcontent.hxx" + +/** + * @descr + * Base class for all content object. + * There is only two properties:style name and content type in this class. + */ +class XFContent : public IXFContent +{ +public: + /** + * @short: return the content type. + */ + virtual enumXFContent GetContentType(){ return enumXFContentUnknown; } + + /** + * @short: All content except XFTextContent can have a style. + */ + virtual void SetStyleName(rtl::OUString style){m_strStyleName = style;} + + /** + * @short: return the style name. + */ + virtual rtl::OUString GetStyleName(){return m_strStyleName;} + + /** + */ + virtual IXFContent* Clone(){return NULL;} + +protected: + rtl::OUString m_strStyleName; +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfcontentcontainer.cxx b/lotuswordpro/source/filter/xfilter/xfcontentcontainer.cxx new file mode 100644 index 000000000000..979299dad5a7 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfcontentcontainer.cxx @@ -0,0 +1,218 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Container for content.It will destroy all children when destroy. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-27 create this file. + * 2005-04-08 add copy constructure. + ************************************************************************/ +#include "xfcontentcontainer.hxx" +#include "xftextcontent.hxx" + +XFContentContainer::XFContentContainer() +{ +} + +XFContentContainer::XFContentContainer(const XFContentContainer& other) +{ + std::vector<IXFContent*>::const_iterator it; + + for( it = other.m_aContents.begin(); it != other.m_aContents.end(); it++ ) + { + IXFContent *pContent = *it; + if( pContent ) + { + IXFContent *pClone = pContent->Clone(); + if( pClone ) + Add(pClone); + } + } +} + +XFContentContainer& XFContentContainer::operator=(const XFContentContainer& other) +{ + std::vector<IXFContent*>::const_iterator it; + + for( it = other.m_aContents.begin(); it != other.m_aContents.end(); it++ ) + { + IXFContent *pContent = *it; + if( pContent ) + { + IXFContent *pClone = pContent->Clone(); + if( pClone ) + Add(pClone); + } + } + return *this; +} + +XFContentContainer::~XFContentContainer() +{ + std::vector<IXFContent*>::iterator it; + + for( it = m_aContents.begin(); it != m_aContents.end(); it++ ) + { + IXFContent *pContent = *it; + if( pContent ) + delete pContent; + } +} + +void XFContentContainer::Add(IXFContent *pContent) +{ + m_aContents.push_back(pContent); +} + +void XFContentContainer::InsertAtBegin(IXFContent * pContent) +{ + m_aContents.insert(m_aContents.begin(), pContent); +} +void XFContentContainer::RemoveAt(sal_uInt32 nPos) +{ + m_aContents.erase(m_aContents.begin()+nPos); +} +void XFContentContainer::Add(const rtl::OUString& text) +{ + XFTextContent *pTC = new XFTextContent(); + pTC->SetText(text); + Add(pTC); +} + +int XFContentContainer::GetCount() const +{ + return m_aContents.size(); +} + +void XFContentContainer::Reset() +{ + std::vector<IXFContent*>::iterator it; + + for( it = m_aContents.begin(); it != m_aContents.end(); it++ ) + { + IXFContent *pContent = *it; + if( pContent ) + delete pContent; + } + m_aContents.clear(); +} + + +IXFContent* XFContentContainer::FindFirstContent(enumXFContent type) +{ + IXFContent *pRet = NULL; + IXFContent *pContent = NULL; + + for( int i=0; i<GetCount(); i++ ) + { + pContent = GetContent(i); + if( !pContent ) + continue; + + enumXFContent eType = pContent->GetContentType(); + if( eType == type ) + return pContent; + else + { + XFContentContainer *pChildCont = static_cast<XFContentContainer*>(pContent); + if( pChildCont ) + { + pRet = pChildCont->FindFirstContent(type); + if( pRet ) + return pRet; + } + } + } + return pRet; +} + +enumXFContent XFContentContainer::GetContentType() +{ + return enumXFContentContainer; +} + +void XFContentContainer::ToXml(IXFStream *pStrm) +{ + std::vector<IXFContent*>::iterator it; + + for( it = m_aContents.begin(); it != m_aContents.end(); it++ ) + { + IXFContent *pContent = *it; + if( pContent ) + pContent->ToXml(pStrm); + } +} + +IXFContent* XFContentContainer::GetLastContent() +{ + sal_uInt32 index = m_aContents.size()-1; + if(index >0) + { + return m_aContents[index]; + } + + return NULL; +} + +void XFContentContainer::RemoveLastContent() +{ + sal_uInt32 index = m_aContents.size()-1; + if(index >0) + { + m_aContents.erase(m_aContents.begin() + index); + } +} diff --git a/lotuswordpro/source/filter/xfilter/xfcontentcontainer.hxx b/lotuswordpro/source/filter/xfilter/xfcontentcontainer.hxx new file mode 100644 index 000000000000..52ca417d6e99 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfcontentcontainer.hxx @@ -0,0 +1,143 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Container for content.It will destroy all children when destroy. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-27 create this file. + * 2005-04-20 change add to virtual. + ************************************************************************/ +#ifndef _XFCONTENTCONTAINER_HXX +#define _XFCONTENTCONTAINER_HXX + +#include "xfcontent.hxx" +#include <vector> + +/** + * @brief + * A container for content. + * The contents will be deleted when delete container. + */ +class XFContentContainer : public XFContent +{ +public: + XFContentContainer(); + + XFContentContainer(const XFContentContainer& other); + + XFContentContainer& operator=(const XFContentContainer& other); + + /** + * @descr Destructure, all contents will be deleted too. + */ + virtual ~XFContentContainer(); + +public: + /** + * @descr Add conent. + */ + virtual void Add(IXFContent *pContent); + + virtual void InsertAtBegin(IXFContent *pContent); + virtual void RemoveAt(sal_uInt32 nPos); + virtual IXFContent* GetLastContent(); + virtual void RemoveLastContent(); + /** + * @descr convience function for add text content. + */ + virtual void Add(const rtl::OUString& text); + + /** + * @descr return the number of contents in the container. + */ + int GetCount() const; + + /** + * @descr get content by index. + */ + IXFContent* GetContent(sal_uInt32 index) const; + + /** + * @descr clear all contents in the container. + */ + void Reset(); + + /** + * @descr helper function, find first content by type. + */ + IXFContent* FindFirstContent(enumXFContent type); + + /** + * @descr return the content type. + */ + virtual enumXFContent GetContentType(); + /** + * @descr Output to OOo model or local file. + */ + virtual void ToXml(IXFStream *pStrm); + +private: + std::vector<IXFContent*> m_aContents; +}; + +inline IXFContent* XFContentContainer::GetContent(sal_uInt32 index) const +{ + if( index<0 || index>m_aContents.size()-1 ) + return NULL; + return m_aContents[index]; +} +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfcrossref.cxx b/lotuswordpro/source/filter/xfilter/xfcrossref.cxx new file mode 100644 index 000000000000..a064adcb13ab --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfcrossref.cxx @@ -0,0 +1,105 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * index entry object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-05-17 create this file. + ************************************************************************/ +#include "xfcrossref.hxx" + +XFCrossRefStart::XFCrossRefStart() +{ +} + +XFCrossRefStart::~XFCrossRefStart() +{ +} + +void XFCrossRefStart::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + if( m_nType == CROSSREF_TEXT) + { + pAttrList->AddAttribute( A2OUSTR("text:reference-format"),A2OUSTR("text") ); + } + else if( m_nType == CROSSREF_PAGE ) + { + pAttrList->AddAttribute( A2OUSTR("text:reference-format"), A2OUSTR("page") ); + } + else if( m_nType == CROSSREF_PARANUMBER ) + { + pAttrList->AddAttribute( A2OUSTR("text:reference-format"), A2OUSTR("chapter") ); + } + pAttrList->AddAttribute( A2OUSTR("text:ref-name"), m_strMarkName); + pStrm->StartElement( A2OUSTR("text:bookmark-ref") ); +} + +XFCrossRefEnd::XFCrossRefEnd() +{ +} + +XFCrossRefEnd::~XFCrossRefEnd() +{ +} + +void XFCrossRefEnd::ToXml(IXFStream *pStrm) +{ + pStrm->EndElement( A2OUSTR("text:bookmark-ref") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfcrossref.hxx b/lotuswordpro/source/filter/xfilter/xfcrossref.hxx new file mode 100644 index 000000000000..63b965aa7e27 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfcrossref.hxx @@ -0,0 +1,109 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * cross reference object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-05-17 create this file. + ************************************************************************/ +#ifndef _XFCROSSREF_HXX +#define _XFCROSSREF_HXX + +#include "xfcontent.hxx" + +/** + * @brief + * Index entry obejct. + */ +class XFCrossRefStart : public XFContent +{ +public: + XFCrossRefStart(); + ~XFCrossRefStart(); + void SetRefType(sal_uInt8 nType); + void SetMarkName(rtl::OUString sName); + void ToXml(IXFStream *pStrm); +private: + enum{ + CROSSREF_INVALID = 0, + CROSSREF_TEXT = 1, + CROSSREF_PAGE = 2, + CROSSREF_PARANUMBER = 3 + }; + sal_uInt8 m_nType; + rtl::OUString m_strMarkName; +}; + +inline void XFCrossRefStart::SetRefType(sal_uInt8 nType) +{ + m_nType = nType; +} + +inline void XFCrossRefStart::SetMarkName(rtl::OUString sName) +{ + m_strMarkName = sName; +} + +class XFCrossRefEnd : public XFContent +{ +public: + XFCrossRefEnd(); + ~XFCrossRefEnd(); + void ToXml(IXFStream *pStrm); +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfdate.cxx b/lotuswordpro/source/filter/xfilter/xfdate.cxx new file mode 100644 index 000000000000..e8d6822cb4ca --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdate.cxx @@ -0,0 +1,118 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Date field with date style. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-21 create this file. + ************************************************************************/ +#include "xfdate.hxx" + +XFDate::XFDate() +{ + m_bFixed = 0; + rtl_zeroMemory(&m_aDateTime,sizeof(m_aDateTime)); + m_bValued = sal_False; +} + +XFDate::~XFDate() +{ + +} + +void XFDate::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + if( GetStyleName().getLength() > 0 ) + pAttrList->AddAttribute( A2OUSTR("style:data-style-name"), GetStyleName() ); + if (m_bValued) + pAttrList->AddAttribute( A2OUSTR("text:date-value"), m_strDate ); + + if( m_bFixed ) + pAttrList->AddAttribute( A2OUSTR("text:fixed"), A2OUSTR("true") ); + + pStrm->StartElement( A2OUSTR("text:date") ); + if (m_strText.getLength()>0) + pStrm->Characters(m_strText); + pStrm->EndElement( A2OUSTR("text:date") ); +} + +void XFDateStart::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + if( GetStyleName().getLength() > 0 ) + pAttrList->AddAttribute( A2OUSTR("style:data-style-name"), GetStyleName() ); +/* if (m_bValued) + pAttrList->AddAttribute( A2OUSTR("text:date-value"), DateTimeToOUString(m_aDateTime) ); + if( m_bFixed ) + pAttrList->AddAttribute( A2OUSTR("text:fixed"), A2OUSTR("true") ); + + pStrm->StartElement( A2OUSTR("text:date") ); + if (m_strText.getLength()>0) + pStrm->Characters(m_strText); +*/ + pStrm->StartElement( A2OUSTR("text:date") ); +} + +void XFDateEnd::ToXml(IXFStream *pStrm) +{ + pStrm->EndElement( A2OUSTR("text:date") ); +} diff --git a/lotuswordpro/source/filter/xfilter/xfdate.hxx b/lotuswordpro/source/filter/xfilter/xfdate.hxx new file mode 100644 index 000000000000..9861eea2c83a --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdate.hxx @@ -0,0 +1,134 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Date field with date style. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-21 create this file. + ************************************************************************/ +#ifndef _XFDATE_HXX +#define _XFDATE_HXX + +#include "xfglobal.hxx" +#include "xfcontent.hxx" + +/** + * @descr Date obejct. + */ +class XFDate : public XFContent +{ +public: + XFDate(); + + virtual ~XFDate(); + +public: + void SetDate(XFDateTime& dt); + + void SetDate(const rtl::OUString& date); + + void SetText(rtl::OUString& text); + + void SetFixed(sal_Bool fixed = sal_True); + + virtual void ToXml(IXFStream *pStrm); + +private: + sal_Bool m_bFixed; + rtl::OUString m_strText; + XFDateTime m_aDateTime; + rtl::OUString m_strDate; + sal_Bool m_bValued; +}; + +inline void XFDate::SetDate(XFDateTime& dt) +{ + m_aDateTime = dt; + m_strDate = DateTimeToOUString(m_aDateTime); + m_bValued = sal_True; +} + +inline void XFDate::SetDate(const rtl::OUString& date) +{ + m_strDate = date; + m_bValued = sal_True; +} + +inline void XFDate::SetText(rtl::OUString& text) +{ + m_strText = text; +} + +inline void XFDate::SetFixed(sal_Bool fixed) +{ + m_bFixed = fixed; +} + +class XFDateStart : public XFDate +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +class XFDateEnd : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfdatestyle.cxx b/lotuswordpro/source/filter/xfilter/xfdatestyle.cxx new file mode 100644 index 000000000000..e8066016b24c --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdatestyle.cxx @@ -0,0 +1,191 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Date style. The date format for date field. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-20 create this file. + ************************************************************************/ +#include "xfdatestyle.hxx" + +XFDatePart::XFDatePart() +{ + m_bTexture = sal_False; +} + +void XFDatePart::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + switch(m_ePart) + { + case enumXFDateUnknown: + break; + case enumXFDateYear: + pAttrList->Clear(); + if( m_bLongFmt ) + pAttrList->AddAttribute( A2OUSTR("number:style"), A2OUSTR("long") ); + pStrm->StartElement( A2OUSTR("number:year") ); + pStrm->EndElement( A2OUSTR("number:year") ); + break; + case enumXFDateMonth: + pAttrList->Clear(); + if( m_bTexture ) + pAttrList->AddAttribute( A2OUSTR("number:textual"), A2OUSTR("true") ); + if( m_bLongFmt ) + pAttrList->AddAttribute( A2OUSTR("number:style"), A2OUSTR("long") ); + pStrm->StartElement( A2OUSTR("number:month") ); + pStrm->EndElement( A2OUSTR("number:month") ); + break; + case enumXFDateMonthDay: + pAttrList->Clear(); + if( m_bLongFmt ) + pAttrList->AddAttribute( A2OUSTR("number:style"), A2OUSTR("long") ); + pStrm->StartElement( A2OUSTR("number:day") ); + pStrm->EndElement( A2OUSTR("number:day") ); + break; + case enumXFDateWeekDay: + pAttrList->Clear(); + if( m_bLongFmt ) + pAttrList->AddAttribute( A2OUSTR("number:style"), A2OUSTR("long") ); + pStrm->StartElement( A2OUSTR("number:day-of-week") ); + pStrm->EndElement( A2OUSTR("number:day-of-week") ); + break; + case enumXFDateYearWeek: + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("number:week-of-year") ); + pStrm->EndElement( A2OUSTR("number:week-of-year") ); + break; + case enumXFDateEra: + pAttrList->Clear(); + if( m_bLongFmt ) + pAttrList->AddAttribute( A2OUSTR("number:style"), A2OUSTR("long") ); + pStrm->StartElement( A2OUSTR("number:era") ); + pStrm->EndElement( A2OUSTR("number:era") ); + break; + case enumXFDateQuarter: + pAttrList->Clear(); + if( m_bLongFmt ) + pAttrList->AddAttribute( A2OUSTR("number:style"), A2OUSTR("long") ); + pStrm->StartElement( A2OUSTR("number:quarter") ); + pStrm->EndElement( A2OUSTR("number:quarter") ); + break; + case enumXFDateHour: + pAttrList->Clear(); + if( m_bLongFmt ) + pAttrList->AddAttribute( A2OUSTR("number:style"), A2OUSTR("long") ); + pStrm->StartElement( A2OUSTR("number:hours") ); + pStrm->EndElement( A2OUSTR("number:hours") ); + break; + case enumXFDateMinute: + pAttrList->Clear(); + if( m_bLongFmt ) + pAttrList->AddAttribute( A2OUSTR("number:style"), A2OUSTR("long") ); + pStrm->StartElement( A2OUSTR("number:minutes") ); + pStrm->EndElement( A2OUSTR("number:minutes") ); + break; + case enumXFDateSecond: + pAttrList->Clear(); + if( m_bLongFmt ) + pAttrList->AddAttribute( A2OUSTR("number:style"), A2OUSTR("long") ); + if( m_nDecimalPos ) + pAttrList->AddAttribute( A2OUSTR("number:decimal-places"), Int32ToOUString(m_nDecimalPos) ); + pStrm->StartElement( A2OUSTR("number:seconds") ); + pStrm->EndElement( A2OUSTR("number:seconds") ); + break; + case enumXFDateAmPm: + pStrm->StartElement( A2OUSTR("number:am-pm") ); + pStrm->EndElement( A2OUSTR("number:am-pm") ); + break; + case enumXFDateText: + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("number:text") ); + pStrm->Characters( m_strText ); + pStrm->EndElement( A2OUSTR("number:text") ); + break; + } +} + +XFDateStyle::XFDateStyle() +{ + m_bFixed = sal_False; + m_bAutoOrder = sal_False; +} + +XFDateStyle::~XFDateStyle() +{ +} + +enumXFStyle XFDateStyle::GetStyleFamily() +{ + return enumXFStyleDate; +} + +void XFDateStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("style:name"), GetStyleName() ); + pAttrList->AddAttribute( A2OUSTR("style:family"), A2OUSTR("data-style") ); + + pStrm->StartElement( A2OUSTR("number:date-style") ); + + m_aParts.ToXml(pStrm); + + pStrm->EndElement( A2OUSTR("number:date-style") ); +} diff --git a/lotuswordpro/source/filter/xfilter/xfdatestyle.hxx b/lotuswordpro/source/filter/xfilter/xfdatestyle.hxx new file mode 100644 index 000000000000..19bdb680df81 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdatestyle.hxx @@ -0,0 +1,260 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Date style. The date format for date field. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-20 create this file. + ************************************************************************/ +#ifndef _XFDATESTYLE_HXX +#define _XFDATESTYLE_HXX + +#include "xfglobal.hxx" +#include "xfstyle.hxx" +#include "ixfproperty.hxx" +#include "xftimestyle.hxx" +#include "xfstylecont.hxx" +#include <vector> + +class XFDatePart : public XFTimePart +{ +public: + XFDatePart(); +public: + void SetTexture(sal_Bool bTexture); + + virtual void ToXml(IXFStream *pStrm); + +private: + sal_Bool m_bTexture; +}; + +class XFDateStyle : public XFStyle +{ +public: + XFDateStyle(); + + virtual ~XFDateStyle(); + +public: + + void SetFixed(sal_Bool fixed); + + void SetLanguage(rtl::OUString lang); + + void SetCountry(rtl::OUString country); + + void SetAutoOrder(sal_Bool bAutoOrder); + + void AddYear( sal_Bool bLongFmt = sal_True ); + + void AddMonth( sal_Bool bLongFmt = sal_True, sal_Bool bTexture = sal_False ); + + void AddMonthDay( sal_Bool bLongFmt = sal_True ); + + void AddWeekDay( sal_Bool bLongFmt = sal_True ); + + void AddYearWeek(); + + void AddEra(sal_Bool bLongFmt = sal_False); + + void AddQuarter(sal_Bool bLongFmt = sal_False); + + void AddHour( sal_Bool bLongFmt = sal_True ); + + void AddMinute( sal_Bool bLongFmt = sal_True ); + + void AddSecond( sal_Bool bLongFmt = sal_True, sal_Int16 nDecimalPos = 2); + + void AddAmPm(sal_Bool bAmPm); + + void AddText( rtl::OUString part ); + + virtual enumXFStyle GetStyleFamily(); + + virtual void ToXml(IXFStream *pStrm); + +private: + sal_Bool m_bFixed; + sal_Bool m_bAutoOrder; + rtl::OUString m_strLanguage; + rtl::OUString m_strCountry; + XFStyleContainer m_aParts; +}; + +inline void XFDatePart::SetTexture(sal_Bool bTexture) +{ + m_bTexture = bTexture; +} + +inline void XFDateStyle::SetFixed(sal_Bool fixed) +{ + m_bFixed = fixed; +} + +inline void XFDateStyle::SetLanguage(rtl::OUString lang) +{ + m_strLanguage = lang; +} + +inline void XFDateStyle::SetCountry(rtl::OUString country) +{ + m_strCountry = country; +} + +inline void XFDateStyle::SetAutoOrder(sal_Bool bAutoOrder) +{ + m_bAutoOrder = bAutoOrder; +} + +inline void XFDateStyle::AddYear( sal_Bool bLongFmt ) +{ + XFDatePart *part = new XFDatePart(); + part->SetPartType(enumXFDateYear); + part->SetLongFmt(bLongFmt); + m_aParts.AddStyle(part); +} + +inline void XFDateStyle::AddMonth( sal_Bool bLongFmt, sal_Bool bTexture ) +{ + XFDatePart *part = new XFDatePart(); + part->SetPartType(enumXFDateMonth); + part->SetLongFmt(bLongFmt); + part->SetTexture(bTexture); + m_aParts.AddStyle(part); +} + +inline void XFDateStyle::AddMonthDay( sal_Bool bLongFmt ) +{ + XFDatePart *part = new XFDatePart(); + part->SetPartType(enumXFDateMonthDay); + part->SetLongFmt(bLongFmt); + m_aParts.AddStyle(part); +} + +inline void XFDateStyle::AddWeekDay( sal_Bool bLongFmt ) +{ + XFDatePart *part = new XFDatePart(); + part->SetPartType(enumXFDateWeekDay); + part->SetLongFmt(bLongFmt); + m_aParts.AddStyle(part); +} + +inline void XFDateStyle::AddYearWeek() +{ + XFDatePart *part = new XFDatePart(); + part->SetPartType(enumXFDateYearWeek); + m_aParts.AddStyle(part); +} + +inline void XFDateStyle::AddEra(sal_Bool bLongFmt) +{ + XFDatePart *part = new XFDatePart(); + part->SetPartType(enumXFDateEra); + part->SetLongFmt(bLongFmt); + m_aParts.AddStyle(part); +} + +inline void XFDateStyle::AddQuarter(sal_Bool bLongFmt) +{ + XFDatePart *part = new XFDatePart(); + part->SetPartType(enumXFDateQuarter); + part->SetLongFmt(bLongFmt); + m_aParts.AddStyle(part); +} + +inline void XFDateStyle::AddText( rtl::OUString text ) +{ + XFDatePart *part = new XFDatePart(); + part->SetPartType(enumXFDateText); + part->SetText(text); + m_aParts.AddStyle(part); +} + +inline void XFDateStyle::AddHour( sal_Bool bLongFmt ) +{ + XFDatePart *part = new XFDatePart(); + part->SetPartType(enumXFDateHour); + part->SetLongFmt(bLongFmt); + m_aParts.AddStyle(part); +} + +inline void XFDateStyle::AddMinute( sal_Bool bLongFmt ) +{ + XFDatePart *part = new XFDatePart(); + part->SetPartType(enumXFDateMinute); + part->SetLongFmt(bLongFmt); + m_aParts.AddStyle(part); +} + +inline void XFDateStyle::AddSecond( sal_Bool bLongFmt, sal_Int16 pos) +{ + XFDatePart *part = new XFDatePart(); + part->SetPartType(enumXFDateSecond); + part->SetLongFmt(bLongFmt); + part->SetDecimalPos(pos); + m_aParts.AddStyle(part); +} + +inline void XFDateStyle::AddAmPm(sal_Bool bAmPm) +{ + XFDatePart *part = new XFDatePart(); + part->SetPartType(enumXFDateAmPm); + m_aParts.AddStyle(part); +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfdefs.hxx b/lotuswordpro/source/filter/xfilter/xfdefs.hxx new file mode 100644 index 000000000000..244bed3a84b7 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdefs.hxx @@ -0,0 +1,514 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * enum const defines. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-21 create this file. + ************************************************************************/ +#ifndef _XFDEFS_HXX +#define _XFDEFS_HXX + +#include "sal/types.h" + +enum enumXFContent +{ + enumXFContentUnknown, + enumXFContentText, + enumXFContentSpan, + enumXFContentPara, + enumXFContentHeading, + enumXFContentTable, + enumXFContentTableCell, + enumXFContentTableRow, + enumXFContentTableCol, + enumXFContentGraphics, + enumXFContentFrame, + enumXFContentContainer, +}; + +enum enumXFStyle +{ + enumXFStyleUnknown, + enumXFStyleText, + enumXFStylePara, + enumXFStyleList, + enumXFStyleSection, + enumXFStyleGraphics, + enumXFStylePageMaster, + enumXFStyleMasterPage, + enumXFStyleDate, + enumXFStyleTime, + enumXFStylePercent, + enumXFStyleNumber, + enumXFStyleCurrency, + enumXFStyleTable, + enumXFStyleTableCell, + enumXFStyleTableRow, + enumXFStyleTableCol, + enumXFStyleOutline, + enumXFStyleStrokeDash, + enumXFStyleArea, + enumXFStyleArrow, + enumXFStyleRuby, + enumXFStyleDefaultPara, +}; + +enum enumXFFrameType +{ + enumXFFrameUnknown, + enumXFFrameDrawing, + enumXFFrameImage, + enumXFFrameTextbox, +}; + +enum enumXFUnderline +{ + enumXFUnderlineNone = 0, + enumXFUnderlineSingle, + enumXFUnderlineDouble, + enumXFUnderlineDotted, + enumXFUnderlineDash, + enumXFUnderlineLongDash, + enumXFUnderlineDotDash, + enumXFUnderlineDotDotDash, + enumXFUnderlineWave, + enumXFUnderlineBold, + enumXFUnderlineBoldDotted, + enumXFUnderlineBoldDash, + enumXFUnderlineBoldLongDash, + enumXFUnderlineBoldDotDash, + enumXFUnderlineBoldDotDotDash, + enumXFUnderlineBoldWave, + enumXFUnderlineDoubleWave, + enumXFUnderlineSmallWave +}; + +enum enumXFRelief +{ + enumXFReliefNone = 0, + enumXFReliefEngraved, + enumXFReliefEmbossed, +}; + +enum enumXFCrossout +{ + enumXFCrossoutNone = 0, + enumXFCrossoutSignel, + enumXFCrossoutDouble, + enumXFCrossoutThick, + enumXFCrossoutSlash, + enumXFCrossoutX +}; + +enum enumXFTransform +{ + enumXFTransformNone = 0, + enumXFTransformUpper, + enumXFTransformLower, + enumXFTransformCapitalize, + enumXFTransformSmallCaps +}; + +enum enumXFEmphasize +{ + enumXFEmphasizeNone = 0, + enumXFEmphasizeDot, + enumXFEmphasizeCircle, + enumXFEmphasizeDisc, + enumXFEmphasizeAccent +}; + + +enum enumXFAlignType +{ + enumXFAlignNone = 0, + enumXFAlignStart, + enumXFAlignCenter, + enumXFAlignEnd, + enumXFAlignJustify, + enumXFAlignTop, + enumXFAlignMiddle, + enumXFAlignBottom, + enumXFALignMargins, +}; + +enum enumXFShadowPos +{ + enumXFShadowNone, + enumXFShadowRightBottom, + enumXFShadowRightTop, + enumXFShadowLeftBottom, + enumXFShadowLeftTop +}; + +enum enumXFBorder +{ + enumXFBorderNone, + enumXFBorderLeft, + enumXFBorderRight, + enumXFBorderTop, + enumXFBorderBottom, +}; + +/************************************************************************** + * @descr + * Line height type. + * enumLHHeight: height of the line,in "cm". + * enumLHLeast: the height may be adjusted,but has a min value. + * enumLHPercent: the height is a centain times of the normal height. + * enumLHSpace: space between lines. + *************************************************************************/ +enum enumLHType +{ + enumLHNone, + enumLHHeight, + enumLHLeast, + enumLHPercent, + enumLHSpace, +}; + +enum enumXFBreaks +{ + enumXFBreakAuto, + enumXFBreakBefPage, + enumXFBreakBefColumn, + enumXFBreakAftPage, + enumXFBreakAftColumn, + enumXFBreakKeepWithNext, +}; + +enum enumXFTab +{ + enumXFTabNone, + enumXFTabLeft, + enumXFTabCenter, + enumXFTabRight, + enumXFTabChar, +}; + +enum enumXFDatePart +{ + enumXFDateUnknown, + enumXFDateYear, + enumXFDateMonth, + enumXFDateMonthDay, + enumXFDateWeekDay, + enumXFDateYearWeek, + enumXFDateEra, + enumXFDateQuarter, + enumXFDateHour, + enumXFDateMinute, + enumXFDateSecond, + enumXFDateAmPm, + enumXFDateText +}; + +enum enumXFAnchor +{ + enumXFAnchorNone, + enumXFAnchorPara, + enumXFAnchorPage, + enumXFAnchorChar, + enumXFAnchorAsChar, + enumXFAnchorFrame +}; + +enum enumXFWrap +{ + enumXFWrapNone, + enumXFWrapLeft, + enumXFWrapRight, + enumXFWrapParallel, + enumXFWrapRunThrough, + enumXFWrapBest, + enumXFWrapBackground +}; + +enum enumXFTextDir +{ + enumXFTextDirNone, + enumXFTextDirLR, + enumXFTextDirLR_TB, + enumXFTextDirPage, + enumXFTextDirRL, + enumXFTextDirRL_TB, + enumXFTextDirTB, + enumXFTextDirTB_LR, + enumXFTextDirTB_RL +}; + +enum enumXFFrameXRel +{ + enumXFFrameXRelPage, + enumXFFrameXRelPageContent, + enumXFFrameXRelPageEndMargin, + enumXFFrameXRelPageStartMargin, + enumXFFrameXRelPara, + enumXFFrameXRelParaContent, + enumXFFrameXRelParaEndMargin, + enumXFFrameXRelParaStartMargin, + enumXFFrameXRelChar, + enumXFFrameXRelFrame, + enumXFFrameXRelFrameContent, + enumXFFrameXRelFrameEndMargin, + enumXFFrameXRelFrameStartMargin +}; + +enum enumXFFrameXPos +{ + enumXFFrameXPosLeft, + enumXFFrameXPosRight, + enumXFFrameXPosCenter, + enumXFFrameXPosFromLeft +}; + +enum enumXFFrameYRel +{ + enumXFFrameYRelBaseLine, + enumXFFrameYRelChar, + enumXFFrameYRelFrame, + enumXFFrameYRelFrameContent, + enumXFFrameYRelLine, + enumXFFrameYRelPage, + enumXFFrameYRelPageContent, + enumXFFrameYRelPara, + enumXFFrameYRelParaContent, + enumXFFrameYRelText +}; + +enum enumXFFrameYPos +{ + enumXFFrameYPosTop, + enumXFFrameYPosMiddle, + enumXFFrameYPosBottom, + enumXFFrameYPosFromTop, + enumXFFrameYPosBelow, +}; + +enum enumXFTableColVisible +{ + enumXFTableColVisibleYes, + enumXFTableColVisibleCollapse, + enumXFTableColVisibleFilter, +}; + +enum enumXFBookmarkRef +{ + enumXFBookmarkNone, + enumXFBookmarkPage, + enumXFBookmarkChapter, + enumXFBookmarkDir, + enumXFBookmarkDef +}; + +enum enumXFDrawKind +{ + enumXFDrawKindFull, + enumXFDrawKindSection, + enumXFDrawKindCut, + enumXFDrawKindArc +}; + +enum enumXFLineStyle +{ + enumXFLineNone, + enumXFLineSolid, + enumXFLineDot, + enumXFLineDash, + enumXFLineDotDash, + enumXFLineDashDot +}; + +enum enumXFAreaStyle +{ + enumXFAreaNone, + enumXFAreaSolid, + enumXFAreaGradient, + enumXFAreaBitmap, + enumXFAreaHatch +}; + +enum enumXFAreaLineStyle +{ + enumXFAreaLineSingle, + enumXFAreaLineCrossed, + enumXFAreaLineTriple +}; + +enum enumXFColorMode +{ + enumXFColorStandard, + enumXFColorGreyscale, + enumXFColorMono, + enumXFColorWatermark +}; + +enum enumXFPageUsage +{ + enumXFPageUsageNone, + enumXFPageUsageAll, + enumXFPageUsageLeft, + enumXFPageUsageRight, + enumXFPageUsageMirror +}; + +enum enumXFValueType +{ + enumXFValueTypeNone, + enumXFValueTypeBoolean, + enumXFValueTypeCurrency, + enumXFValueTypeDate, + enumXFValueTypeFloat, + enumXFValueTypePercentage, + enumXFValueTypeString, + enumXFValueTypeTime, +}; + +enum enumXFNumberType +{ + enumXFNumberNumber, + enumXFNumberPercent, + enuMXFNumberCurrency, + enumXFNumberScientific, + enumXFText, +}; + +enum enumXFLineNumberPos +{ + enumXFLineNumberLeft, + enumXFLineNumberRight, + enumXFLineNumberInner, + enumXFLineNumberOutter, +}; + +enum enumXFEntry +{ + enumXFEntryTOC, + enumXFEntryAlphabetical, + enumXFEntryUserIndex, +}; + +enum enumXFIndex +{ + enumXFIndexTOC, + enumXFIndexAlphabetical, + enumXFIndexUserIndex, + enumXFIndexObject, + enumXFIndexIllustration, + enumXFIndexTableIndex, +}; + +enum enumXFIndexTemplate +{ + enumXFIndexTemplateUnknown, + enumXFIndexTemplateChapter, + enumXFIndexTemplateText, + enumXFIndexTemplateTab, + enumXFIndexTemplatePage, + enumXFIndexTemplateLinkStart, + enumXFIndexTemplateLinkEnd, + enumXFIndexTemplateSpan, + enumXFIndexTemplateBibliography, +}; + +struct XFDateTime +{ + sal_Int32 nYear; + sal_Int32 nMonth; + sal_Int32 nDay; + sal_Int32 nHour; + sal_Int32 nMinute; + sal_Int32 nSecond; + sal_Int32 nMillSecond; +}; + +enum enumXFRubyPosition +{ + enumXFRubyLeft = 4, + enumXFRubyRight = 5, + enumXFRubyCenter = 2, + enumXFRubyTop = 1, + enumXFRubyBottom = 3, +}; +enum enumXFFWStyle +{ + enumXFFWOff, + enumXFFWRotate, + enumXFFWUpright, + enumXFFWSlantX,//slant-x + enumXFFWSlantY//slant-y +}; + +enum enumXFFWAdjust +{ + enumXFFWAdjustAutosize,//autosize + enumXFFWAdjustLeft, + enumXFFWAdjustCenter,//center + enumXFFWAdustRight//right +}; + +enum enumXFFWShadow +{ + enumXFFWShadowNone, + enumXFFWShadowNormal, + enumXFFWShadowVertical, + enumXFFWShadowSlant +}; + + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfdocfield.cxx b/lotuswordpro/source/filter/xfilter/xfdocfield.cxx new file mode 100644 index 000000000000..cf66851da29b --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdocfield.cxx @@ -0,0 +1,234 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * doc field. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-05-27 create this file. + ************************************************************************/ +#include "xfdocfield.hxx" + +void XFFileName::SetType(rtl::OUString sType) +{ + m_strType = sType; +} + +void XFFileName::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + if (m_strType.equals(A2OUSTR("FileName"))) + pAttrList->AddAttribute( A2OUSTR("text:display"), A2OUSTR("name-and-extension") ); + else if (m_strType.equals(A2OUSTR("Path"))) + pAttrList->AddAttribute( A2OUSTR("text:display"), A2OUSTR("path") ); + pStrm->StartElement( A2OUSTR("text:file-name") ); + pStrm->EndElement( A2OUSTR("text:file-name") ); +} + +void XFWordCount::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("text:word-count") ); + pStrm->EndElement( A2OUSTR("text:word-count") ); +} + +void XFCharCount::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("text:character-count") ); + pStrm->EndElement( A2OUSTR("text:character-count") ); +} + +void XFDescription::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("text:description") ); + pStrm->EndElement( A2OUSTR("text:description") ); +} + +void XFPageCountStart::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("text:page-count") ); +} +void XFPageCountEnd::ToXml(IXFStream *pStrm) +{ + pStrm->EndElement( A2OUSTR("text:page-count") ); +} + +void XFWordCountStart::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("text:word-count") ); +} + +void XFCharCountStart::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("text:character-count") ); +} + +void XFDescriptionStart::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("text:description") ); +} + +void XFWordCountEnd::ToXml(IXFStream *pStrm) +{ + pStrm->EndElement( A2OUSTR("text:word-count") ); +} + +void XFCharCountEnd::ToXml(IXFStream *pStrm) +{ + pStrm->EndElement( A2OUSTR("text:character-count") ); +} + +void XFDescriptionEnd::ToXml(IXFStream *pStrm) +{ + pStrm->EndElement( A2OUSTR("text:description") ); +} + +void XFKeywords::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("text:keywords") ); + pStrm->EndElement( A2OUSTR("text:keywords") ); +} + +void XFTotalEditTime::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + if (m_strStyleName.getLength()>0) + pAttrList->AddAttribute( A2OUSTR("style:data-style-name"), m_strStyleName ); + pStrm->StartElement( A2OUSTR("text:editing-duration" ) ); + pStrm->EndElement( A2OUSTR("text:editing-duration") ); +} +void XFTotalEditTimeStart::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + if (m_strStyleName.getLength()>0) + pAttrList->AddAttribute( A2OUSTR("style:data-style-name"), m_strStyleName ); + pStrm->StartElement( A2OUSTR("text:editing-duration" ) ); +} +void XFTotalEditTimeEnd::ToXml(IXFStream *pStrm) +{ + pStrm->EndElement( A2OUSTR("text:editing-duration") ); +} +void XFCreateTime::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + if (m_strStyleName.getLength()>0) + pAttrList->AddAttribute( A2OUSTR("style:data-style-name"), m_strStyleName ); + pStrm->StartElement( A2OUSTR("text:creation-time") ); + pStrm->EndElement( A2OUSTR("text:creation-time") ); +} +void XFLastEditTime::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + if (m_strStyleName.getLength()>0) + pAttrList->AddAttribute( A2OUSTR("style:data-style-name"), m_strStyleName ); + pStrm->StartElement( A2OUSTR("text:modification-time") ); + pStrm->EndElement( A2OUSTR("text:modification-time") ); +} + +void XFCreateTimeStart::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + if (m_strStyleName.getLength()>0) + pAttrList->AddAttribute( A2OUSTR("style:data-style-name"), m_strStyleName ); + pStrm->StartElement( A2OUSTR("text:creation-time") ); +} + +void XFLastEditTimeStart::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + if (m_strStyleName.getLength()>0) + pAttrList->AddAttribute( A2OUSTR("style:data-style-name"), m_strStyleName ); + pStrm->StartElement( A2OUSTR("text:modification-time") ); +} +void XFCreateTimeEnd::ToXml(IXFStream *pStrm) +{ + pStrm->EndElement( A2OUSTR("text:creation-time") ); +} + +void XFLastEditTimeEnd::ToXml(IXFStream *pStrm) +{ + pStrm->EndElement( A2OUSTR("text:modification-time") ); +} + +void XFInitialCreator::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("text:initial-creator") ); + pStrm->EndElement( A2OUSTR("text:initial-creator") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfdocfield.hxx b/lotuswordpro/source/filter/xfilter/xfdocfield.hxx new file mode 100644 index 000000000000..13990599b15d --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdocfield.hxx @@ -0,0 +1,200 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * doc field. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-05-27 create this file. + ************************************************************************/ +#ifndef _XFDOCFIELD_HXX +#define _XFDOCFIELD_HXX + +#include "xfcontent.hxx" +#include "xfpagecount.hxx" + +class XFFileName : public XFContent +{ +public: + void SetType(rtl::OUString sType); + virtual void ToXml(IXFStream *pStrm); +private: + rtl::OUString m_strType; +}; +class XFWordCount : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; +class XFWordCountStart : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +class XFWordCountEnd : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +class XFPageCountStart : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +class XFPageCountEnd : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +class XFCharCount : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; +class XFCharCountStart : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +class XFCharCountEnd : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; +class XFDescription : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; +class XFDescriptionStart : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +class XFDescriptionEnd : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +class XFKeywords : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; +class XFTotalEditTime : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; +class XFTotalEditTimeEnd : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +class XFTotalEditTimeStart : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; +class XFCreateTime : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; +class XFCreateTimeStart : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +class XFCreateTimeEnd : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; +class XFLastEditTime : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; +class XFLastEditTimeStart : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +class XFLastEditTimeEnd : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +class XFInitialCreator : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfdrawareastyle.cxx b/lotuswordpro/source/filter/xfilter/xfdrawareastyle.cxx new file mode 100644 index 000000000000..8e07efd37f4a --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawareastyle.cxx @@ -0,0 +1,99 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Area style of Drawing object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-02-21 create this file. + ************************************************************************/ +#include "xfdrawareastyle.hxx" + +XFDrawAreaStyle::XFDrawAreaStyle() +{ + m_eAreaStyle = enumXFAreaSolid; + m_eLineStyle = enumXFAreaLineSingle; + m_nAngle = 0; + m_fSpace = 0.18; +} + +enumXFStyle XFDrawAreaStyle::GetStyleFamily() +{ + return enumXFStyleArea; +} + +void XFDrawAreaStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + + pAttrList->AddAttribute( A2OUSTR("draw:name"), GetStyleName() ); + + if( m_eLineStyle == enumXFAreaLineSingle ) + pAttrList->AddAttribute( A2OUSTR("draw:style"), A2OUSTR("single") ); + else if( m_eLineStyle == enumXFAreaLineCrossed ) + pAttrList->AddAttribute( A2OUSTR("draw:style"), A2OUSTR("double") ); + else if( m_eLineStyle == enumXFAreaLineTriple ) + pAttrList->AddAttribute( A2OUSTR("draw:style"), A2OUSTR("triple") ); + + pAttrList->AddAttribute( A2OUSTR("draw:color"), m_aLineColor.ToString() ); + pAttrList->AddAttribute( A2OUSTR("draw:rotation"), Int32ToOUString(m_nAngle*10) ); + pAttrList->AddAttribute( A2OUSTR("draw:distance"), DoubleToOUString(m_fSpace)+A2OUSTR("cm") ); + + pStrm->StartElement( A2OUSTR("draw:hatch") ); + pStrm->EndElement( A2OUSTR("draw:hatch") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfdrawareastyle.hxx b/lotuswordpro/source/filter/xfilter/xfdrawareastyle.hxx new file mode 100644 index 000000000000..5f5b1556238e --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawareastyle.hxx @@ -0,0 +1,145 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Area style of Drawing object. + * Only support fill color and fill pattern now. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-02-21 create this file. + ************************************************************************/ +#ifndef _XFDRAWAREASTYLE_HXX +#define _XFDRAWAREASTYLE_HXX + +#include "xfstyle.hxx" +#include "xfcolor.hxx" + +class XFDrawAreaStyle : public XFStyle +{ +public: + XFDrawAreaStyle(); + +public: + void SetAreaStyle(enumXFAreaStyle style); + + void SetLineStyle(enumXFAreaLineStyle style); + + void SetBackColor(XFColor& color); + + void SetLineColor(XFColor& color); + + void SetLineAngle(sal_Int32 angle); + + void SetLineSpace(double space); + + enumXFAreaStyle GetAreaStyle(); + + XFColor GetBackColor(); + + virtual enumXFStyle GetStyleFamily(); + + virtual void ToXml(IXFStream *pStrm); + +private: + enumXFAreaStyle m_eAreaStyle; + enumXFAreaLineStyle m_eLineStyle; + XFColor m_aBackColor; + XFColor m_aLineColor; + sal_Int32 m_nAngle; + double m_fSpace; +}; + +inline void XFDrawAreaStyle::SetAreaStyle(enumXFAreaStyle style) +{ + m_eAreaStyle = style; +} + +inline void XFDrawAreaStyle::SetLineStyle(enumXFAreaLineStyle style) +{ + m_eLineStyle = style; +} + +inline void XFDrawAreaStyle::SetBackColor(XFColor& color) +{ + m_aBackColor = color; +} + +inline void XFDrawAreaStyle::SetLineColor(XFColor& color) +{ + m_aLineColor = color; +} + +inline void XFDrawAreaStyle::SetLineAngle(sal_Int32 angle) +{ + m_nAngle = angle; +} + +inline void XFDrawAreaStyle::SetLineSpace(double space) +{ + m_fSpace = space; +} + +inline enumXFAreaStyle XFDrawAreaStyle::GetAreaStyle() +{ + return m_eAreaStyle; +} + +inline XFColor XFDrawAreaStyle::GetBackColor() +{ + return m_aBackColor; +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfdrawchart.cxx b/lotuswordpro/source/filter/xfilter/xfdrawchart.cxx new file mode 100644 index 000000000000..3ce2c23c333b --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawchart.cxx @@ -0,0 +1,96 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * chart object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-25 draft code for draw chart in XML. + ************************************************************************/ + +#include "xfdrawchart.hxx" + +#include "xfchartstreamtools.hxx" + +XFDrawChart::XFDrawChart() +{ + m_strName=XFGlobal::GenObjName(); +} + +void XFDrawChart::Add(IXFContent* pXFChartStream) +{ + m_pXFChartStream = pXFChartStream; +} + +void XFDrawChart::ToXml(IXFStream *pStrm) +{ + XFDrawObject::ToXml(pStrm); + + pStrm->StartElement( A2OUSTR("draw:object") ); + ContentToXml(pStrm); + m_pXFChartStream->ToXml(pStrm); + pStrm->EndElement( A2OUSTR("draw:object") ); +} + +void XFChartStream::SetChartStream(SvStorageStreamRef rCntStream) +{ + m_rCntStream = rCntStream; +} + +void XFChartStream::ToXml(IXFStream *pSaxStream) +{ + XFChartStreamTools::ParseStream(m_rCntStream,pSaxStream); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfdrawchart.hxx b/lotuswordpro/source/filter/xfilter/xfdrawchart.hxx new file mode 100644 index 000000000000..21160e657c6f --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawchart.hxx @@ -0,0 +1,97 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Chart object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-25 create this file,draft code for chart xml. + ************************************************************************/ +#ifndef _XFDRAWECLIPSE_HXX +#define _XFDRAWECLIPSE_HXX + +#include "xfdrawobj.hxx" +#include <so3/svstor.hxx> +/** +* @brief +* draw chart object in XML +*/ +class XFDrawChart : public XFDrawObject +{ +public: + XFDrawChart(); + +public: + virtual void ToXml(IXFStream *pStrm); + virtual void Add(IXFContent* pXFChartStream); + +private: + IXFContent* m_pXFChartStream; + +}; +/** +* @brief +* draw chart stream in XML +*/ +class XFChartStream:public XFContent +{ +public: + virtual void ToXml(IXFStream *pSaxStream); + void SetChartStream(SvStorageStreamRef rCntStream); +protected: + SvStorageStreamRef m_rCntStream; +}; +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfdrawcircle.cxx b/lotuswordpro/source/filter/xfilter/xfdrawcircle.cxx new file mode 100644 index 000000000000..56d3bdee5016 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawcircle.cxx @@ -0,0 +1,134 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Circle object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-17 create this file. + ************************************************************************/ +#include "xfdrawcircle.hxx" +#include <math.h> +#include <cstdlib> + +XFDrawCircle::XFDrawCircle() +{ + m_fRadius = 0; + m_fStartAngle = 0; + m_fEndAngle = 360; + m_eDrawKind = enumXFDrawKindFull; + m_bUseAngle = sal_False; +} + +XFDrawCircle::XFDrawCircle(XFPoint pt, double radius) +{ + m_aCenterPoint = pt; + m_fRadius = radius; + m_fStartAngle = 0; + m_fEndAngle = 360; + m_eDrawKind = enumXFDrawKindFull; + m_bUseAngle = sal_False; +} + +void XFDrawCircle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + if( m_bUseAngle ) + { + double x1 = m_aCenterPoint.GetX() + m_fRadius*cos(m_fStartAngle*2*PI/360); + double x2 = m_aCenterPoint.GetX() + m_fRadius*cos(m_fEndAngle*2*PI/360); + double y1 = m_aCenterPoint.GetY() + m_fRadius*sin(m_fStartAngle*2*PI/360); + double y2 = m_aCenterPoint.GetY() + m_fRadius*sin(m_fEndAngle*2*PI/360); + double width; + double height; + + double x11 = MIN3(m_aCenterPoint.GetX()-m_fRadius,x1,x2); + double x12 = MAX3(m_aCenterPoint.GetX()+m_fRadius,x1,x2); + double y11 = MIN3(m_aCenterPoint.GetY()-m_fRadius,y1,y2); + double y12 = MAX3(m_aCenterPoint.GetY()+m_fRadius,y1,y2); + width = x12-x11; + height = y12-y11; + + if (width > FLOAT_MIN || height > FLOAT_MIN) + { + SetPosition(x11,y11,width,height); + } + + // + pAttrList->AddAttribute( A2OUSTR("draw:kind"), GetDrawKind(m_eDrawKind) ); + pAttrList->AddAttribute( A2OUSTR("draw:start-angle"), DoubleToOUString(m_fStartAngle) ); + pAttrList->AddAttribute( A2OUSTR("draw:end-angle"), DoubleToOUString(m_fEndAngle) ); + } + else + { + double x = m_aCenterPoint.GetX() - m_fRadius; + double y = m_aCenterPoint.GetY() - m_fRadius; + double width = m_fRadius*2; + double height = m_fRadius*2; + if (width > FLOAT_MIN || height > FLOAT_MIN) + { + SetPosition(x,y,width,height); + } + } + + XFDrawObject::ToXml(pStrm); + + pStrm->StartElement( A2OUSTR("draw:circle") ); + ContentToXml(pStrm); + pStrm->EndElement( A2OUSTR("draw:circle") ); +} diff --git a/lotuswordpro/source/filter/xfilter/xfdrawcircle.hxx b/lotuswordpro/source/filter/xfilter/xfdrawcircle.hxx new file mode 100644 index 000000000000..c7bc4d563d7b --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawcircle.hxx @@ -0,0 +1,142 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Circle object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-17 create this file. + ************************************************************************/ +#ifndef _XFDRAWCIRCLE_HXX +#define _XFDRAWCIRCLE_HXX + +#include "xfdrawobj.hxx" + +/** + * @brief + * Circle object. + */ +class XFDrawCircle : public XFDrawObject +{ +public: + XFDrawCircle(); + + XFDrawCircle(XFPoint pt, double radius); + +public: + /** + * @descr Set the center point for the circle. + */ + void SetCenterPoint(double x, double y); + + /** + * @descr Set the center point for the circle + */ + void SetCenterPoint(XFPoint pt); + + /** + * @descr + */ + void SetRadius(double radius); + + void SetAngle(double start, double end); + + void SetDrawKind(enumXFDrawKind kind); + + virtual void ToXml(IXFStream *pStrm); + +private: + XFPoint m_aCenterPoint; + double m_fRadius; + double m_fStartAngle; + double m_fEndAngle; + enumXFDrawKind m_eDrawKind; + sal_Bool m_bUseAngle; +}; + +inline void XFDrawCircle::SetCenterPoint(double x, double y) +{ + m_aCenterPoint = XFPoint(x,y); +} + +inline void XFDrawCircle::SetCenterPoint(XFPoint pt) +{ + m_aCenterPoint = pt; +} + +inline void XFDrawCircle::SetRadius(double radius) +{ + m_fRadius = radius; +} + +inline void XFDrawCircle::SetAngle(double start, double end) +{ + assert(start>=0&&start<=360); + assert(end>=0&&end<=360); + m_fStartAngle = start; + m_fEndAngle = end; + + m_bUseAngle = sal_True; + m_eDrawKind = enumXFDrawKindCut; +} + +inline void XFDrawCircle::SetDrawKind(enumXFDrawKind kind) +{ + m_eDrawKind = kind; +} + + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfdrawellipse.cxx b/lotuswordpro/source/filter/xfilter/xfdrawellipse.cxx new file mode 100644 index 000000000000..f4e68e45ce0f --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawellipse.cxx @@ -0,0 +1,118 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Eclipse object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-18 create this file. + ************************************************************************/ +#include "xfdrawellipse.hxx" +#include <cmath> + +XFDrawEllipse::XFDrawEllipse() +{ + m_fRadiusX = 0; + m_fRadiusY = 0; + m_fStartAngle = 0; + m_fEndAngle = 360; + m_eDrawKind = enumXFDrawKindFull; + m_bUseAngle = sal_False; +} + +void XFDrawEllipse::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + //not support yet. + if( m_bUseAngle ) + { + double x1 = m_aCenterPoint.GetX() + m_fRadiusX*cos(m_fStartAngle*2*PI/360); + double x2 = m_aCenterPoint.GetX() + m_fRadiusX*cos(m_fEndAngle*2*PI/360); + double y1 = m_aCenterPoint.GetY() + m_fRadiusY*sin(m_fStartAngle*2*PI/360); + double y2 = m_aCenterPoint.GetY() + m_fRadiusY*sin(m_fEndAngle*2*PI/360); + double width; + double height; + + double x11 = MIN3(m_aCenterPoint.GetX()-m_fRadiusX,x1,x2); + double x12 = MAX3(m_aCenterPoint.GetX()+m_fRadiusX,x1,x2); + double y11 = MIN3(m_aCenterPoint.GetY()-m_fRadiusY,y1,y2); + double y12 = MAX3(m_aCenterPoint.GetY()+m_fRadiusY,y1,y2); + width = x12-x11; + height = y12-y11; + SetPosition(x11,y11,width,height); + + // + pAttrList->AddAttribute( A2OUSTR("draw:kind"), GetDrawKind(m_eDrawKind) ); + pAttrList->AddAttribute( A2OUSTR("draw:start-angle"), DoubleToOUString(m_fStartAngle) ); + pAttrList->AddAttribute( A2OUSTR("draw:end-angle"), DoubleToOUString(m_fEndAngle) ); + } + else + { + double x = m_aCenterPoint.GetX() - m_fRadiusX; + double y = m_aCenterPoint.GetY() - m_fRadiusY; + double width = m_fRadiusX*2; + double height = m_fRadiusY*2; + SetPosition(x,y,width,height); + } + + XFDrawObject::ToXml(pStrm); + + pStrm->StartElement( A2OUSTR("draw:ellipse") ); + ContentToXml(pStrm); + pStrm->EndElement( A2OUSTR("draw:ellipse") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfdrawellipse.hxx b/lotuswordpro/source/filter/xfilter/xfdrawellipse.hxx new file mode 100644 index 000000000000..5735fa1ea8d6 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawellipse.hxx @@ -0,0 +1,156 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Eclipse object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-18 create this file. + ************************************************************************/ +#ifndef _XFDRAWELLIPSE_HXX +#define _XFDRAWELLIPSE_HXX + +#include "xfdrawobj.hxx" + +/** + * @brief + * Ellipse obejct for drawing layer. + * You can set Ellipse position by setting it's center point and radius or calling XFDrawEllipse::SetPosition function. + * If you using the first method,i'll calc the real position. + * + * You can draw part of an ellipse by using SetAngle(), for example, use SetaAngle(0,180) to draw half a ellipse. + * When draw part of an ellipse, you can use SetDrawKind() to decide which kind of object to draw, an arch, a section, + * or a cut. + */ +class XFDrawEllipse : public XFDrawObject +{ +public: + XFDrawEllipse(); + +public: + /** + * @descr Set ellipse center point. + */ + void SetCenterPoint(double x, double y); + + /** + * @descr Set ellipse center point. + */ + void SetCenterPoint(XFPoint pt); + + /** + * @descr Set ellipse radius. + */ + void SetRadius(double radiusX, double radiusY); + + /** + * @descr If only draw part of the ellipse, set the start angle and end angle. + */ + void SetAngle(double start, double end); + + /** + * @descr Set ellipse draw type,please refer to enumXFDrawKind. + */ + void SetDrawKind(enumXFDrawKind kind); + + /** + * @descr Output ellipse obejct. + */ + virtual void ToXml(IXFStream *pStrm); + +private: + XFPoint m_aCenterPoint; + double m_fRadiusX; + double m_fRadiusY; + double m_fStartAngle; + double m_fEndAngle; + enumXFDrawKind m_eDrawKind; + sal_Bool m_bUseAngle; +}; + +inline void XFDrawEllipse::SetCenterPoint(double x, double y) +{ + m_aCenterPoint = XFPoint(x,y); +} + +inline void XFDrawEllipse::SetCenterPoint(XFPoint pt) +{ + m_aCenterPoint = pt; +} + +inline void XFDrawEllipse::SetRadius(double radiusX, double radiusY) +{ + m_fRadiusX = radiusX; + m_fRadiusY = radiusY; +} + +inline void XFDrawEllipse::SetAngle(double start, double end) +{ + assert(start>=0&&start<=360); + assert(end>=0&&end<=360); + + m_fStartAngle = start; + m_fEndAngle = end; + m_bUseAngle = sal_True; + m_eDrawKind = enumXFDrawKindCut; +} + +inline void XFDrawEllipse::SetDrawKind(enumXFDrawKind kind) +{ + m_eDrawKind = kind; +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfdrawgroup.hxx b/lotuswordpro/source/filter/xfilter/xfdrawgroup.hxx new file mode 100644 index 000000000000..97bff3954820 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawgroup.hxx @@ -0,0 +1,115 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Group of drawing objects. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-21 create this file. + ************************************************************************/ +#ifndef _XFDRAWGROUP_HXX +#define _XFDRAWGROUP_HXX + +#include "xfdrawobj.hxx" +#include "xfframe.hxx" +#include "xfcontentcontainer.hxx" + +/** + * @brief + * Group obejct for drawing. + */ +class XFDrawGroup : public XFDrawObject +{ +public: + XFDrawGroup(){} + +public: + /** + * @descr Add a drawing object to the group. + */ + void Add(XFFrame *pFrame); + + /** + * @descr Output group obejct and all it's children. + */ + virtual void ToXml(IXFStream *pStrm); + +private: + XFContentContainer m_aChildren; +}; + +inline void XFDrawGroup::Add(XFFrame *pFrame) +{ + if( pFrame ) + m_aChildren.Add(pFrame); +} + +inline void XFDrawGroup::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + XFDrawObject::ToXml(pStrm); + + pStrm->StartElement( A2OUSTR("draw:g") ); + + m_aChildren.ToXml(pStrm); + + pStrm->EndElement( A2OUSTR("draw:g") ); + +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfdrawline.cxx b/lotuswordpro/source/filter/xfilter/xfdrawline.cxx new file mode 100644 index 000000000000..e33e14a27b83 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawline.cxx @@ -0,0 +1,123 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Line object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-17 create this file. + ************************************************************************/ +#include "xfdrawline.hxx" + +XFDrawLine::XFDrawLine() +{ +} + +void XFDrawLine::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + if( GetStyleName().getLength() ) + pAttrList->AddAttribute( A2OUSTR("draw:style-name"), GetStyleName() ); + + assert(m_strName.getLength()>0); //name should not be null. + if( m_strName.getLength() ) + pAttrList->AddAttribute( A2OUSTR("draw:name"), m_strName ); + //anchor type: + switch( m_eAnchor ) + { + case enumXFAnchorPara: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("paragraph") ); + break; + case enumXFAnchorPage: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("page") ); + break; + case enumXFAnchorChar: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("char") ); + break; + case enumXFAnchorAsChar: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("as-char") ); + break; + case enumXFAnchorFrame: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("frame") ); + break; + } + pAttrList->AddAttribute( A2OUSTR("draw:z-index"), Int32ToOUString(m_nZIndex) ); + + pAttrList->AddAttribute( A2OUSTR("svg:x1"), DoubleToOUString(m_aPoint1.GetX()) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("svg:y1"), DoubleToOUString(m_aPoint1.GetY()) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("svg:x2"), DoubleToOUString(m_aPoint2.GetX()) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("svg:y2"), DoubleToOUString(m_aPoint2.GetY()) + A2OUSTR("cm") ); + + //transform + rtl::OUString strTransform; + if( m_nFlag&XFDRAWOBJECT_FLAG_ROTATE ) + strTransform = A2OUSTR("rotate (") + DoubleToOUString(m_fRotate) + A2OUSTR(") "); + if( m_nFlag&XFDRAWOBJECT_FLAG_TRANLATE ) + strTransform += A2OUSTR("translate (") + DoubleToOUString(m_aRotatePoint.GetX()) + A2OUSTR("cm ") + DoubleToOUString(m_aRotatePoint.GetY()) + A2OUSTR("cm) "); + if( m_nFlag&XFDRAWOBJECT_FLAG_SKEWX ) + strTransform += A2OUSTR("skewX (") + DoubleToOUString(m_fSkewX) + A2OUSTR(" "); + if( m_nFlag&XFDRAWOBJECT_FLAG_SKEWY ) + strTransform += A2OUSTR("skewY (") + DoubleToOUString(m_fSkewY) + A2OUSTR(" "); + strTransform = strTransform.trim(); + + if( strTransform.getLength() > 0 ) + pAttrList->AddAttribute( A2OUSTR("draw:transform"), strTransform ); + + pStrm->StartElement( A2OUSTR("draw:line") ); + ContentToXml(pStrm); + pStrm->EndElement( A2OUSTR("draw:line") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfdrawline.hxx b/lotuswordpro/source/filter/xfilter/xfdrawline.hxx new file mode 100644 index 000000000000..d61d3d2db3d3 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawline.hxx @@ -0,0 +1,111 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Line object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-17 create this file. + ************************************************************************/ +#ifndef _XFDRAWLINE_HXX +#define _XFDRAWLINE_HXX + +#include "xfdrawobj.hxx" +#include "xfpoint.hxx" + +/** + * @brief + * Line obejct of drawing layer. + */ +class XFDrawLine : public XFDrawObject +{ +public: + XFDrawLine(); + +public: + /** + * @descr Set line start point. + */ + void SetStartPoint(double x, double y); + + /** + * @descr Set line end point. + */ + void SetEndPoint(double x, double y); + + /** + * @descr Output line object. + */ + virtual void ToXml(IXFStream *pStrm); + +private: + XFPoint m_aPoint1; + XFPoint m_aPoint2; +}; + +inline void XFDrawLine::SetStartPoint(double x, double y) +{ + m_aPoint1.SetX(x); + m_aPoint1.SetY(y); +} + +inline void XFDrawLine::SetEndPoint(double x, double y) +{ + m_aPoint2.SetX(x); + m_aPoint2.SetY(y); +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfdrawlinestyle.cxx b/lotuswordpro/source/filter/xfilter/xfdrawlinestyle.cxx new file mode 100644 index 000000000000..fe13083ed869 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawlinestyle.cxx @@ -0,0 +1,123 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Line style of Drawing object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-02-21 create this file. + ************************************************************************/ +#include "xfdrawlinestyle.hxx" + +XFDrawLineStyle::XFDrawLineStyle() +{ + m_eLineStyle = enumXFLineSolid; + + m_fWidth = 0; + m_nTransparency = 0; + m_nNumber1 = 1; + m_nNumber2 = 1; + m_fSpace = 0; + m_fLength1 = 0; + m_fLength2 = 0; +} + +enumXFStyle XFDrawLineStyle::GetStyleFamily() +{ + return enumXFStyleStrokeDash; +} + +void XFDrawLineStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("draw:name"), GetStyleName()); + //simple place here: + pAttrList->AddAttribute( A2OUSTR("draw:style"), A2OUSTR("rect")); + + if( m_eLineStyle == enumXFLineDot ) + { + + } + else if( m_eLineStyle == enumXFLineDash ) + { + pAttrList->AddAttribute( A2OUSTR("draw:dots1"), Int32ToOUString(m_nNumber1)); + pAttrList->AddAttribute( A2OUSTR(" draw:dots1-length"), DoubleToOUString(m_fLength1) + A2OUSTR("cm")); + + pAttrList->AddAttribute( A2OUSTR("draw:dots2"), Int32ToOUString(m_nNumber2)); + pAttrList->AddAttribute( A2OUSTR(" draw:dots2-length"), DoubleToOUString(m_fLength2) + A2OUSTR("cm")); + } + else if( m_eLineStyle == enumXFLineDotDash ) + { + pAttrList->AddAttribute( A2OUSTR("draw:dots1"), Int32ToOUString(m_nNumber1)); + + pAttrList->AddAttribute( A2OUSTR("draw:dots2"), Int32ToOUString(m_nNumber2)); + pAttrList->AddAttribute( A2OUSTR(" draw:dots2-length"), DoubleToOUString(m_fLength2) + A2OUSTR("cm")); + } + else if( m_eLineStyle == enumXFLineDashDot ) + { + pAttrList->AddAttribute( A2OUSTR("draw:dots1"), Int32ToOUString(m_nNumber1)); + pAttrList->AddAttribute( A2OUSTR(" draw:dots1-length"), DoubleToOUString(m_fLength1) + A2OUSTR("cm")); + + pAttrList->AddAttribute( A2OUSTR("draw:dots2"), Int32ToOUString(m_nNumber2)); + } + + pAttrList->AddAttribute( A2OUSTR("draw:distance"), DoubleToOUString(m_fSpace) + A2OUSTR("cm") ); + + pStrm->StartElement( A2OUSTR("draw:stroke-dash") ); + pStrm->EndElement( A2OUSTR("draw:stroke-dash") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfdrawlinestyle.hxx b/lotuswordpro/source/filter/xfilter/xfdrawlinestyle.hxx new file mode 100644 index 000000000000..8aa4b6248745 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawlinestyle.hxx @@ -0,0 +1,217 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Line style of Drawing object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-02-21 create this file. + ************************************************************************/ +#ifndef _XFDRAWLINESTYLE_HXX +#define _XFDRAWLINESTYLE_HXX + +#include "xfstyle.hxx" +#include "xfcolor.hxx" + +/** + * @brief + * Border line style for drawing obejct. + */ +class XFDrawLineStyle : public XFStyle +{ +public: + XFDrawLineStyle(); + +public: + /** + * @descr Set line width. + */ + void SetWidth(double width); + + /** + * @descr Set line color. + */ + void SetColor(const XFColor& color); + + /** + * @descr Set line transparency. + */ + void SetTransparency(sal_Int32 transparency); + + /** + * @descr Set line type, solid,dash,dot? + */ + void SetLineStyle(enumXFLineStyle style); + + /** + * @descr Set first dot number of dash line. + */ + void SetDot1Number(sal_Int32 number); + + /** + * @descr Set second dot number of dash line. + */ + void SetDot2Number(sal_Int32 number); + + /** + * @descr Set first dot length. + */ + void SetDot1Length(double length); + + /** + * @descr Set second dot length. + */ + void SetDot2Length(double length); + + /** + * @descr Set space between dash dot. + */ + void SetSpace(double space); + + /** + * @descr decide whether it's a solid line. + */ + sal_Bool IsSolid(); + + double GetWidth(); + + XFColor GetColor(); + + sal_Int32 GetTransparency(); + + virtual enumXFStyle GetStyleFamily(); + + virtual void ToXml(IXFStream *pStrm); + +private: + enumXFLineStyle m_eLineStyle; + XFColor m_aColor; + double m_fWidth; + sal_Int32 m_nTransparency; + sal_Int32 m_nNumber1; + sal_Int32 m_nNumber2; + double m_fSpace; + double m_fLength1; + double m_fLength2; +}; + +inline void XFDrawLineStyle::SetWidth(double width) +{ + m_fWidth = width; +} + +inline void XFDrawLineStyle::SetColor(const XFColor& color) +{ + m_aColor = color; +} + +inline void XFDrawLineStyle::SetTransparency(sal_Int32 transparency) +{ + m_nTransparency = transparency; +} + +inline void XFDrawLineStyle::SetLineStyle(enumXFLineStyle style) +{ + m_eLineStyle = style; +} + +inline void XFDrawLineStyle::SetDot1Number(sal_Int32 number) +{ + m_nNumber1 = number; +} + +inline void XFDrawLineStyle::SetDot2Number(sal_Int32 number) +{ + m_nNumber2 = number; +} + +inline void XFDrawLineStyle::SetDot1Length(double length) +{ + m_fLength1 = length; +} + +inline void XFDrawLineStyle::SetDot2Length(double length) +{ + m_fLength2 = length; +} + +inline void XFDrawLineStyle::SetSpace(double space) +{ + m_fSpace = space; +} + +inline sal_Bool XFDrawLineStyle::IsSolid() +{ + return (m_eLineStyle==enumXFLineSolid); +} + +inline double XFDrawLineStyle::GetWidth() +{ + return m_fWidth; +} + +inline XFColor XFDrawLineStyle::GetColor() +{ + return m_aColor; +} + +inline sal_Int32 XFDrawLineStyle::GetTransparency() +{ + return m_nTransparency; +} + + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfdrawobj.cxx b/lotuswordpro/source/filter/xfilter/xfdrawobj.cxx new file mode 100644 index 000000000000..3e2da2d43700 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawobj.cxx @@ -0,0 +1,134 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Interfer for all Drawing object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-17 create this file. + * 2005-4-1 revise for rotate. + ************************************************************************/ +#include "xfdrawobj.hxx" + +XFDrawObject::XFDrawObject() +{ + m_fRotate = 0; + m_fScaleX = 0; + m_fScaleY = 0; + m_fSkewX = 0; + m_fSkewY = 0; + m_nFlag = 0; + m_eType = enumXFFrameDrawing; +} + +void XFDrawObject::ContentToXml(IXFStream *pStrm) +{ + XFContentContainer::ToXml(pStrm); +} + +void XFDrawObject::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + if( GetStyleName().getLength() ) + pAttrList->AddAttribute( A2OUSTR("draw:style-name"), GetStyleName() ); + + assert(m_strName.getLength()>0); //name should not be null. + if( m_strName.getLength() ) + pAttrList->AddAttribute( A2OUSTR("draw:name"), m_strName ); + //anchor type: + switch( m_eAnchor ) + { + case enumXFAnchorPara: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("paragraph") ); + break; + case enumXFAnchorPage: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("page") ); + break; + case enumXFAnchorChar: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("char") ); + break; + case enumXFAnchorAsChar: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("as-char") ); + break; + case enumXFAnchorFrame: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("frame") ); + break; + } + pAttrList->AddAttribute( A2OUSTR("draw:z-index"), Int32ToOUString(m_nZIndex) ); + + pAttrList->AddAttribute( A2OUSTR("svg:x"), DoubleToOUString(m_aRect.GetX()) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("svg:y"), DoubleToOUString(m_aRect.GetY()) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("svg:width"), DoubleToOUString(m_aRect.GetWidth()) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("svg:height"), DoubleToOUString(m_aRect.GetHeight()) + A2OUSTR("cm") ); + + //transform + rtl::OUString strTransform; + if( m_nFlag&XFDRAWOBJECT_FLAG_ROTATE ) + strTransform = A2OUSTR("rotate (") + DoubleToOUString(m_fRotate) + A2OUSTR(") "); + if( m_nFlag&XFDRAWOBJECT_FLAG_TRANLATE ) + strTransform += A2OUSTR("translate (") + DoubleToOUString(m_aRotatePoint.GetX()) + A2OUSTR("cm ") + DoubleToOUString(m_aRotatePoint.GetY()) + A2OUSTR("cm) "); + if( m_nFlag&XFDRAWOBJECT_FLAG_SCALE ) + strTransform += A2OUSTR("scale (") + DoubleToOUString(m_fScaleX) + A2OUSTR("cm ") + DoubleToOUString(m_fScaleY) + A2OUSTR("cm) "); + if( m_nFlag&XFDRAWOBJECT_FLAG_SKEWX ) + strTransform += A2OUSTR("skewX (") + DoubleToOUString(m_fSkewX) + A2OUSTR(" "); + if( m_nFlag&XFDRAWOBJECT_FLAG_SKEWY ) + strTransform += A2OUSTR("skewY (") + DoubleToOUString(m_fSkewY) + A2OUSTR(" "); + strTransform = strTransform.trim(); + + if( strTransform.getLength() > 0 ) + pAttrList->AddAttribute( A2OUSTR("draw:transform"), strTransform ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfdrawobj.hxx b/lotuswordpro/source/filter/xfilter/xfdrawobj.hxx new file mode 100644 index 000000000000..8167783048b5 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawobj.hxx @@ -0,0 +1,179 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Interfer for all Drawing object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-17 create this file. + ************************************************************************/ +#ifndef _XFDRAWOBJ_HXX +#define _XFDRAWOBJ_HXX + +#include "xfframe.hxx" +#include "xfrect.hxx" + +#define XFDRAWOBJECT_FLAG_ROTATE 0X00000001 +#define XFDRAWOBJECT_FLAG_TRANLATE 0X00000002 +#define XFDRAWOBJECT_FLAG_SKEWX 0X00000004 +#define XFDRAWOBJECT_FLAG_SKEWY 0X00000008 +#define XFDRAWOBJECT_FLAG_SCALE 0X00000010 + +/** + * @brief + * Base class for all drawing object(ellipse,rect,circle,...). + * I can set Postions,anchor,rotate,text style name here. + * + * Drawing obejcts can be rotated,scaled and skewed, drawing objects must have positions setted, + * you can use SetPosition(...). + */ +class XFDrawObject : public XFFrame +{ +public: + XFDrawObject(); + +public: + /** + * @descr Set style name for drawing text. + */ + void SetTextStyleName(rtl::OUString style); + + /** + * @descr Set drawing obejct rotate. + */ + void SetRotate(double degree, XFPoint aRotatePoint=XFPoint(0,0)); + + /** + * @descr Set drawing object scale. + */ + void SetScale(double cx, double cy); + + /** + * @descr Set drawing object skew. + */ + void SetSkewX(double cx); + + /** + * @descr Set drawing obejct y skew. + */ + void SetSkewY(double cy); + + void ContentToXml(IXFStream *pStrm); + + virtual void ToXml(IXFStream *pStrm); + +protected: + XFContentContainer m_aContents; + rtl::OUString m_strTextStyle; + double m_fRotate; + XFPoint m_aRotatePoint; + double m_fScaleX; + double m_fScaleY; + double m_fSkewX; + double m_fSkewY; + + unsigned int m_nFlag; +}; + +inline void XFDrawObject::SetTextStyleName(rtl::OUString style) +{ + m_strTextStyle = style; +} +/* +inline void XFDrawObject::SetPosition(double x, double y, double width, double height) +{ + SetX(x); + SetY(y); + SetWidth(width); + SetHeight(height); +} + +inline void XFDrawObject::SetPosition(XFRect rect) +{ + SetX(rect.GetX()); + SetY(rect.GetY()); + SetWidth(rect.GetWidth()); + SetHeight(rect.GetHeight()); +} +*/ +inline void XFDrawObject::SetRotate(double degree, XFPoint aRotatePoint) +{ + m_nFlag |= XFDRAWOBJECT_FLAG_ROTATE; + m_fRotate = degree*2*PI/360; + m_aRotatePoint = aRotatePoint; +} + +inline void XFDrawObject::SetScale(double cx, double cy) +{ + m_nFlag |= XFDRAWOBJECT_FLAG_SCALE; + m_fScaleX = cx; + m_fScaleY = cy; +} + +inline void XFDrawObject::SetSkewX(double cx) +{ + m_nFlag |= XFDRAWOBJECT_FLAG_SKEWX; + m_fSkewX = cx*2*PI/360; +} + +inline void XFDrawObject::SetSkewY(double cy) +{ + m_nFlag |= XFDRAWOBJECT_FLAG_SKEWY; + m_fSkewY = cy*2*PI/360; +} + + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfdrawpath.cxx b/lotuswordpro/source/filter/xfilter/xfdrawpath.cxx new file mode 100644 index 000000000000..bb925f610f5b --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawpath.cxx @@ -0,0 +1,222 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Draw path object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-18 create this file. + ************************************************************************/ +#include "xfdrawpath.hxx" + +XFSvgPathEntry::XFSvgPathEntry() +{ +} + +XFSvgPathEntry::XFSvgPathEntry(rtl::OUString cmd) +{ + m_strCommand = cmd; +} + +rtl::OUString XFSvgPathEntry::ToString() +{ + assert(m_strCommand.getLength()>0); + rtl::OUString str = m_strCommand; + std::vector<XFPoint>::iterator it; + + for( it = m_aPoints.begin(); it != m_aPoints.end(); it++ ) + { + XFPoint aPt= *it; + str += DoubleToOUString(aPt.GetX()*1000) + A2OUSTR(" ") + DoubleToOUString(aPt.GetY()*1000) + A2OUSTR(" "); + } + return str.trim(); +} + +XFDrawPath::XFDrawPath() +{ +} + +void XFDrawPath::MoveTo(XFPoint pt, sal_Bool absPosition) +{ + XFSvgPathEntry entry; + + if( absPosition ) + entry.SetCommand(A2OUSTR("M")); + else + entry.SetCommand(A2OUSTR("m")); + entry.AddPoint(pt); + m_aPaths.push_back(entry); +} + +void XFDrawPath::LineTo(XFPoint pt, sal_Bool absPosition) +{ + XFSvgPathEntry entry; + + if( absPosition ) + entry.SetCommand(A2OUSTR("L")); + else + entry.SetCommand(A2OUSTR("l")); + entry.AddPoint(pt); + m_aPaths.push_back(entry); +} + +void XFDrawPath::CurveTo(XFPoint dest, XFPoint ctrl1, XFPoint ctrl2, sal_Bool absPosition) +{ + XFSvgPathEntry entry; + + if( absPosition ) + entry.SetCommand(A2OUSTR("C")); + else + entry.SetCommand(A2OUSTR("c")); + entry.AddPoint(ctrl1); + entry.AddPoint(ctrl2); + entry.AddPoint(dest); + + m_aPaths.push_back(entry); +} + +void XFDrawPath::SmoothCurveTo(XFPoint dest, XFPoint ctrl, sal_Bool absPosition) +{ + XFSvgPathEntry entry; + + if( absPosition ) + entry.SetCommand(A2OUSTR("C")); + else + entry.SetCommand(A2OUSTR("c")); + entry.AddPoint(ctrl); + entry.AddPoint(dest); + + m_aPaths.push_back(entry); +} + +void XFDrawPath::ClosePath(sal_Bool absPosition) +{ + XFSvgPathEntry entry; + + if( absPosition ) + entry.SetCommand(A2OUSTR("Z")); + else + entry.SetCommand(A2OUSTR("z")); + + m_aPaths.push_back(entry); +} + +void XFDrawPath::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + //view-box: + XFRect rect = m_aRect; + + rtl::OUString strViewBox = A2OUSTR("0 0 "); + strViewBox += DoubleToOUString(rect.GetWidth()*1000) + A2OUSTR(" "); + strViewBox += DoubleToOUString(rect.GetHeight()*1000); + pAttrList->AddAttribute( A2OUSTR("svg:viewBox"), strViewBox); + + //points + rtl::OUString strPath; + std::vector<XFSvgPathEntry>::iterator it; + for( it = m_aPaths.begin(); it != m_aPaths.end(); it++ ) + { + XFSvgPathEntry aSvg = *it; + strPath += aSvg.ToString(); + } + strPath = strPath.trim(); + pAttrList->AddAttribute( A2OUSTR("svg:d"), strPath); + + SetPosition(rect); + XFDrawObject::ToXml(pStrm); + + pStrm->StartElement( A2OUSTR("draw:path") ); + ContentToXml(pStrm); + pStrm->EndElement( A2OUSTR("draw:path") ); +} + + +XFRect XFDrawPath::CalcViewBox() +{ + double x1 = 65536; + double y1 = 65536; + double x2 = -1; //not quite safe.() + double y2 = -1; + XFSvgPathEntry aPath; + XFPoint aPoint; + std::vector<XFSvgPathEntry>::iterator itPath = m_aPaths.begin(); + std::vector<XFPoint> points; + std::vector<XFPoint>::iterator itPoint; + do{ + aPath = *itPath; + points = aPath.m_aPoints; + + for( itPoint = points.begin(); itPoint != points.end(); itPoint++ ) + { + aPoint = *itPoint; + if( x1>aPoint.GetX() ) + x1 = aPoint.GetX(); + if( x2<aPoint.GetX() ) + x2 = aPoint.GetX(); + + if( y1>aPoint.GetY() ) + y1 = aPoint.GetY(); + if( y2<aPoint.GetY() ) + y2 = aPoint.GetY(); + } + itPath++; + }while(itPath!=m_aPaths.end()); + + return XFRect(x1,y1,x2-x1,y2-y1); +} diff --git a/lotuswordpro/source/filter/xfilter/xfdrawpath.hxx b/lotuswordpro/source/filter/xfilter/xfdrawpath.hxx new file mode 100644 index 000000000000..98968b2593ff --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawpath.hxx @@ -0,0 +1,153 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Draw path object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-18 create this file. + ************************************************************************/ +#ifndef _XFDRAWPATH_HXX +#define _XFDRAWPATH_HXX + +#include "xfdrawobj.hxx" +#include <vector> + +/** + * @brief + * SVG path segment wrapper. + */ +class XFSvgPathEntry +{ +public: + XFSvgPathEntry(); + + XFSvgPathEntry(rtl::OUString cmd); + +public: + /** + * @descr Set svg path command,L for line,M for move,... + */ + void SetCommand(rtl::OUString cmd); + + /** + * @descr Set svg path point. + */ + void AddPoint(XFPoint pt); + + rtl::OUString ToString(); + + friend class XFDrawPath; +private: + rtl::OUString m_strCommand; + std::vector<XFPoint> m_aPoints; +}; + +/** + * @brief + * For svg path wrapper. + */ +class XFDrawPath : public XFDrawObject +{ +public: + XFDrawPath(); + +public: + /** + * @descr Move command. + */ + void MoveTo(XFPoint pt, sal_Bool absPosition = sal_True); + + /** + * @descr Line command. + */ + void LineTo(XFPoint pt, sal_Bool absPosition = sal_True); + + /** + * @descr Curve command. + */ + void CurveTo(XFPoint dest, XFPoint ctrl1, XFPoint ctrl2, sal_Bool absPosition = sal_True); + + /** + * @descr Smooth curve command. + */ + void SmoothCurveTo(XFPoint dest, XFPoint ctrl, sal_Bool absPosition = sal_True); + + /** + * @descr Close path command. + */ + void ClosePath(sal_Bool absPosition = sal_True); + + XFRect CalcViewBox(); + + virtual void ToXml(IXFStream *pStrm); + +private: + std::vector<XFSvgPathEntry> m_aPaths; +}; + +inline void XFSvgPathEntry::SetCommand(rtl::OUString cmd) +{ + m_strCommand = cmd; +} + +inline void XFSvgPathEntry::AddPoint(XFPoint pt) +{ + m_aPoints.push_back(pt); +} + + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfdrawpolygon.cxx b/lotuswordpro/source/filter/xfilter/xfdrawpolygon.cxx new file mode 100644 index 000000000000..17ebae70157b --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawpolygon.cxx @@ -0,0 +1,101 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Polylon object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-18 create this file. + ************************************************************************/ +#include "xfdrawpolygon.hxx" + +XFDrawPolygon::XFDrawPolygon() +{ +} + +void XFDrawPolygon::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + std::vector<XFPoint>::iterator it; + + pAttrList->Clear(); + //view-box: + XFRect rect = CalcViewBox(); + rtl::OUString strViewBox = A2OUSTR("0 0 "); + strViewBox += DoubleToOUString(rect.GetWidth()*1000) + A2OUSTR(" "); + strViewBox += DoubleToOUString(rect.GetHeight()*1000); + pAttrList->AddAttribute( A2OUSTR("svg:viewBox"), strViewBox); + + //points + rtl::OUString strPoints; + for( it = m_aPoints.begin(); it != m_aPoints.end(); it++ ) + { + XFPoint pt = *it; + double x = (pt.GetX()-rect.GetX())*1000; + double y = (pt.GetY()-rect.GetY())*1000; + strPoints += DoubleToOUString(x) + A2OUSTR(" ") + DoubleToOUString(y) + A2OUSTR(" "); + } + strPoints = strPoints.trim(); + pAttrList->AddAttribute( A2OUSTR("draw:points"), strPoints); + + // + SetPosition(rect.GetX(),rect.GetY(),rect.GetWidth(),rect.GetHeight()); + XFDrawObject::ToXml(pStrm); + + pStrm->StartElement( A2OUSTR("draw:polygon") ); + ContentToXml(pStrm); + pStrm->EndElement( A2OUSTR("draw:polygon") ); +} diff --git a/lotuswordpro/source/filter/xfilter/xfdrawpolygon.hxx b/lotuswordpro/source/filter/xfilter/xfdrawpolygon.hxx new file mode 100644 index 000000000000..ed579b269fde --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawpolygon.hxx @@ -0,0 +1,82 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Polygon object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-18 create this file. + ************************************************************************/ +#ifndef _XFPOLYGON_HXX +#define _XFPOLYGON_HXX + +#include "xfdrawpolyline.hxx" +#include <vector> + +/** + * @brief + * Polygon object. + */ +class XFDrawPolygon : public XFDrawPolyline +{ +public: + XFDrawPolygon(); + +public: + virtual void ToXml(IXFStream *pStrm); +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfdrawpolyline.cxx b/lotuswordpro/source/filter/xfilter/xfdrawpolyline.cxx new file mode 100644 index 000000000000..1fa21dd0eff2 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawpolyline.cxx @@ -0,0 +1,133 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Polyline. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-18 create this file. + ************************************************************************/ +#include "xfdrawpolyline.hxx" + +XFDrawPolyline::XFDrawPolyline() +{ +} + +void XFDrawPolyline::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + std::vector<XFPoint>::iterator it; + + pAttrList->Clear(); + //view-box: + XFRect rect = CalcViewBox(); + rtl::OUString strViewBox = A2OUSTR("0 0 "); + strViewBox += DoubleToOUString(rect.GetWidth()*1000) + A2OUSTR(" "); + strViewBox += DoubleToOUString(rect.GetHeight()*1000); + pAttrList->AddAttribute( A2OUSTR("svg:viewBox"), strViewBox); + + //points + rtl::OUString strPoints; + for( it = m_aPoints.begin(); it != m_aPoints.end(); it++ ) + { + XFPoint pt = *it; + double x = (pt.GetX()-rect.GetX())*1000; + double y = (pt.GetY()-rect.GetY())*1000; + strPoints += DoubleToOUString(x) + A2OUSTR(",") + DoubleToOUString(y) + A2OUSTR(" "); + } + strPoints = strPoints.trim(); + pAttrList->AddAttribute( A2OUSTR("draw:points"), strPoints); + + // + SetPosition(rect.GetX(),rect.GetY(),rect.GetWidth(),rect.GetHeight()); + XFDrawObject::ToXml(pStrm); + + pStrm->StartElement( A2OUSTR("draw:polyline") ); + ContentToXml(pStrm); + pStrm->EndElement( A2OUSTR("draw:polyline") ); +} + +XFRect XFDrawPolyline::CalcViewBox() +{ + double x1 = 0; + double y1 = 0; + double x2 = 0; + double y2 = 0; + XFPoint aPoint; + std::vector<XFPoint>::iterator it = m_aPoints.begin(); + + assert(m_aPoints.size()>0); + + aPoint = *it; + x1 = aPoint.GetX(); + x2 = aPoint.GetX(); + y1 = aPoint.GetY(); + y2 = aPoint.GetY(); + for( ; it != m_aPoints.end(); it++ ) + { + aPoint = *it; + if( x1>aPoint.GetX() ) + x1 = aPoint.GetX(); + if( x2<aPoint.GetX() ) + x2 = aPoint.GetX(); + + if( y1>aPoint.GetY() ) + y1 = aPoint.GetY(); + if( y2<aPoint.GetY() ) + y2 = aPoint.GetY(); + } + return XFRect(x1,y1,x2-x1,y2-y1); +} diff --git a/lotuswordpro/source/filter/xfilter/xfdrawpolyline.hxx b/lotuswordpro/source/filter/xfilter/xfdrawpolyline.hxx new file mode 100644 index 000000000000..e437f0c01dfb --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawpolyline.hxx @@ -0,0 +1,99 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Polyline. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-18 create this file. + ************************************************************************/ +#ifndef _XFPOLYLINE_HXX +#define _XFPOLYLINE_HXX + +#include "xfdrawobj.hxx" +#include <vector> + +class XFDrawPolyline : public XFDrawObject +{ +public: + XFDrawPolyline(); + +public: + void AddPoint(double x, double y); + + void AddPoint(XFPoint pt); + + XFRect CalcViewBox(); + + virtual void ToXml(IXFStream *pStrm); + +protected: + std::vector<XFPoint> m_aPoints; +}; + +inline void XFDrawPolyline::AddPoint(double x, double y) +{ + assert(x>=0&&y>=0); + m_aPoints.push_back( XFPoint(x,y) ); +} + +inline void XFDrawPolyline::AddPoint(XFPoint pt) +{ + assert(pt.GetX()>=0&&pt.GetY()>=0); + m_aPoints.push_back(pt); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfdrawrect.cxx b/lotuswordpro/source/filter/xfilter/xfdrawrect.cxx new file mode 100644 index 000000000000..c5c5acc49010 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawrect.cxx @@ -0,0 +1,83 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Rect object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-17 create this file. + ************************************************************************/ +#include "xfdrawrect.hxx" + +XFDrawRect::XFDrawRect() +{ + m_fCornerRadius = 0; +} + +void XFDrawRect::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + + if( 0 != m_fCornerRadius ) + pAttrList->AddAttribute( A2OUSTR("draw:corner-radius"), DoubleToOUString(m_fCornerRadius) + A2OUSTR("cm") ); + XFDrawObject::ToXml(pStrm); + + pStrm->StartElement( A2OUSTR("draw:rect") ); + ContentToXml(pStrm); + pStrm->EndElement( A2OUSTR("draw:rect") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfdrawrect.hxx b/lotuswordpro/source/filter/xfilter/xfdrawrect.hxx new file mode 100644 index 000000000000..79d735fea64e --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawrect.hxx @@ -0,0 +1,115 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Rect object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-17 create this file. + ************************************************************************/ +#ifndef _XFDRAWRECT_HXX +#define _XFDRAWRECT_HXX + +#include "xfdrawobj.hxx" + +class XFDrawRect : public XFDrawObject +{ +public: + XFDrawRect(); + +public: + void SetStartPoint(XFPoint pt); + + void SetSize(double width, double height); + + void SetWidth(double width); + + void SetHeight(double height); + + void SetCornerRadius(double fCornerRadius); + + virtual void ToXml(IXFStream *pStrm); + +private: + double m_fCornerRadius; +}; + +inline void XFDrawRect::SetStartPoint(XFPoint pt) +{ + m_aRect.SetStartPoint(pt); +} + +inline void XFDrawRect::SetSize(double width, double height) +{ + m_aRect.SetSize(width,height); +} + +inline void XFDrawRect::SetWidth(double width) +{ + m_aRect.SetWidth(width); +} + +inline void XFDrawRect::SetHeight(double height) +{ + m_aRect.SetHeight(height); +} + +inline void XFDrawRect::SetCornerRadius(double fCornerRadius) +{ + m_fCornerRadius = fCornerRadius; +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfdrawstyle.cxx b/lotuswordpro/source/filter/xfilter/xfdrawstyle.cxx new file mode 100644 index 000000000000..dd11827cdc7c --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawstyle.cxx @@ -0,0 +1,349 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Style for all draw object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-21 create this file. + ************************************************************************/ +#include "xfdrawstyle.hxx" +#include "xfdrawlinestyle.hxx" +#include "xfdrawareastyle.hxx" +#include "xfstylemanager.hxx" +#include "xffontworkstyle.hxx" +#include "../lwpglobalmgr.hxx" +XFDrawStyle::XFDrawStyle() +{ + m_eWrap = enumXFWrapNone; + m_nWrapLines = 0; //not limited. + + m_pLineStyle = NULL; + m_pAreaStyle = NULL; + + m_pFontWorkStyle = NULL; + + m_fArrowStartSize = 0.3; + m_fArrowEndSize = 0.3; + m_bArrowStartCenter = sal_False; + m_bArrowStartCenter = sal_False; +} + +XFDrawStyle::~XFDrawStyle() +{ + //don't delete m_pLineStyle, it was managed by XFStyleManager. + if (m_pFontWorkStyle) + { + delete m_pFontWorkStyle; + m_pFontWorkStyle = NULL; + } +} + +void XFDrawStyle::SetLineStyle(double width, XFColor color, sal_Int32 transparency) +{ + if( !m_pLineStyle ) + { + m_pLineStyle = new XFDrawLineStyle(); + m_pLineStyle->SetStyleName( XFGlobal::GenStrokeDashName()); + } + m_pLineStyle->SetWidth(width); + m_pLineStyle->SetColor(color); + m_pLineStyle->SetTransparency(transparency); +} + +void XFDrawStyle::SetLineDashStyle(enumXFLineStyle style, int num1, int num2, double len1, double len2, double space ) +{ + if( !m_pLineStyle ) + { + m_pLineStyle = new XFDrawLineStyle(); + m_pLineStyle->SetStyleName( XFGlobal::GenStrokeDashName()); + } + m_pLineStyle->SetLineStyle(style); + m_pLineStyle->SetDot1Number(num1); + m_pLineStyle->SetDot1Length(len1); + m_pLineStyle->SetDot2Number(num2); + m_pLineStyle->SetDot2Length(len2); + m_pLineStyle->SetSpace(space); + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + pXFStyleManager->AddStyle(m_pLineStyle); +} + +void XFDrawStyle::SetFontWorkStyle(sal_Int8 nForm, enumXFFWStyle eStyle, enumXFFWAdjust eAdjust) +{ + if (!m_pFontWorkStyle) + { + m_pFontWorkStyle = new XFFontWorkStyle(); + } + + m_pFontWorkStyle->SetButtonForm(nForm); + m_pFontWorkStyle->SetFWStyleType(eStyle); + m_pFontWorkStyle->SetFWAdjustType(eAdjust); +} + +void XFDrawStyle::SetAreaColor(XFColor& color) +{ + if( !m_pAreaStyle ) + { + m_pAreaStyle = new XFDrawAreaStyle(); + m_pAreaStyle->SetStyleName( XFGlobal::GenAreaName()); + } + m_pAreaStyle->SetBackColor(color); +} + +void XFDrawStyle::SetAreaLineStyle(enumXFAreaLineStyle style, sal_Int32 angle, double space, XFColor lineColor) +{ + if( !m_pAreaStyle ) + { + m_pAreaStyle = new XFDrawAreaStyle(); + m_pAreaStyle->SetStyleName( XFGlobal::GenAreaName()); + } + m_pAreaStyle->SetAreaStyle(enumXFAreaHatch); + + m_pAreaStyle->SetLineStyle(style); + m_pAreaStyle->SetLineAngle(angle); + m_pAreaStyle->SetLineSpace(space); + m_pAreaStyle->SetLineColor(lineColor); + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + pXFStyleManager->AddStyle(m_pAreaStyle); +} + +enumXFStyle XFDrawStyle::GetStyleFamily() +{ + return enumXFStyleGraphics; +} + +/************************************************************************** + *************************************************************************/ +void XFDrawStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + + pAttrList->AddAttribute( A2OUSTR("style:name"), GetStyleName() ); + pAttrList->AddAttribute( A2OUSTR("style:family"), A2OUSTR("graphics") ); + pStrm->StartElement( A2OUSTR("style:style") ); + + pAttrList->Clear(); + + if( m_eWrap == enumXFWrapBackground ) + { + pAttrList->AddAttribute( A2OUSTR("style:run-through"), A2OUSTR("background") ); + } + else + { + pAttrList->AddAttribute( A2OUSTR("style:run-through"), A2OUSTR("foreground") ); + + if( m_eWrap == enumXFWrapNone ) + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("none") ); + else if( m_eWrap == enumXFWrapLeft ) + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("left") ); + else if( m_eWrap == enumXFWrapRight ) + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("right") ); + else if( m_eWrap == enumXFWrapParallel ) + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("parallel") ); + else if( m_eWrap == enumXFWrapRunThrough ) + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("run-through") ); + else if( m_eWrap == enumXFWrapBest ) + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("dynamic") ); + } + + //line style: + if( m_pLineStyle ) + { + //1. if is a dash style, register the stroke-dash style first. + if( !m_pLineStyle->IsSolid() ) + { +// pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("draw:stroke"), A2OUSTR("dash") ); + pAttrList->AddAttribute( A2OUSTR("draw:stroke-dash"), m_pLineStyle->GetStyleName() ); + } + else + { + pAttrList->AddAttribute( A2OUSTR("draw:stroke"), A2OUSTR("solid") ); + } + + if( m_pLineStyle->GetWidth() > 0 ) + pAttrList->AddAttribute( A2OUSTR("svg:stroke-width"), DoubleToOUString(m_pLineStyle->GetWidth()) + A2OUSTR("cm") ); + + XFColor color = m_pLineStyle->GetColor(); + if( color.IsValid() ) + pAttrList->AddAttribute( A2OUSTR("svg:stroke-color"), color.ToString() ); + + if( m_pLineStyle->GetTransparency()>0 ) + pAttrList->AddAttribute( A2OUSTR("svg:stroke-opacity"), Int32ToOUString(m_pLineStyle->GetTransparency()) + A2OUSTR("%") ); + } + else + pAttrList->AddAttribute( A2OUSTR("draw:stroke"), A2OUSTR("none") ); + //area style: + if( m_pAreaStyle ) + { + if( enumXFAreaSolid == m_pAreaStyle->GetAreaStyle() ) + { + pAttrList->AddAttribute( A2OUSTR("draw:fill"), A2OUSTR("solid") ); + XFColor color = m_pAreaStyle->GetBackColor(); + if( color.IsValid() ) + pAttrList->AddAttribute( A2OUSTR("draw:fill-color"), color.ToString() ); + } + else if( enumXFAreaHatch == m_pAreaStyle->GetAreaStyle() ) + { + pAttrList->AddAttribute( A2OUSTR("draw:fill"), A2OUSTR("hatch") ); + pAttrList->AddAttribute( A2OUSTR("draw:fill-hatch-name"), m_pAreaStyle->GetStyleName() ); + XFColor color = m_pAreaStyle->GetBackColor(); + if( color.IsValid() ) + { + pAttrList->AddAttribute( A2OUSTR("draw:fill-hatch-solid"), A2OUSTR("true") ); + pAttrList->AddAttribute( A2OUSTR("draw:fill-color"), color.ToString() ); + } + } + } + else + pAttrList->AddAttribute( A2OUSTR("draw:fill"), A2OUSTR("none") ); + + if( m_strArrowStart.getLength()>0 ) + { + pAttrList->AddAttribute( A2OUSTR("draw:marker-start"), m_strArrowStart ); + pAttrList->AddAttribute( A2OUSTR("draw:marker-start-width"), DoubleToOUString(m_fArrowStartSize)+A2OUSTR("cm") ); + if( m_bArrowStartCenter ) + pAttrList->AddAttribute( A2OUSTR("draw:draw:marker-start-center"), A2OUSTR("true") ); + } + if( m_strArrowEnd.getLength()>0 ) + { + pAttrList->AddAttribute( A2OUSTR("draw:marker-end"), m_strArrowEnd ); + pAttrList->AddAttribute( A2OUSTR("draw:marker-end-width"), DoubleToOUString(m_fArrowEndSize)+A2OUSTR("cm") ); + if( m_bArrowEndCenter ) + pAttrList->AddAttribute( A2OUSTR("draw:draw:marker-end-center"), A2OUSTR("true") ); + } + if (m_pFontWorkStyle) + { + // style + rtl::OUString aStr = A2OUSTR(""); + switch (m_pFontWorkStyle->GetStyleType()) + { + default: // fall through! + case enumXFFWOff: + break; + case enumXFFWRotate: + aStr = A2OUSTR("rotate"); + break; + case enumXFFWUpright: + aStr = A2OUSTR("upright"); + break; + case enumXFFWSlantX: + aStr = A2OUSTR("slant-x"); + break; + case enumXFFWSlantY: + aStr = A2OUSTR("slant-y"); + break; + } + if (aStr.getLength() > 0) + { + pAttrList->AddAttribute(A2OUSTR("draw:fontwork-style"), aStr); + } + + //adjust + aStr = A2OUSTR(""); + switch (m_pFontWorkStyle->GetAdjustType()) + { + default: // fall througth + case enumXFFWAdjustAutosize: + aStr = A2OUSTR("autosize"); + break; + case enumXFFWAdjustLeft: + aStr = A2OUSTR("left"); + break; + case enumXFFWAdjustCenter: + aStr = A2OUSTR("center"); + break; + case enumXFFWAdustRight: + aStr = A2OUSTR("right"); + break; + } + if (aStr.getLength() > 0) + { + pAttrList->AddAttribute(A2OUSTR("draw:fontwork-adjust"), aStr); + } + + //form + aStr = A2OUSTR(""); + switch (m_pFontWorkStyle->GetButtonForm()) + { + default: // fall through! + case -1: + break; + case 4: + aStr = A2OUSTR("top-arc"); + break; + case 5: + aStr = A2OUSTR("bottom-arc"); + break; + } + if (aStr.getLength() > 0) + { + pAttrList->AddAttribute(A2OUSTR("draw:fontwork-form"), aStr); + } + + // distance + //pAttrList->AddAttribute(A2OUSTR("draw:fontwork-distance"), + // DoubleToOUString(m_pFontWorkStyle->GetFWDistance())+A2OUSTR("cm")); + } + + pStrm->StartElement( A2OUSTR("style:properties") ); + + pStrm->EndElement( A2OUSTR("style:properties") ); + + pStrm->EndElement( A2OUSTR("style:style") ); +} diff --git a/lotuswordpro/source/filter/xfilter/xfdrawstyle.hxx b/lotuswordpro/source/filter/xfilter/xfdrawstyle.hxx new file mode 100644 index 000000000000..bc2475041ba3 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdrawstyle.hxx @@ -0,0 +1,167 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Style for all draw object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-21 create this file. + ************************************************************************/ +#ifndef _XFDRAWSTYLE_HXX +#define _XFDRAWSTYLE_HXX + +#include "xfstyle.hxx" +#include "xfcolor.hxx" +#include <cassert> + +class XFDrawLineStyle; +class XFDrawAreaStyle; +class XFFontWorkStyle; + +/** + * @brief + * Style for all drawing object, which can includes line style, area style, wrap style. + * Line style includes line type, line width and line color. + * Area style can be divided into 5 kinds, color fill, hatch, bitmap, gradient.I only support + * color fill and hatch now. + */ +class XFDrawStyle : public XFStyle +{ +public: + XFDrawStyle(); + + virtual ~XFDrawStyle(); + +public: + /** + * @descr Set drawing wrap type. + */ + void SetWrapType(enumXFWrap wrap, sal_Int32 nParagraphs = 0); + + /** + * @descr Set drawing object border line. + */ + void SetLineStyle(double width, XFColor color = XFColor(0,0,0), sal_Int32 transparency = 0); + + /** + * @descr Set drawing obejct dash border style. + */ + void SetLineDashStyle(enumXFLineStyle style, int num1, int num2, double len1, double len2, double space ); + + /** + * @descr Set drawing object area fill color. + */ + void SetAreaColor(XFColor& color); + + /** + * @descr Set drawing obejct area grid style. + */ + void SetAreaLineStyle(enumXFAreaLineStyle style, sal_Int32 angle = 0, double space = 0.102, XFColor lineColor = XFColor(0,0,0)); + + /** + * @descr Set drawing object arrow start style,only lines can have arrows. + */ + void SetArrowStart(rtl::OUString start, double size=0.3, sal_Bool center = sal_False); + + /** + * @descr Set drawing obejct arrow end style,only lines can have arrows. + */ + void SetArrowEnd(rtl::OUString end, double size=0.3, sal_Bool center = sal_False); + + void SetFontWorkStyle(sal_Int8 nForm, enumXFFWStyle eStyle, enumXFFWAdjust eAdjust); + + virtual enumXFStyle GetStyleFamily(); + + virtual void ToXml(IXFStream *pStrm); + +private: + XFFontWorkStyle* m_pFontWorkStyle; + enumXFWrap m_eWrap; + sal_Int32 m_nWrapLines; + XFDrawLineStyle *m_pLineStyle; + XFDrawAreaStyle *m_pAreaStyle; + rtl::OUString m_strArrowStart; + rtl::OUString m_strArrowEnd; + double m_fArrowStartSize; + double m_fArrowEndSize; + sal_Bool m_bArrowStartCenter; + sal_Bool m_bArrowEndCenter; +}; + +inline void XFDrawStyle::SetWrapType(enumXFWrap wrap, sal_Int32 nParagraphs) +{ + m_eWrap = wrap; + m_nWrapLines = nParagraphs; +} + + +inline void XFDrawStyle::SetArrowStart(rtl::OUString start, double size, sal_Bool center) +{ + assert(size>0); + m_strArrowStart = start; + m_fArrowStartSize = size; + m_bArrowStartCenter = center; +} + +inline void XFDrawStyle::SetArrowEnd(rtl::OUString end, double size, sal_Bool center) +{ + assert(size>0); + m_strArrowEnd = end; + m_fArrowEndSize = size; + m_bArrowEndCenter = center; +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfdropcap.hxx b/lotuswordpro/source/filter/xfilter/xfdropcap.hxx new file mode 100644 index 000000000000..560adf1eb893 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfdropcap.hxx @@ -0,0 +1,152 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Drop cap of a paragraph. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-28 create this file. + ************************************************************************/ +#ifndef _XFDROPCAP_HXX +#define _XFDROPCAP_HXX + +#include "xfglobal.hxx" +#include "ixfproperty.hxx" + +class XFDropcap : public IXFProperty +{ +public: + XFDropcap() + { + Reset(); + } + +public: + void SetCharCount(sal_Int32 count); + + void SetLines(sal_Int32 lines); + + void SetDistance(double distance); + + void Reset(); + + virtual void ToXml(IXFStream *pStrm); + + friend bool operator==(XFDropcap& dc1, XFDropcap& dc2); + friend bool operator!=(XFDropcap& dc1, XFDropcap& dc2); + friend class XFParaStyle; +private: + sal_Int32 m_nCharCount; + sal_Int32 m_nLines; + double m_fDistance; + rtl::OUString m_strStyleName; +}; + +inline void XFDropcap::SetCharCount(sal_Int32 count) +{ + m_nCharCount = count; +} + +inline void XFDropcap::SetLines(sal_Int32 lines) +{ + m_nLines = lines; +} + +inline void XFDropcap::SetDistance(double distance) +{ + m_fDistance = distance; +} + +inline void XFDropcap::Reset() +{ + m_nCharCount = 0; + m_nLines = 0; + m_fDistance = 0; + m_strStyleName = A2OUSTR(""); +} + +inline void XFDropcap::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + if( m_nCharCount < 1 || m_nLines < 2 ) + return; + pAttrList->AddAttribute(A2OUSTR("style:length"), Int32ToOUString(m_nCharCount) ); + pAttrList->AddAttribute(A2OUSTR("style:lines"), Int32ToOUString(m_nLines) ); + pAttrList->AddAttribute(A2OUSTR("style:distance"), DoubleToOUString(m_fDistance) + A2OUSTR("cm") ); + if( m_strStyleName.getLength() ) + pAttrList->AddAttribute(A2OUSTR("style:style-name"), m_strStyleName ); + pStrm->StartElement( A2OUSTR("style:drop-cap") ); + pStrm->EndElement( A2OUSTR("style:drop-cap") ); +} + +inline bool operator==(XFDropcap& dc1, XFDropcap& dc2) +{ + return ( + (dc1.m_nCharCount == dc2.m_nCharCount)&& + (dc1.m_nLines == dc2.m_nLines)&& + (dc1.m_fDistance == dc2.m_fDistance)&& + (dc1.m_strStyleName == dc2.m_strStyleName) + ); +} + +inline bool operator!=(XFDropcap& dc1, XFDropcap& dc2) +{ + return !(dc1==dc2); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfendnote.hxx b/lotuswordpro/source/filter/xfilter/xfendnote.hxx new file mode 100644 index 000000000000..7c85e6a78ef6 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfendnote.hxx @@ -0,0 +1,128 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * End note object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-1-31 create this file. + ************************************************************************/ +#ifndef _XFENDNOTE_HXX +#define _XFENDNOTE_HXX + +#include "xfglobal.hxx" +#include "xfcontent.hxx" +#include "xfcontentcontainer.hxx" + +/** + * @brief + * End note obejct. + */ +class XFEndNote : public XFContentContainer +{ +public: + XFEndNote(); + +public: + void SetLabel(sal_Unicode label); + + virtual void ToXml(IXFStream *pStrm); + +private: + rtl::OUString m_strID; + rtl::OUString m_strLabel; + XFContentContainer m_aContents; +}; + +inline XFEndNote::XFEndNote() +{ + m_strID = XFGlobal::GenNoteName(); +} + +inline void XFEndNote::SetLabel(sal_Unicode label) +{ + sal_Unicode chs[2]; + chs[0] = label; + chs[1] = 0; + + m_strLabel = rtl::OUString(chs); +} + +inline void XFEndNote::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pAttrList->AddAttribute( A2OUSTR("text:id"), m_strID ); + pStrm->StartElement( A2OUSTR("text:endnote") ); + + pAttrList->Clear(); + if( m_strLabel.getLength() ) + pAttrList->AddAttribute( A2OUSTR("text:label"), m_strLabel ); + pStrm->StartElement( A2OUSTR("text:endnote-citation") ); + if( m_strLabel.getLength()) + pStrm->Characters(m_strLabel); + pStrm->EndElement( A2OUSTR("text:endnote-citation") ); + + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("text:endnote-body") ); + XFContentContainer::ToXml(pStrm); + pStrm->EndElement( A2OUSTR("text:endnote-body") ); + + pStrm->EndElement( A2OUSTR("text:endnote") ); +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfendnoteconfig.hxx b/lotuswordpro/source/filter/xfilter/xfendnoteconfig.hxx new file mode 100644 index 000000000000..ae8a9ef2bce0 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfendnoteconfig.hxx @@ -0,0 +1,82 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Endnote config. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-03-29 create this file. + ************************************************************************/ +#ifndef _XFENDNOTECONFIG_HXX +#define _XFENDNOTECONFIG_HXX + +#include "xfendnoteconfig.hxx" + +class XFEndnoteConfig : public XFFootnoteConfig +{ +public: + XFEndnoteConfig() : XFFootnoteConfig() + { + m_bIsFootnote = sal_False; + m_bInsertInPage = sal_False; + m_strDefaultStyle = A2OUSTR("Endnote"); + m_strMasterPage = A2OUSTR("Endnote"); + m_strCitationStyle = A2OUSTR("Endnote Symbol"); + m_strBodyStyle = A2OUSTR("Endnote anchor"); + } +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfentry.cxx b/lotuswordpro/source/filter/xfilter/xfentry.cxx new file mode 100644 index 000000000000..1c8165aa0681 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfentry.cxx @@ -0,0 +1,108 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * index entry object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-04-26 create this file. + ************************************************************************/ +#include "xfentry.hxx" + +XFEntry::XFEntry() +{ + m_eType = enumXFEntryTOC; + m_bMainEntry = sal_False; + m_nOutlineLevel = 1; +} + +void XFEntry::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pAttrList->AddAttribute( A2OUSTR("text:string-value"), m_strValue ); + + if( m_eType == enumXFEntryTOC ) + { + pAttrList->AddAttribute( A2OUSTR("text:outline-level"), Int32ToOUString(m_nOutlineLevel) ); + pStrm->StartElement( A2OUSTR("text:toc-mark") ); +// pStrm->Characters(m_strDisplay); + pStrm->EndElement( A2OUSTR("text:toc-mark") ); + } + else if( m_eType == enumXFEntryAlphabetical ) + { + pAttrList->AddAttribute( A2OUSTR("text:key1"), m_strKey1 ); + if( m_strKey2.getLength()>0 ) + pAttrList->AddAttribute( A2OUSTR("text:key2"), m_strKey2 ); + + if( m_bMainEntry ) + pAttrList->AddAttribute( A2OUSTR("text:main-etry"), A2OUSTR("true") ); + + pStrm->StartElement( A2OUSTR("text:alphabetical-index-mark") ); +// pStrm->Characters(m_strDisplay); + pStrm->EndElement( A2OUSTR("text:alphabetical-index-mark") ); + } + else if( m_eType == enumXFEntryUserIndex ) + { + pAttrList->AddAttribute( A2OUSTR("text:outline-level"), Int32ToOUString(m_nOutlineLevel) ); + pAttrList->AddAttribute( A2OUSTR("text:index-name"), m_strName ); + + pStrm->StartElement( A2OUSTR("text:user-index-mark") ); +// pStrm->Characters(m_strDisplay); + pStrm->EndElement( A2OUSTR("text:user-index-mark") ); + } +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfentry.hxx b/lotuswordpro/source/filter/xfilter/xfentry.hxx new file mode 100644 index 000000000000..799c8cba27c8 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfentry.hxx @@ -0,0 +1,162 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * index entry object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-04-26 create this file. + ************************************************************************/ +#ifndef _XFENTRY_HXX +#define _XFENTRY_HXX + +#include "xfcontent.hxx" + +/** + * @brief + * Index entry obejct. + */ +class XFEntry : public XFContent +{ +public: + XFEntry(); + +public: + /** + * @descr Set entry type. + */ + void SetEntryType(enumXFEntry type); + + /** + * @descr Set entry string value. + */ + void SetStringValue(const rtl::OUString& value); + + /** + * @descr Set display string. + */ + void SetStringDisplay(const rtl::OUString& display); + + /** + * @descr Set entry name. + */ + void SetEntryName(const rtl::OUString& name); + + /** + * @descr Set entry key. The keys is available only for enumXFEntryAlphabetical. + */ + void SetKey(const rtl::OUString& key1, const rtl::OUString& key2=A2OUSTR("")); + + /** + * @descr Set whether it's a main entry. This is available only for enumXFEntryAlphabetical. + */ + void SetMainEntry(sal_Bool main); + + /** + * @descr Set outline level. This is available for enumXFEntryTOC and enumXFEntryUserIndex. + */ + void SetOutlineLevel(sal_Int32 level); + + virtual void ToXml(IXFStream *pStrm); + +private: + enumXFEntry m_eType; + rtl::OUString m_strValue; + rtl::OUString m_strDisplay; + rtl::OUString m_strKey1; + rtl::OUString m_strKey2; + rtl::OUString m_strName; + sal_Bool m_bMainEntry; + sal_Int32 m_nOutlineLevel; +}; + +inline void XFEntry::SetEntryType(enumXFEntry type) +{ + m_eType = type; +} + +inline void XFEntry::SetStringValue(const rtl::OUString& value) +{ + m_strValue = value; +} + +inline void XFEntry::SetStringDisplay(const rtl::OUString& display) +{ + m_strDisplay = display; +} + +inline void XFEntry::SetEntryName(const rtl::OUString& name) +{ + m_strName = name; +} + +inline void XFEntry::SetKey(const rtl::OUString& key1, const rtl::OUString& key2/* =A2OUSTR */) +{ + m_strKey1 = key1; + m_strKey2 = key2; +} + +inline void XFEntry::SetMainEntry(sal_Bool main) +{ + m_bMainEntry = main; +} + +inline void XFEntry::SetOutlineLevel(sal_Int32 level) +{ + m_nOutlineLevel = level; +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xffileattrlist.cxx b/lotuswordpro/source/filter/xfilter/xffileattrlist.cxx new file mode 100644 index 000000000000..059357974ec2 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xffileattrlist.cxx @@ -0,0 +1,82 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Attribute list for sax element,this is a help class to write xml to + * local file. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#include "xffileattrlist.hxx" + +XFFileAttrList::XFFileAttrList() +{ +} + +XFFileAttrList::~XFFileAttrList() +{ +} + +void XFFileAttrList::AddAttribute(const rtl::OUString& name, const rtl::OUString& value) +{ + m_aAttrList.push_back( std::pair<rtl::OUString,rtl::OUString>(name,value) ); +} + +void XFFileAttrList::Clear() +{ + m_aAttrList.clear(); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xffileattrlist.hxx b/lotuswordpro/source/filter/xfilter/xffileattrlist.hxx new file mode 100644 index 000000000000..bc72493747af --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xffileattrlist.hxx @@ -0,0 +1,89 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Wrapper the sax interface for xml output. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ + +#ifndef _XFFILEATTRLIST_HXX +#define _XFFILEATTRLIST_HXX + +#include "ixfattrlist.hxx" +#include "rtl/ustring.hxx" +#include <vector> +#include <utility> + +class XFFileAttrList : public IXFAttrList +{ +public: + + XFFileAttrList(); + virtual ~XFFileAttrList(); + //Interface ISaxAttributeList: + + virtual void AddAttribute(const rtl::OUString& name, const rtl::OUString& value); + virtual void Clear(); + + friend class XFFileStream; +private: + std::vector<std::pair<rtl::OUString,rtl::OUString> > m_aAttrList; + +}; + +#endif //XFFILEATTRLIST
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xffilestream.cxx b/lotuswordpro/source/filter/xfilter/xffilestream.cxx new file mode 100644 index 000000000000..9c4520a14382 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xffilestream.cxx @@ -0,0 +1,208 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Interface for the all content object,ie. text,paragraph,picture,and so on. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#include "xffilestream.hxx" +#include "xffileattrlist.hxx" +#include "ixfattrlist.hxx" + +void WriteStartTag(std::ofstream& ofs, const char *pStr, int len); +void WriteEndTag(std::ofstream& ofs, const char *pStr, int len); +void WriteString(std::ofstream& ofs, const char *pStr, int len); +void WriteXmlString(std::ofstream& ofs, const char *pStr, int len); +void WriteOUString(std::ofstream& ofs, const rtl::OUString& oustr); + +XFFileStream::XFFileStream(std::string strFileName):m_aFile(strFileName.c_str()) +{ + m_pAttrList = new XFFileAttrList(); +} + +XFFileStream::~XFFileStream() +{ + if( m_pAttrList ) + delete m_pAttrList; +} + +void XFFileStream::StartDocument() +{ + std::string strXmlDecl = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; + WriteString(m_aFile, strXmlDecl.c_str(),strXmlDecl.length()); +} + +void XFFileStream::EndDocument() +{ + m_aFile.close(); +} + + +void XFFileStream::StartElement(const rtl::OUString& oustr) +{ + WriteString(m_aFile, "\n<",2); + WriteOUString(m_aFile, oustr); + + //write attributes: + std::vector<std::pair<rtl::OUString,rtl::OUString> >::iterator it; + for( it = m_pAttrList->m_aAttrList.begin(); it != m_pAttrList->m_aAttrList.end(); it++ ) + { + std::pair<rtl::OUString,rtl::OUString> pair = *it; + rtl::OUString name = pair.first; + rtl::OUString value = pair.second; + + WriteString(m_aFile," ",1); + WriteOUString(m_aFile, name); + WriteString(m_aFile, "=\"",2); + WriteOUString(m_aFile, value); + WriteString(m_aFile, "\"",1); + + } + + WriteString(m_aFile, ">",1); + m_pAttrList->Clear(); +} + +void XFFileStream::EndElement(const rtl::OUString& oustr) +{ + rtl::OString ostr; + + ostr = rtl::OUStringToOString(oustr,RTL_TEXTENCODING_UTF8); + WriteEndTag(m_aFile, ostr.getStr(), ostr.getLength()); +} + +void XFFileStream::Characters(const rtl::OUString& oustr) +{ + WriteOUString(m_aFile, oustr); +} + +IXFAttrList* XFFileStream::GetAttrList() +{ + return m_pAttrList; +} + +//------------------------------------------------------------------------------ + +void WriteStartTag(std::ofstream& ofs, const char *pStr, int len) +{ + ofs.write("\n<",2); + ofs.write(pStr,len); +} + +void WriteEndTag(std::ofstream& ofs, const char *pStr, int len) +{ + ofs.write("</",2); + ofs.write(pStr,len); + ofs.write(">\n",2); +} + +void WriteString(std::ofstream& ofs, const char *pStr, int len) +{ + ofs.write(pStr,len); +} + +/** + * @descr: Replace some reserved characters of xml character into xml entity.Please refer to w3c xml spec. + */ +void WriteXmlString(std::ofstream& ofs, const char *pStr, int len) +{ + std::string str; + + for( int i=0; i<len; i++ ) + { + switch(pStr[i]) + { + case '&': + str += "&"; + break; + case '<': + str += "<"; + break; + case '>': + str += ">"; + break; + case '\'': + str += "'"; + break; + case '\"': + str += """; + break; + case 13: + str += "
"; + break; + case 10: + str += "
"; + break; + case 9: + str += "	"; + break; + default: + str += pStr[i]; + } + } + ofs.write(str.c_str(),str.length()); +} + +void WriteOUString(std::ofstream& ofs, const rtl::OUString& oustr) +{ + rtl::OString ostr; + + ostr = rtl::OUStringToOString(oustr,RTL_TEXTENCODING_UTF8); + + WriteXmlString(ofs, ostr.getStr(),ostr.getLength()); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xffilestream.hxx b/lotuswordpro/source/filter/xfilter/xffilestream.hxx new file mode 100644 index 000000000000..d9fdf70d1bce --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xffilestream.hxx @@ -0,0 +1,91 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Wrapper for sax stream to write to local file. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#ifndef _XFFILESTREAM_HXX +#define _XFFILESTREAM_HXX + +#include "ixfstream.hxx" +#include <fstream> +#include <rtl/ustring.hxx> + +class XFFileAttrList; + +class XFFileStream : public IXFStream +{ +public: + XFFileStream(std::string strFileName); + virtual ~XFFileStream(); + + //interface IXFSaxStream + virtual void StartDocument(); + virtual void EndDocument(); + virtual void StartElement(const rtl::OUString& oustr); + virtual void EndElement(const rtl::OUString& oustr); + virtual void Characters(const rtl::OUString& oustr); + virtual IXFAttrList* GetAttrList(); + +private: + std::ofstream m_aFile; + XFFileAttrList *m_pAttrList; +}; + +#endif //XFFILESTREAM_INC diff --git a/lotuswordpro/source/filter/xfilter/xffloatframe.cxx b/lotuswordpro/source/filter/xfilter/xffloatframe.cxx new file mode 100644 index 000000000000..dfabe86b8f51 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xffloatframe.cxx @@ -0,0 +1,91 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Float frame whose anchor is page. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-21 create this file. + ************************************************************************/ +#include "xffloatframe.hxx" + +XFFloatFrame::XFFloatFrame(sal_Int32 page) +{ + m_nStart = page; + m_nEnd = page; +} + +XFFloatFrame::XFFloatFrame(sal_Int32 start, sal_Int32 end, sal_Bool all) +{ + m_nStart = start; + m_nEnd = end; + m_bAll = all; + SetAnchorType(enumXFAnchorPage); +} + +void XFFloatFrame::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + for( int i=m_nStart; i<=m_nEnd; i++ ) + { + XFFrame::SetAnchorPage(i); + XFFrame::ToXml(pStrm); + if( !m_bAll ) + i++; + } +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xffloatframe.hxx b/lotuswordpro/source/filter/xfilter/xffloatframe.hxx new file mode 100644 index 000000000000..b754bc9856c1 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xffloatframe.hxx @@ -0,0 +1,93 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Float frame whose anchor is page. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-21 create this file. + ************************************************************************/ +#ifndef _XFFLOATFRAME_HXX +#define _XFFLOATFRAME_HXX + +#include "xfframe.hxx" +#include <vector> + +/** + * @brief + * Floating frame on any page. + * You can specify it to be on all pages, on odd pages, or on even pages. + */ +class XFFloatFrame : public XFFrame +{ +public: + XFFloatFrame(sal_Int32 page); + + /** + * @descr output range: [start,end], not [start,end). + */ + XFFloatFrame(sal_Int32 start, sal_Int32 end, sal_Bool all=sal_False); + +public: + void ToXml(IXFStream *pStrm); + +private: + sal_Int32 m_nStart; + sal_Int32 m_nEnd; + sal_Bool m_bAll; +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xffont.cxx b/lotuswordpro/source/filter/xfilter/xffont.cxx new file mode 100644 index 000000000000..2067372e4663 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xffont.cxx @@ -0,0 +1,413 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Font object to serial to xml filter. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + * 2005-01-14 add scale,position,emphasize support. + * 2005-01-24 move some tool function to xfutil.hxx + ************************************************************************/ +#include "xffont.hxx" + +XFFont::XFFont() +{ + m_nFontSize = 0; + m_nFontSizeAsia = 0; + m_nFontSizeComplex = 0; + m_bItalic = sal_False; + m_bItalicAsia = sal_False; + m_bItalicComplex = sal_False; + m_bBold = sal_False; + m_bBoldAsia = sal_False; + m_bBoldComplex = sal_False; + m_eUnderline = enumXFUnderlineNone; + m_eCrossout = enumXFCrossoutNone; + m_eRelief = enumXFReliefNone; + m_eTransform = enumXFTransformNone; + m_eEmphasize = enumXFEmphasizeNone; + m_bEmphasizeTop = sal_True; + m_bOutline = sal_False; + m_bShadow = sal_False; + m_bBlink = sal_False; + m_nPosition = 33; + m_nScale = 58; + m_fCharSpace = 0; + m_nWidthScale = 100; + m_bWordByWord = sal_False; + m_nFlag = 0; +} +/* + The Following variable are to be compared: + rtl::OUString m_strFontName; + rtl::OUString m_strFontNameAsia; + rtl::OUString m_strFontNameComplex; + sal_Int16 m_nFontSize; + sal_Int16 m_nFontSizeAsia; + sal_Int16 m_nFontSizeComplex; + sal_Bool m_bItalic; + sal_Bool m_bItalicAsia; + sal_Bool m_bItalicComplex; + sal_Bool m_bBold; + sal_Bool m_bBoldAsia; + sal_Bool m_bBoldComplex; + sal_Int16 m_nUnderline; + sal_uInt32 m_nUnderlineColor; + + sal_uInt32 m_nFlag; +*/ +bool operator==(XFFont& f1, XFFont& f2) +{ + //The most possible entry be first: + if( f1.m_nFlag != f2.m_nFlag ) + return false; + + if( f1.m_strFontName != f2.m_strFontName || + f1.m_strFontNameAsia != f2.m_strFontNameAsia || + f1.m_strFontNameComplex != f2.m_strFontNameComplex + ) + return false; + + if( f1.m_nFontSize != f2.m_nFontSize || + f1.m_nFontSizeAsia != f2.m_nFontSizeAsia || + f1.m_nFontSizeComplex != f2.m_nFontSizeComplex + ) + return false; + + if( f1.m_bItalic != f2.m_bItalic || + f1.m_bItalicAsia != f2.m_bItalicAsia || + f1.m_bItalicComplex != f2.m_bItalicComplex + ) + return false; + + if( f1.m_bBold != f2.m_bBold || + f1.m_bBoldAsia != f2.m_bBoldAsia || + f1.m_bBoldComplex != f2.m_bBoldComplex + ) + return false; + + if( f1.m_nFlag&XFFONT_FLAG_UNDERLINE ) + { + if( f1.m_eUnderline != f2.m_eUnderline ) + return false; + } + + if( f1.m_nFlag&XFFONT_FLAG_UNDERLINECOLOR ) + { + if( f1.m_aUnderlineColor != f2.m_aUnderlineColor ) + return false; + } + + if( f1.m_nFlag&XFFONT_FLAG_CROSSOUT ) + { + if( f1.m_eCrossout != f2.m_eCrossout ) + return false; + } + + if( f1.m_nFlag&XFFONT_FLAG_RELIEF ) + { + if( f1.m_eRelief != f2.m_eRelief ) + return false; + } + + if( f1.m_nFlag&XFFONT_FLAG_TRANSFORM ) + { + if( f1.m_eTransform != f2.m_eTransform ) + return false; + } + + if( f1.m_nFlag&XFFONT_FLAG_EMPHASIZE ) + { + if( f1.m_eEmphasize != f2.m_eEmphasize ) + return false; + if( f1.m_bEmphasizeTop != f2.m_bEmphasizeTop ) + return false; + } + + if( f1.m_bWordByWord != f2.m_bWordByWord ) + return false; + + if( f1.m_nFlag&XFFONT_FLAG_OUTLINE ) + { + if( f1.m_bOutline != f2.m_bOutline ) + return false; + } + + if( f1.m_nFlag&XFFONT_FLAG_SHADOW ) + { + if( f1.m_bShadow != f2.m_bShadow ) + return false; + } + + if( f1.m_nFlag&XFFONT_FLAG_BLINK ) + { + if( f1.m_bBlink != f2.m_bBlink ) + return false; + } + + if( f1.m_nFlag&XFFONT_FLAG_POSITION ) + { + if( f1.m_nPosition != f2.m_nPosition ) + return false; + } + + if( f1.m_nFlag&XFFONT_FLAG_SCALE ) + { + if( f1.m_nScale != f2.m_nScale ) + return false; + } + + if( f1.m_nFlag&XFFONT_FLAG_CHARSPACE ) + { + if( f1.m_fCharSpace != f2.m_fCharSpace ) + return false; + } + + if( f1.m_nFlag&XFFONT_FLAG_WIDTHSCALE ) + { + if( f1.m_nWidthScale != f2.m_nWidthScale ) + return false; + } + + if( f1.m_nFlag&XFFONT_FLAG_COLOR ) + { + if( f1.m_aColor != f2.m_aColor ) + return false; + } + + if( f1.m_nFlag&XFFONT_FLAG_BGCOLOR ) + { + if( f1.m_aBackColor != f2.m_aBackColor ) + return false; + } + + return true; +} + +bool operator!=(XFFont& f1, XFFont& f2) +{ + return !(f1==f2); +} + + +void XFFont::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + if( m_nFlag & XFFONT_FLAG_NAME ) + { + pAttrList->AddAttribute(A2OUSTR("style:font-name"),m_strFontName ); + } + + if( m_nFlag & XFFONT_FLAG_NAME_ASIA ) + { + pAttrList->AddAttribute(A2OUSTR("style:font-name-asian"),m_strFontNameAsia ); + } + + if( m_nFlag & XFFONT_FLAG_NAME_COMPLEX ) + { + pAttrList->AddAttribute(A2OUSTR("style:font-name-complex"), m_strFontNameComplex); + } + + //font size: + if( (m_nFlag & XFFONT_FLAG_SIZE) && m_nFontSize != 0 ) + { + rtl::OUString strSize = Int32ToOUString(m_nFontSize); + strSize += A2OUSTR("pt"); + pAttrList->AddAttribute(A2OUSTR("fo:font-size"),strSize); + } + if( (m_nFlag & XFFONT_FLAG_SIZE_ASIA) && m_nFontSizeAsia ) + { + rtl::OUString strSize = Int32ToOUString(m_nFontSizeAsia); + strSize += A2OUSTR("pt"); + pAttrList->AddAttribute(A2OUSTR("style:font-size-asian"),strSize); + } + if( (m_nFlag & XFFONT_FLAG_SIZE_COMPLEX) && m_nFontSizeComplex ) + { + rtl::OUString strSize = Int32ToOUString(m_nFontSizeComplex); + strSize += A2OUSTR("pt"); + pAttrList->AddAttribute(A2OUSTR("style:font-size-complex"),strSize); + } + + //italic flag: + if( ( m_nFlag & XFFONT_FLAG_ITALIC) && m_bItalic ) + { + pAttrList->AddAttribute(A2OUSTR("fo:font-style"), A2OUSTR("italic")); + } + if( (m_nFlag & XFFONT_FLAG_ITALIC_ASIA) && m_bItalicAsia ) + { + pAttrList->AddAttribute(A2OUSTR("style:font-style-asian"), A2OUSTR("italic")); + } + if( (m_nFlag & XFFONT_FLAG_ITALIC_COMPLEX) && m_bItalicComplex ) + { + pAttrList->AddAttribute(A2OUSTR("style:font-style-complex"), A2OUSTR("italic")); + } + + //Bold flag: + if( (m_nFlag & XFFONT_FLAG_BOLD) && m_bBold ) + { + pAttrList->AddAttribute(A2OUSTR("fo:font-weight"), A2OUSTR("bold")); + } + if( (m_nFlag & XFFONT_FLAG_BOLD_ASIA) && m_bBoldAsia ) + { + pAttrList->AddAttribute(A2OUSTR("style:font-weight-asian"), A2OUSTR("bold")); + } + if( (m_nFlag & XFFONT_FLAG_BOLD_ASIA) && m_bBoldComplex ) + { + pAttrList->AddAttribute(A2OUSTR("style:font-weight-complex"), A2OUSTR("bold")); + } + //underline: + if( (m_nFlag & XFFONT_FLAG_UNDERLINE) && m_eUnderline ) + { + pAttrList->AddAttribute(A2OUSTR("style:text-underline"), GetUnderlineName(m_eUnderline) ); + if( (m_nFlag & XFFONT_FLAG_UNDERLINECOLOR) ) + { + pAttrList->AddAttribute( A2OUSTR("style:text-underline-color"), m_aUnderlineColor.ToString() ); + } + else + pAttrList->AddAttribute( A2OUSTR("style:text-underline-color"), A2OUSTR("font-color") ); + } + + //enumCrossoutType m_eCrossout; + if( (m_nFlag & XFFONT_FLAG_CROSSOUT) && m_eCrossout ) + { + pAttrList->AddAttribute(A2OUSTR("style:text-crossing-out"), GetCrossoutName(m_eCrossout) ); + } + + if( m_nFlag & XFFONT_FLAG_UNDERLINE || m_nFlag & XFFONT_FLAG_CROSSOUT ) + { + if( m_bWordByWord ) + pAttrList->AddAttribute(A2OUSTR("fo:score-spaces"), A2OUSTR("false") ); + else + pAttrList->AddAttribute(A2OUSTR("fo:score-spaces"), A2OUSTR("true") ); + } + + if( (m_nFlag & XFFONT_FLAG_RELIEF) && m_eRelief ) + { + pAttrList->AddAttribute(A2OUSTR("style:font-relief"), GetReliefName(m_eRelief) ); + } + + if( (m_nFlag & XFFONT_FLAG_TRANSFORM) && m_eTransform ) + { + //enumTransformSmallCap is different: + if( m_eTransform == enumXFTransformSmallCaps ) + pAttrList->AddAttribute(A2OUSTR("fo:font-variant"), GetTransformName(m_eTransform) ); + else + pAttrList->AddAttribute(A2OUSTR("fo:text-transform"), GetTransformName(m_eTransform) ); + } + + if( (m_nFlag & XFFONT_FLAG_EMPHASIZE) && m_eEmphasize ) + { + rtl::OUString empha = GetEmphasizeName(m_eEmphasize); + empha += A2OUSTR(" "); + if( m_bEmphasizeTop ) + empha += A2OUSTR("above"); + pAttrList->AddAttribute(A2OUSTR("style:text-emphasize"), empha ); + } + + if( (m_nFlag & XFFONT_FLAG_OUTLINE) && m_bOutline ) + { + pAttrList->AddAttribute(A2OUSTR("style:text-outline"), A2OUSTR("true") ); + } + + if( (m_nFlag & XFFONT_FLAG_SHADOW) && m_bShadow ) + { + pAttrList->AddAttribute(A2OUSTR("fo:text-shadow"), A2OUSTR("1pt 1pt") ); + } + + if( (m_nFlag & XFFONT_FLAG_BLINK) && m_bBlink ) + { + pAttrList->AddAttribute(A2OUSTR("style:text-blinking"), A2OUSTR("true") ); + } + + + //position & sacle: + if( ((m_nFlag & XFFONT_FLAG_SCALE) && m_nScale>0 ) || + ((m_nFlag & XFFONT_FLAG_POSITION) && m_nPosition != 0) + ) + { + rtl::OUString tmp; + tmp = Int32ToOUString(m_nPosition) + A2OUSTR("% "); + tmp += Int32ToOUString(m_nScale) + A2OUSTR("%"); + pAttrList->AddAttribute(A2OUSTR("style:text-position"), tmp ); + } + + //char space: + if( (m_nFlag & XFFONT_FLAG_CHARSPACE) && m_fCharSpace != 0 ) + { + pAttrList->AddAttribute(A2OUSTR("fo:letter-spacing"), DoubleToOUString(m_fCharSpace)+A2OUSTR("cm") ); + } + + if( (m_nFlag&XFFONT_FLAG_WIDTHSCALE) && m_nWidthScale != 100 ) + { + pAttrList->AddAttribute(A2OUSTR("style:text-scale"), DoubleToOUString(m_nWidthScale)+A2OUSTR("%") ); + } + + //Color: + if( (m_nFlag & XFFONT_FLAG_COLOR) ) + { + pAttrList->AddAttribute( A2OUSTR("fo:color"), m_aColor.ToString() ); + } + + if( (m_nFlag & XFFONT_FLAG_BGCOLOR) ) + { + if (m_bTransparent) + pAttrList->AddAttribute( A2OUSTR("style:text-background-color"), A2OUSTR("transparent")); + else + pAttrList->AddAttribute( A2OUSTR("style:text-background-color"), m_aBackColor.ToString() ); + } +} diff --git a/lotuswordpro/source/filter/xfilter/xffont.hxx b/lotuswordpro/source/filter/xfilter/xffont.hxx new file mode 100644 index 000000000000..a21a534c0f47 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xffont.hxx @@ -0,0 +1,508 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Font object to serial to xml filter. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#ifndef _XFFONT_HXX +#define _XFFONT_HXX + +#include "xfglobal.hxx" +#include "xfcolor.hxx" + +#define XFFONT_FLAG_NAME 0X00000001 +#define XFFONT_FLAG_NAME_ASIA 0X00000002 +#define XFFONT_FLAG_NAME_COMPLEX 0X00000004 + +#define XFFONT_FLAG_SIZE 0X00000008 +#define XFFONT_FLAG_SIZE_ASIA 0X00000010 +#define XFFONT_FLAG_SIZE_COMPLEX 0X00000020 + +#define XFFONT_FLAG_ITALIC 0X00000040 +#define XFFONT_FLAG_ITALIC_ASIA 0X00000080 +#define XFFONT_FLAG_ITALIC_COMPLEX 0X00000100 + +#define XFFONT_FLAG_BOLD 0X00000200 +#define XFFONT_FLAG_BOLD_ASIA 0X00000400 +#define XFFONT_FLAG_BOLD_COMPLEX 0X00000800 + +#define XFFONT_FLAG_UNDERLINE 0X00001000 +#define XFFONT_FLAG_UNDERLINECOLOR 0X00002000 + +#define XFFONT_FLAG_POSITION 0X00004000 +#define XFFONT_FLAG_SCALE 0X00008000 +#define XFFONT_FLAG_CHARSPACE 0x00010000 + +#define XFFONT_FLAG_COLOR 0x00020000 +#define XFFONT_FLAG_BGCOLOR 0x00040000 + +#define XFFONT_FLAG_CROSSOUT 0x00080000 +#define XFFONT_FLAG_RELIEF 0x00100000 +#define XFFONT_FLAG_TRANSFORM 0x00200000 +#define XFFONT_FLAG_EMPHASIZE 0x00400000 +#define XFFONT_FLAG_OUTLINE 0x00800000 +#define XFFONT_FLAG_SHADOW 0x01000000 +#define XFFONT_FLAG_BLINK 0x02000000 +#define XFFONT_FLAG_WIDTHSCALE 0x04000000 + +/** + * @descr + * The font struct of openoffice xml filter. + * There should be some basic members,ie: + + * font name + * font family + * font size + * font italic + * font bold + * font underline + * font underline color + */ +class XFFont +{ +public: + XFFont(); + +public: + /** + * @descr Set font name. + */ + void SetFontName(rtl::OUString name); + + /** + * @descr Set font name for asia locale. + */ + void SetFontNameAsia(rtl::OUString name); + + /** + * @descr Set font name for BIDI locale. + */ + void SetFontNameComplex(rtl::OUString name); + + /** + * @descr Set font size. + */ + void SetFontSize(sal_Int16 size); + + /** + * @descr Set font size for asia locale. + */ + void SetFontSizeAsia(sal_Int16 size); + + /** + * @descr Set font size for BIDI locale. + */ + void SetFontSizeComplex(sal_Int16 size); + + /** + * @descr Set whether font is italic. + */ + void SetItalic(sal_Bool italic = true); + + /** + * @descr Set whether font is italic for asia locale. + */ + void SetItalicAsia(sal_Bool italic); + + /** + * @descr Set whether font is italic for BIDI locale. + */ + void SetItalicComplex(sal_Bool italic); + + /** + * @descr Set font bold. + */ + void SetBold(sal_Bool bold = true); + + /** + * @descr Set font bold for asia locale. + */ + void SetBoldAsia(sal_Bool bold); + + /** + * @descr Set font bold for complex locale. + */ + void SetBoldComplex(sal_Bool bold); + + /** + * @descr Set underline style. + */ + void SetUnderline(enumXFUnderline underline,sal_Bool wordByWord=sal_False); + + /** + * @descr Set underline color. + */ + void SetUnderlineColor(XFColor color=XFColor(128,128,0)); + + /** + * @descr Set crossout. + */ + void SetCrossout(enumXFCrossout cross,sal_Bool wordByWord=sal_False); + + /** + * @descr Set font relief. + */ + void SetRelief(enumXFRelief relief); + + /** + * @descr Set font transform type,pls refer to enumXFTransform. + */ + void SetTransform(enumXFTransform transform); + + /** + * @descr Set font emphasize effect. + */ + void SetEmphasize(enumXFEmphasize emphasize, sal_Bool top = sal_True); + + /** + * @descr Set outline effect. + */ + void SetOutline(sal_Bool outline); + + /** + * @descr Set font shadow. + */ + void SetShadow(sal_Bool shadow); + + /** + * @descr Set font blink effect. + */ + void SetBlink(sal_Bool blink); + + /** + * @descr Set upper script or lower script. + */ + void SetPosition(sal_Bool bUpperScript = sal_True, sal_Int16 pos = 33, sal_Int16 scale = 58); + + /** + * @descr Set space between chars in percent. + */ + void SetCharSpace(sal_Int16 space); + + /** + * @descr Set char width scale in percent. + */ + void SetWidthScale(sal_Int16 widthScale); + + /** + * @descr Set font color. + */ + void SetColor(XFColor& color); + + /** + * @descr Set font background color. + */ + void SetBackColor(XFColor& color); + void SetBackColorTransparent(); + + //getter: + enumXFTransform GetTransform(); + + sal_Int16 GetFontSize(); + XFColor GetColor(); + + sal_uInt32 GetFlag(){ return m_nFlag; } + + void ToXml(IXFStream *pStrm); + + friend bool operator==(XFFont& f1, XFFont& f2); + friend bool operator!=(XFFont& f1, XFFont& f2); + friend class XFFontFactory; +private: + rtl::OUString m_strFontName; + rtl::OUString m_strFontNameAsia; + rtl::OUString m_strFontNameComplex; + sal_Int16 m_nFontSize; + sal_Int16 m_nFontSizeAsia; + sal_Int16 m_nFontSizeComplex; + sal_Bool m_bItalic; + sal_Bool m_bItalicAsia; + sal_Bool m_bItalicComplex; + sal_Bool m_bBold; + sal_Bool m_bBoldAsia; + sal_Bool m_bBoldComplex; + XFColor m_aUnderlineColor; + + enumXFUnderline m_eUnderline; + enumXFCrossout m_eCrossout; + enumXFRelief m_eRelief; + enumXFTransform m_eTransform; + enumXFEmphasize m_eEmphasize; + sal_Bool m_bWordByWord; + sal_Bool m_bEmphasizeTop; + sal_Bool m_bOutline; + sal_Bool m_bShadow; + sal_Bool m_bBlink; + sal_Int16 m_nPosition; + sal_Int16 m_nScale; + double m_fCharSpace; + sal_Int16 m_nWidthScale; + XFColor m_aColor; + XFColor m_aBackColor; + //The flag defines which variable will be funtional. + sal_uInt32 m_nFlag; + sal_Bool m_bTransparent; +}; + + +inline void XFFont::SetFontName(rtl::OUString name) +{ + m_strFontName = name; + m_nFlag |= XFFONT_FLAG_NAME; + + SetFontNameAsia(name); + SetFontNameComplex(name); +} + +inline void XFFont::SetFontNameAsia(rtl::OUString name) +{ + m_strFontNameAsia = name; + m_nFlag |= XFFONT_FLAG_NAME_ASIA; +} + +inline void XFFont::SetFontNameComplex(rtl::OUString name) +{ + m_strFontNameComplex = name; + m_nFlag |= XFFONT_FLAG_NAME_COMPLEX; +} + +// +inline void XFFont::SetFontSize(sal_Int16 size) +{ + m_nFontSize = size; + m_nFlag |= XFFONT_FLAG_SIZE; + + SetFontSizeAsia(size); + SetFontSizeComplex(size); +} + +inline void XFFont::SetFontSizeAsia(sal_Int16 size) +{ + m_nFontSizeAsia = size; + m_nFlag |= XFFONT_FLAG_SIZE_ASIA; +} + +inline void XFFont::SetFontSizeComplex(sal_Int16 size) +{ + m_nFontSizeComplex = size; + m_nFlag |= XFFONT_FLAG_SIZE_COMPLEX; +} + +//---------Italic: +inline void XFFont::SetItalic(sal_Bool italic) +{ + m_bItalic = italic; + m_nFlag |= XFFONT_FLAG_ITALIC; + + SetItalicAsia(italic); + SetItalicComplex(italic); +} + +inline void XFFont::SetItalicAsia(sal_Bool italic) +{ + m_bItalicAsia = italic; + m_nFlag |= XFFONT_FLAG_ITALIC_ASIA; +} + +inline void XFFont::SetItalicComplex(sal_Bool italic) +{ + m_bItalicComplex = italic; + m_nFlag |= XFFONT_FLAG_ITALIC_COMPLEX; +} + +//--------Bold +inline void XFFont::SetBold(sal_Bool bold) +{ + m_bBold = bold; + m_nFlag |= XFFONT_FLAG_BOLD; + SetBoldAsia(bold); + SetBoldComplex(bold); +} + +inline void XFFont::SetBoldAsia(sal_Bool bold) +{ + m_bBoldAsia = bold; + m_nFlag |= XFFONT_FLAG_BOLD_ASIA; +} + +inline void XFFont::SetBoldComplex(sal_Bool bold) +{ + m_bBoldComplex = bold; + m_nFlag |= XFFONT_FLAG_BOLD_COMPLEX; +} + +//--------Underline: +inline void XFFont::SetUnderline(enumXFUnderline underline, sal_Bool wordByWord) +{ + m_eUnderline = underline; + m_bWordByWord = wordByWord; + m_nFlag |= XFFONT_FLAG_UNDERLINE; +} + +inline void XFFont::SetUnderlineColor(XFColor color) +{ + m_aUnderlineColor = color; + m_nFlag |= XFFONT_FLAG_UNDERLINECOLOR; +} + +inline void XFFont::SetCrossout(enumXFCrossout cross, sal_Bool wordByWord) +{ + m_eCrossout = cross; + m_bWordByWord = wordByWord; + m_nFlag |= XFFONT_FLAG_CROSSOUT; +} +inline void XFFont::SetRelief(enumXFRelief relief) +{ + m_eRelief = relief; + m_nFlag |= XFFONT_FLAG_RELIEF; +} +inline void XFFont::SetTransform(enumXFTransform transform) +{ + m_eTransform = transform; + m_nFlag |= XFFONT_FLAG_TRANSFORM; +} + +inline void XFFont::SetEmphasize(enumXFEmphasize emphasize, sal_Bool top) +{ + m_eEmphasize = emphasize; + m_bEmphasizeTop = top; + m_nFlag |= XFFONT_FLAG_EMPHASIZE; +} +inline void XFFont::SetOutline(sal_Bool outline) +{ + m_bOutline = outline; + m_nFlag |= XFFONT_FLAG_OUTLINE; +} +inline void XFFont::SetShadow(sal_Bool shadow) +{ + m_bShadow = shadow; + m_nFlag |= XFFONT_FLAG_SHADOW; +} +inline void XFFont::SetBlink(sal_Bool blink) +{ + m_bBlink = blink; + m_nFlag |= XFFONT_FLAG_BLINK; +} + +inline void XFFont::SetPosition(sal_Bool bUpperScript, sal_Int16 pos, sal_Int16 scale) +{ + assert(pos>=0&&pos<=100); + assert(scale>0&&scale<=100); + m_nFlag |= XFFONT_FLAG_POSITION; + m_nPosition = pos; + m_nScale = scale; + if( bUpperScript ) + { + if( m_nPosition <0 ) + m_nPosition = -m_nPosition; + } + else + { + if( m_nPosition >0 ) + m_nPosition = -m_nPosition; + } +} + +inline void XFFont::SetCharSpace(sal_Int16 space) +{ + m_nFlag |= XFFONT_FLAG_CHARSPACE; + m_fCharSpace = space; +} + +inline void XFFont::SetWidthScale(sal_Int16 widthScale) +{ + m_nFlag |= XFFONT_FLAG_WIDTHSCALE; + m_nWidthScale = widthScale; +} + +inline void XFFont::SetColor(XFColor& color) +{ + m_nFlag |= XFFONT_FLAG_COLOR; + m_aColor = color; +} + +inline void XFFont::SetBackColor(XFColor& color) +{ + m_bTransparent = sal_False; + m_nFlag |= XFFONT_FLAG_BGCOLOR; + m_aBackColor = color; +} + +inline void XFFont::SetBackColorTransparent() +{ + m_bTransparent = sal_True; + m_nFlag |= XFFONT_FLAG_BGCOLOR; +} + +inline enumXFTransform XFFont::GetTransform() +{ + return m_eTransform; +} + +inline sal_Int16 XFFont::GetFontSize() +{ + return m_nFontSize; +} + +inline XFColor XFFont::GetColor() +{ + return m_aColor; +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xffontdecl.cxx b/lotuswordpro/source/filter/xfilter/xffontdecl.cxx new file mode 100644 index 000000000000..d051dbef69f8 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xffontdecl.cxx @@ -0,0 +1,104 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Font decl of all used fonts. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-21 create this file. + ************************************************************************/ +#include "xffontdecl.hxx" + +XFFontDecl::XFFontDecl() +{ +} + +XFFontDecl::XFFontDecl(rtl::OUString name, rtl::OUString family, sal_Bool fixed) +{ + m_strFontName = name; + m_strFontFamily = family; + m_bPitchFixed = fixed; +} + +rtl::OUString XFFontDecl::GetFontName() +{ + return m_strFontName; +} + +void XFFontDecl::SetFontName(rtl::OUString name) +{ + m_strFontName = name; +} + +rtl::OUString XFFontDecl::GetFontFamily() +{ + return m_strFontFamily; +} + +void XFFontDecl::SetFontFamily(rtl::OUString family) +{ + m_strFontFamily = family; +} + +sal_Bool XFFontDecl::GetFontPitchFixed() +{ + return m_bPitchFixed; +} + +void XFFontDecl::SetFontPitchFixed(sal_Bool fixed) +{ + m_bPitchFixed = fixed; +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xffontdecl.hxx b/lotuswordpro/source/filter/xfilter/xffontdecl.hxx new file mode 100644 index 000000000000..53c6002b51f0 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xffontdecl.hxx @@ -0,0 +1,112 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Font declaration for OOo xml file.This is needed for every font that was + * used. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-24 create this file. + ************************************************************************/ +#ifndef _XFFONTDECL_HXX +#define _XFFONTDECL_HXX + +#include "xfglobal.hxx" + +/** + * @brief + * Font declaration in OOo xml file. + * Each font used should be declared. + */ +class XFFontDecl +{ +public: + XFFontDecl(); + + XFFontDecl(rtl::OUString name, rtl::OUString family, sal_Bool fixed = false); + +public: + /** + * @descr Get font name. + */ + rtl::OUString GetFontName(); + + /** + * @descr Set font name. + */ + void SetFontName(rtl::OUString name); + + /** + * @descr Get font family. + */ + rtl::OUString GetFontFamily(); + + /** + * @descr Set font famuly. + */ + void SetFontFamily(rtl::OUString family); + + sal_Bool GetFontPitchFixed(); + + void SetFontPitchFixed(sal_Bool fixed); + +private: + rtl::OUString m_strFontName; + rtl::OUString m_strFontFamily; + sal_Bool m_bPitchFixed; +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xffontfactory.cxx b/lotuswordpro/source/filter/xfilter/xffontfactory.cxx new file mode 100644 index 000000000000..e0a1484a0936 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xffontfactory.cxx @@ -0,0 +1,102 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Implement for font factory which will manage all font. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#include "xffontfactory.hxx" + +XFFontFactory::XFFontFactory() +{ +} + +XFFontFactory::~XFFontFactory() +{ + Reset(); +} + +void XFFontFactory::Reset() +{ + std::vector<XFFont*>::iterator it; + for( it = s_aFonts.begin(); it != s_aFonts.end(); it++ ) + { + XFFont *pFont = (*it); + if( !pFont ) + continue; + delete pFont; + } + s_aFonts.clear(); +} + +void XFFontFactory::AddFont(XFFont *pFont) +{ + s_aFonts.push_back( pFont ); +} + +XFFont* XFFontFactory::FindSameFont(XFFont *pFont) +{ + std::vector<XFFont*>::iterator it; + for( it = s_aFonts.begin(); it != s_aFonts.end(); it++ ) + { + if( *pFont == **it ) + return *it; + } + + return NULL; +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xffontfactory.hxx b/lotuswordpro/source/filter/xfilter/xffontfactory.hxx new file mode 100644 index 000000000000..603559f6ca62 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xffontfactory.hxx @@ -0,0 +1,109 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Factory object for XFFont.It also manages all font life cycle. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#ifndef _XFFONTFACTORY_HXX +#define _XFFONTFACTORY_HXX + +#include "xfglobal.hxx" +#include "xffont.hxx" +#include <vector> + +/** + * @brief + * Font factory. + * Because font object are so used so offten, so make a factory to manager them. + * The fonts with same properties will only exist one instance. + */ +class XFFontFactory +{ +public: + XFFontFactory(); + ~XFFontFactory(); + XFFontFactory(const XFFontFactory& other){} + + XFFontFactory operator=(XFFontFactory& other){} + +public: + /** + * @descr Clear all fonts, this is called when load a file. + */ + void Reset(); + +private: + /** + * @descr Add a font. if there exist a font with same properties with pFont, them the font obejct + * will not be added. + */ + void AddFont(XFFont *pFont); + + /** + * @descr Find whether same font obejct exists. + */ + XFFont* FindSameFont(XFFont *pFont); + + friend class XFStyleContainer; + +private: + std::vector<XFFont*> s_aFonts; +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xffontworkstyle.hxx b/lotuswordpro/source/filter/xfilter/xffontworkstyle.hxx new file mode 100644 index 000000000000..deeeee4c622f --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xffontworkstyle.hxx @@ -0,0 +1,156 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Style of Fontwork object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-06-20 create this file. + ************************************************************************/ + #ifndef _XFFONTWORKSTYLE_HXX + #define _XFFONTWORKSTYLE_HXX + +#include "xfstyle.hxx" + +class XFFontWorkStyle +{ +public: + XFFontWorkStyle() : + m_nButtonForm(-1), + m_bHideForm(sal_True), + m_fDistance(-0.10), + m_eStyleType(enumXFFWOff), + m_eAdjustType(enumXFFWAdjustAutosize), + m_eShadowType(enumXFFWShadowNone) + {}; + + ~XFFontWorkStyle(){} + + inline void SetButtonForm(sal_Int8 nIndex); + inline void SetHideForm(sal_Bool bHide); + inline void SetFWDistance(double fDist); + inline void SetFWStyleType(enumXFFWStyle eStyle); + inline void SetFWAdjustType(enumXFFWAdjust eAdjust); + inline void SetFWShadowType(enumXFFWShadow eShadow); + + inline sal_Int8 GetButtonForm() const; + inline double GetFWDistance() const; + inline enumXFFWStyle GetStyleType() const; + inline enumXFFWAdjust GetAdjustType() const; + inline enumXFFWShadow GetShadowType() const; + +private: + sal_Int8 m_nButtonForm; + sal_Bool m_bHideForm; + double m_fDistance; + enumXFFWStyle m_eStyleType; + enumXFFWAdjust m_eAdjustType; + enumXFFWShadow m_eShadowType; +}; + +inline void XFFontWorkStyle::SetButtonForm(sal_Int8 nIndex) +{ + m_nButtonForm = nIndex; +} + +inline void XFFontWorkStyle::SetHideForm(sal_Bool bHide) +{ + m_bHideForm = bHide; +} + +inline void XFFontWorkStyle::SetFWDistance(double fDist) +{ + m_fDistance = fDist; +} + +inline void XFFontWorkStyle::SetFWStyleType(enumXFFWStyle eStyle) +{ + m_eStyleType = eStyle; +} + +inline void XFFontWorkStyle::SetFWAdjustType(enumXFFWAdjust eAdjust) +{ + m_eAdjustType = eAdjust; +} + +inline void XFFontWorkStyle::SetFWShadowType(enumXFFWShadow eShadow) +{ + m_eShadowType = eShadow; +} + +inline sal_Int8 XFFontWorkStyle::GetButtonForm() const +{ + return m_nButtonForm; +} +inline double XFFontWorkStyle::GetFWDistance() const +{ + return m_fDistance; +} + +inline enumXFFWStyle XFFontWorkStyle::GetStyleType() const +{ + return m_eStyleType; +} +inline enumXFFWAdjust XFFontWorkStyle::GetAdjustType() const +{ + return m_eAdjustType; +} +inline enumXFFWShadow XFFontWorkStyle::GetShadowType() const +{ + return m_eShadowType; +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xffooter.hxx b/lotuswordpro/source/filter/xfilter/xffooter.hxx new file mode 100644 index 000000000000..f22ab5b39b28 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xffooter.hxx @@ -0,0 +1,89 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Footer object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-19 create this file. + * 2005-04-05 make it derive from XFContentContainer. + ************************************************************************/ +#ifndef _XFFOOTER_HXX +#define _XFFOOTER_HXX + +#include "xfcontentcontainer.hxx" +#include <vector> + +/** + * @descr Foot obejct. It's just a container. + */ +class XFFooter : public XFContentContainer +{ +public: + XFFooter() + { + } + virtual void ToXml(IXFStream *pStrm) + { + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("style:footer") ); + XFContentContainer::ToXml(pStrm); + pStrm->EndElement( A2OUSTR("style:footer") ); + } +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xffooterstyle.hxx b/lotuswordpro/source/filter/xfilter/xffooterstyle.hxx new file mode 100644 index 000000000000..2233e5ae3ff5 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xffooterstyle.hxx @@ -0,0 +1,126 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Footer style,exist in page-master object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-19 create this file. + * 2005-04-05 change to inherit from xfheaderstyle. + ************************************************************************/ +#ifndef _XFFOOTERSTYLE_HXX +#define _XFFOOTERSTYLE_HXX + +#include "xfheaderstyle.hxx" +#include "xfmargins.hxx" + +class XFFooterStyle : public XFHeaderStyle +{ +public: + XFFooterStyle() : XFHeaderStyle(sal_True) + { + } + + void SetMargins(double left = -1, double right = -1, double top = -1) + { + if( left != -1 ) + m_aMargin.SetLeft(left); + if( right != -1 ) + m_aMargin.SetRight(right); + if( top != -1 ) + m_aMargin.SetTop(top); + } +/* + void SetHeight(float height) + { + m_fHeight = height; + } + + void SetDynamicSpace(sal_Bool dynamic) + { + m_bDynamicSpace = dynamic; + } + virtual void ToXml(IXFStream *pStrm) + { + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pStrm->StartElement( A2OUSTR("style:footer-style") ); + + if(m_fHeight!=-1) + { + pAttrList->AddAttribute( A2OUSTR("svg:height"), FloatToOUString(m_fHeight) + A2OUSTR("cm") ); + } + + m_aMargin.ToXml(pStrm); + if( m_bDynamicSpace ) + pAttrList->AddAttribute( A2OUSTR("style:dynamic-spacing"), A2OUSTR("true") ); + else + pAttrList->AddAttribute( A2OUSTR("style:dynamic-spacing"), A2OUSTR("false") ); + pStrm->StartElement( A2OUSTR("style:properties") ); + pStrm->EndElement( A2OUSTR("style:properties") ); + + pStrm->EndElement( A2OUSTR("style:footer-style") ); + } + +private: + XFMargins m_aMargin; + sal_Bool m_bDynamicSpace; + float m_fHeight; + */ +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xffootnote.hxx b/lotuswordpro/source/filter/xfilter/xffootnote.hxx new file mode 100644 index 000000000000..9e3533591841 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xffootnote.hxx @@ -0,0 +1,128 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Foot note object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-1-31 create this file. + ************************************************************************/ +#ifndef _XFFOOTNOTE_HXX +#define _XFFOOTNOTE_HXX + +#include "xfglobal.hxx" +#include "xfcontent.hxx" +#include "xfcontentcontainer.hxx" + +/** + * @brief + * Foot note object. + * Foot note has a lable, which is used in page content, and footnote contents in the footnote section. + */ +class XFFootNote : public XFContentContainer +{ +public: + XFFootNote(); + +public: + void SetLabel(sal_Unicode label); + + virtual void ToXml(IXFStream *pStrm); + +private: + rtl::OUString m_strID; + rtl::OUString m_strLabel; +}; + +inline XFFootNote::XFFootNote() +{ + m_strID = XFGlobal::GenNoteName(); +} + +inline void XFFootNote::SetLabel(sal_Unicode label) +{ + sal_Unicode chs[2]; + chs[0] = label; + chs[1] = 0; + + m_strLabel = rtl::OUString(chs); +} + +inline void XFFootNote::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pAttrList->AddAttribute( A2OUSTR("text:id"), m_strID ); + pStrm->StartElement( A2OUSTR("text:footnote") ); + + pAttrList->Clear(); + if( m_strLabel.getLength() ) + pAttrList->AddAttribute( A2OUSTR("text:label"), m_strLabel ); + pStrm->StartElement( A2OUSTR("text:footnote-citation") ); + if( m_strLabel.getLength() ) + pStrm->Characters(m_strLabel); + pStrm->EndElement( A2OUSTR("text:footnote-citation") ); + + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("text:footnote-body") ); + XFContentContainer::ToXml(pStrm); + pStrm->EndElement( A2OUSTR("text:footnote-body") ); + + pStrm->EndElement( A2OUSTR("text:footnote") ); +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xffootnoteconfig.hxx b/lotuswordpro/source/filter/xfilter/xffootnoteconfig.hxx new file mode 100644 index 000000000000..17a58653bb1c --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xffootnoteconfig.hxx @@ -0,0 +1,269 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Footnote config. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-03-29 create this file. + ************************************************************************/ +#ifndef _XFFOOTNOTECONFIG_HXX +#define _XFFOOTNOTECONFIG_HXX + +#include "xfstyle.hxx" + +class XFFootnoteConfig : public XFStyle +{ +public: + XFFootnoteConfig(); + +public: + void SetBodyStyle(rtl::OUString style); + + void SetCitationStyle(rtl::OUString style); + + void SetDefaultStyle(rtl::OUString style); + + void SetMasterPage(rtl::OUString masterPage); + + void SetNumberFormat(rtl::OUString numberFormat); + + void SetStartValue(sal_Int32 value=0); + + void SetRestartOnPage(); + + void SetRestartOnChapter(); + + void SetInsertInPage(sal_Bool page=sal_True); + + void SetNumPrefix(rtl::OUString numprefix); + + void SetNumSuffix(rtl::OUString numsuffix); + + void SetMessageOn(rtl::OUString message); + + void SetMessageFrom(rtl::OUString message); + + virtual void ToXml(IXFStream *pStrm); + +protected: + rtl::OUString m_strBodyStyle; + rtl::OUString m_strCitationStyle; + rtl::OUString m_strDefaultStyle; + rtl::OUString m_strMasterPage; + rtl::OUString m_strNumFmt; + rtl::OUString m_strNumPrefix; + rtl::OUString m_strNumSuffix; + rtl::OUString m_strMessageFrom; + rtl::OUString m_strMessageOn; + sal_Int32 m_nStartValue; + sal_Int32 m_nRestartType; + sal_Bool m_bInsertInPage; + sal_Bool m_bIsFootnote; +}; + +inline XFFootnoteConfig::XFFootnoteConfig() +{ + m_nStartValue = 0; + m_nRestartType = -1; + m_strNumFmt = A2OUSTR("1"); + m_bInsertInPage = sal_True; + m_strDefaultStyle = A2OUSTR("Footnote"); + m_strMasterPage = A2OUSTR("Footnote"); + m_strCitationStyle = A2OUSTR("Footnote Symbol"); + m_strBodyStyle = A2OUSTR("Footnote anchor"); + m_bIsFootnote = sal_True; +} + +inline void XFFootnoteConfig::SetBodyStyle(rtl::OUString style) +{ + m_strBodyStyle = style; +} + +inline void XFFootnoteConfig::SetCitationStyle(rtl::OUString style) +{ + m_strCitationStyle = style; +} + +inline void XFFootnoteConfig::SetDefaultStyle(rtl::OUString style) +{ + m_strDefaultStyle = style; +} + +inline void XFFootnoteConfig::SetMasterPage(rtl::OUString masterPage) +{ + m_strMasterPage = masterPage; +} + +inline void XFFootnoteConfig::SetNumberFormat(rtl::OUString numberFormat) +{ + m_strNumFmt = numberFormat; +} + +inline void XFFootnoteConfig::SetStartValue(sal_Int32 value) +{ + if( value<0 ) + return; + m_nStartValue = value; +} + +inline void XFFootnoteConfig::SetRestartOnPage() +{ + m_nRestartType = 0; +} + +inline void XFFootnoteConfig::SetRestartOnChapter() +{ + m_nRestartType = 1; +} + +inline void XFFootnoteConfig::SetInsertInPage(sal_Bool page) +{ + m_bInsertInPage = page; +} + +inline void XFFootnoteConfig::SetNumPrefix(rtl::OUString numprefix) +{ + m_strNumPrefix = numprefix; +} + +inline void XFFootnoteConfig::SetNumSuffix(rtl::OUString numsuffix) +{ + m_strNumSuffix = numsuffix; +} + +inline void XFFootnoteConfig::SetMessageOn(rtl::OUString message) +{ + m_strMessageOn = message; +} + +inline void XFFootnoteConfig::SetMessageFrom(rtl::OUString message) +{ + m_strMessageFrom = message; +} + +inline void XFFootnoteConfig::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + if( m_strCitationStyle.getLength()>0 ) + pAttrList->AddAttribute( A2OUSTR("text:citation-style-name"), m_strCitationStyle); + + if( m_strBodyStyle.getLength()>0 ) + pAttrList->AddAttribute( A2OUSTR("text:citation-body-style-name"), m_strBodyStyle); + + if( m_strNumPrefix.getLength()>0 ) + pAttrList->AddAttribute( A2OUSTR("style:num-prefix"), m_strNumPrefix); + + if( m_strNumSuffix.getLength()>0 ) + pAttrList->AddAttribute( A2OUSTR("style:num-suffix"), m_strNumSuffix); + + if( m_strNumFmt.getLength()>0 ) + pAttrList->AddAttribute( A2OUSTR("style:num-format"), m_strNumFmt); + + if( m_strDefaultStyle.getLength()>0 ) + pAttrList->AddAttribute( A2OUSTR("text:default-style-name"), m_strDefaultStyle); + + if( m_strMasterPage.getLength()>0 ) + pAttrList->AddAttribute( A2OUSTR("text:master-page-name"), m_strMasterPage); + + + pAttrList->AddAttribute( A2OUSTR("text:start-value"), Int32ToOUString(m_nStartValue) ); + + if( m_bIsFootnote ) + { + if( m_nRestartType == -1 ) + pAttrList->AddAttribute( A2OUSTR("text:start-numbering-at"), A2OUSTR("document") ); + else if( m_nRestartType == 0 ) + pAttrList->AddAttribute( A2OUSTR("text:start-numbering-at"), A2OUSTR("page") ); + else if( m_nRestartType == 1 ) + pAttrList->AddAttribute( A2OUSTR("text:start-numbering-at"), A2OUSTR("chapter") ); + + if( m_bInsertInPage ) + pAttrList->AddAttribute( A2OUSTR("text:footnotes-position"), A2OUSTR("page") ); + else + pAttrList->AddAttribute( A2OUSTR("text:footnotes-position"), A2OUSTR("document") ); + } + + if(m_bIsFootnote) + { + pStrm->StartElement( A2OUSTR("text:footnotes-configuration") ); + if( m_strMessageOn.getLength()>0 ) + { + pStrm->StartElement( A2OUSTR("text:footnote-continuation-notice-forward") ); + pStrm->Characters(m_strMessageOn); + pStrm->EndElement( A2OUSTR("text:footnote-continuation-notice-forward") ); + } + + if( m_strMessageFrom.getLength()>0 ) + { + pStrm->StartElement( A2OUSTR("text:footnote-continuation-notice-backward") ); + pStrm->Characters(m_strMessageFrom); + pStrm->EndElement( A2OUSTR("text:footnote-continuation-notice-backward") ); + } + + pStrm->EndElement( A2OUSTR("text:footnotes-configuration") ); + } + else + { + pStrm->StartElement( A2OUSTR("text:endnotes-configuration") ); + pStrm->EndElement( A2OUSTR("text:endnotes-configuration") ); + } + +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfframe.cxx b/lotuswordpro/source/filter/xfilter/xfframe.cxx new file mode 100644 index 000000000000..6bf328ceefb5 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfframe.cxx @@ -0,0 +1,208 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Frame whose anchor is not page. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-21 create this file. + ************************************************************************/ +#include "xfframe.hxx" +#include "xfparagraph.hxx" +#define ZINDEX_MAX 0x7fffffff +#define ZINDEX_MIN 0 +XFFrame::XFFrame() +{ + m_isTextBox = sal_False; + m_eAnchor = enumXFAnchorPara; + m_nAnchorPage = 0; + m_nZIndex = ZINDEX_MIN; + //give it a default name: + m_strName = XFGlobal::GenFrameName(); + m_fMinHeight = 0; + m_fMaxHeight = 0; + m_nFlag = 0; + m_eType = enumXFFrameTextbox; +} +XFFrame::XFFrame(sal_Bool isTextBox):m_isTextBox(isTextBox) +{ + m_eAnchor = enumXFAnchorPara; + m_nAnchorPage = 0; + m_nZIndex = ZINDEX_MIN; + //give it a default name: + m_strName = XFGlobal::GenFrameName(); + m_fMinHeight = 0; + m_fMaxHeight = 0; + m_nFlag = 0; + m_eType = enumXFFrameTextbox; +} + +XFFrame::~XFFrame() +{ +} + +void XFFrame::Add(IXFContent *pContent) +{ + XFContentContainer::Add(pContent); + if( pContent->GetContentType() == enumXFContentFrame ) + { + XFFrame *pFrame = (XFFrame*)pContent; + if( pFrame ) + { + pFrame->SetZIndex(pFrame->m_nZIndex + 1); + } + } + +} + +void XFFrame::SetZIndex(sal_Int32 zIndex) +{ + if( zIndex == m_nZIndex ) + return; + m_nZIndex = zIndex; + AdjustZIndex(); +} + +enumXFFrameType XFFrame::GetFrameType() +{ + return m_eType; +} + +enumXFContent XFFrame::GetContentType() +{ + return enumXFContentFrame; +} + +void XFFrame::ToXml(IXFStream *pStrm) +{ + StartFrame(pStrm); + + XFContentContainer::ToXml(pStrm); + + EndFrame(pStrm); +} + +void XFFrame::StartFrame(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + if( GetStyleName().getLength() ) + pAttrList->AddAttribute( A2OUSTR("draw:style-name"), GetStyleName() ); + + assert(m_strName.getLength()>0); //name should not be null. + if( m_strName.getLength()&&m_isTextBox == sal_False) + pAttrList->AddAttribute( A2OUSTR("draw:name"), m_strName ); + //anchor type: + switch( m_eAnchor ) + { + case enumXFAnchorPara: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("paragraph") ); + break; + case enumXFAnchorPage: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("page") ); + pAttrList->AddAttribute( A2OUSTR("text:anchor-page-number"), Int32ToOUString(m_nAnchorPage) ); + break; + case enumXFAnchorChar: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("char") ); + break; + case enumXFAnchorAsChar: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("as-char") ); + break; + case enumXFAnchorFrame: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("frame") ); + break; + } + pAttrList->AddAttribute( A2OUSTR("svg:x"), DoubleToOUString(m_aRect.GetX()) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("svg:y"), DoubleToOUString(m_aRect.GetY()) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("svg:width"), DoubleToOUString(m_aRect.GetWidth()) + A2OUSTR("cm") ); + if( m_nFlag& XFFRAME_FLAG_MINHEIGHT ) + { + pAttrList->AddAttribute( A2OUSTR("fo:min-height"), DoubleToOUString(m_fMinHeight) + A2OUSTR("cm") ); + if( m_nFlag&XFFRAME_FLAG_MAXHEIGHT ) + pAttrList->AddAttribute( A2OUSTR("fo:max-height"), DoubleToOUString(m_fMaxHeight) + A2OUSTR("cm") ); + } + else + pAttrList->AddAttribute( A2OUSTR("svg:height"), DoubleToOUString(m_aRect.GetHeight()) + A2OUSTR("cm") ); + + pAttrList->AddAttribute( A2OUSTR("draw:z-index"), Int32ToOUString(m_nZIndex) ); + + if( m_strNextLink.getLength() > 0 ) + pAttrList->AddAttribute( A2OUSTR("draw:chain-next-name"), m_strNextLink ); + + pStrm->StartElement( A2OUSTR("draw:text-box") ); +} + +void XFFrame::EndFrame(IXFStream *pStrm) +{ + pStrm->EndElement( A2OUSTR("draw:text-box") ); +} + +void XFFrame::AdjustZIndex() +{ + for( int i=0; i<GetCount(); i++ ) + { + IXFContent *pContent = GetContent(i); + if( pContent ) + { + if( pContent->GetContentType() == enumXFContentFrame ) + { + XFFrame *pFrame = (XFFrame*)pContent; + pFrame->m_nZIndex = m_nZIndex + 1; + pFrame->AdjustZIndex(); + } + } + } +} diff --git a/lotuswordpro/source/filter/xfilter/xfframe.hxx b/lotuswordpro/source/filter/xfilter/xfframe.hxx new file mode 100644 index 000000000000..329889bac27c --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfframe.hxx @@ -0,0 +1,264 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Frame object for OOo.This is the basic object for all Shape Layer. + * You can reference to the XFFrame object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-10 create and implements. + ************************************************************************/ +#ifndef _XFFRAME_HXX +#define _XFFRAME_HXX + +#include "xfglobal.hxx" +#include "xfcontent.hxx" +#include "xfrect.hxx" +#include "xfcontentcontainer.hxx" + +#define XFFRAME_FLAG_HEIGHT 0x00000001 +#define XFFRAME_FLAG_MINHEIGHT 0x00000002 +#define XFFRAME_FLAG_MAXHEIGHT 0x00000004 +/** + * @brief + * Base class for all frame object,include drawing,image,text-box. + * + * Use SetX(),SetY(),SetWidth(),SetHeight() to set postion for the frame. + * Only if you set anchor type to enumXFAnchorPage, the SetAnchorPage functions. + */ +class XFFrame : public XFContentContainer +{ +public: + XFFrame(); + XFFrame(sal_Bool isTextBox); + + virtual ~XFFrame(); + +public: + /** + * @descr override the add function to adjust z-index. + */ + virtual void Add(IXFContent *pContent); + + /** + * @descr: Set the anchor type for the frame object. + */ + void SetAnchorType(enumXFAnchor type); + + /** + * @descr: if it's page anchor,set the page number. + */ + void SetAnchorPage(sal_Int32 page); + + /** + * @descr Set frame name. + */ + void SetName(rtl::OUString name); + + /** + * @descr Set z-index of the frame. + */ + void SetZIndex(sal_Int32 zIndex); + /** + * @descr Set frame position X. + */ + void SetX(double x); + + /** + * @descr Set frame position Y. + */ + void SetY(double y); + + /** + * @descr Set frame wieth. + */ + void SetWidth(double width); + + /** + * @descr Set frame height. Be careful SetHeight and SetMinHeight will override each other. + */ + void SetHeight(double height); + + /** + * @descr Set frame min-height. Be careful SetHeight and SetMinHeight will override each other. + */ + void SetMinHeight(double minHeight); + + /** + * @descr Set frame max-height. + */ + void SetMaxHeight(double minHeight); + + /** + * @descr Set frame position. + */ + void SetPosition(double x, double y, double width, double height); + + /** + * @descr Set frame position. + */ + void SetPosition(const XFRect& rect); + + /** + * @descr: Link the text content of the two frame. + */ + void SetNextLink(rtl::OUString next); + + /** + * @descr Get the frame type. image, drawing or text-box. + */ + virtual enumXFFrameType GetFrameType(); + + /** + * @descr Get content type, enumXFContentFrame. + */ + virtual enumXFContent GetContentType(); + + /** + * @descr serialize. + */ + virtual void ToXml(IXFStream *pStrm); + +private: + void StartFrame(IXFStream *pStrm); + + void EndFrame(IXFStream *pStrm); + + void AdjustZIndex(); + +protected: + enumXFAnchor m_eAnchor; + sal_Int32 m_nAnchorPage; + rtl::OUString m_strName; + sal_uInt32 m_nZIndex; + XFRect m_aRect; + double m_fMinHeight; + double m_fMaxHeight; + rtl::OUString m_strNextLink; + enumXFFrameType m_eType; + sal_uInt32 m_nFlag; + sal_Bool m_isTextBox; +}; + +inline void XFFrame::SetAnchorType(enumXFAnchor anchor) +{ + m_eAnchor = anchor; +} + +inline void XFFrame::SetName(rtl::OUString name) +{ + m_strName = name; +} + +inline void XFFrame::SetX(double x) +{ + m_aRect.SetX(x); +} + +inline void XFFrame::SetY(double y) +{ + m_aRect.SetY(y); +} + +inline void XFFrame::SetWidth(double width) +{ + m_aRect.SetWidth(width); +} + +inline void XFFrame::SetHeight(double height) +{ + m_aRect.SetHeight(height); + m_nFlag |= XFFRAME_FLAG_HEIGHT; + m_nFlag &= XFFRAME_FLAG_HEIGHT; +} + +inline void XFFrame::SetMinHeight(double minHeight) +{ + m_fMinHeight = minHeight; + m_nFlag |= XFFRAME_FLAG_MINHEIGHT; + m_nFlag &= XFFRAME_FLAG_MINHEIGHT; +} + +inline void XFFrame::SetMaxHeight(double maxHeight) +{ + m_fMaxHeight = maxHeight; + m_nFlag |= XFFRAME_FLAG_MAXHEIGHT; + m_nFlag &= XFFRAME_FLAG_MAXHEIGHT; +} + +inline void XFFrame::SetPosition(double x, double y, double width, double height) +{ + m_aRect.SetStartPoint(XFPoint(x,y)); + m_aRect.SetSize(width,height); + m_nFlag |= XFFRAME_FLAG_HEIGHT; +} + +inline void XFFrame::SetPosition(const XFRect& rect) +{ + m_aRect = rect; +} + +inline void XFFrame::SetNextLink(rtl::OUString next) +{ + m_strNextLink = next; +} + +inline void XFFrame::SetAnchorPage(sal_Int32 page) +{ + m_nAnchorPage = page; +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfframestyle.cxx b/lotuswordpro/source/filter/xfilter/xfframestyle.cxx new file mode 100644 index 000000000000..965c7bd9abf2 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfframestyle.cxx @@ -0,0 +1,238 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Frame style include position,size,rotation and so on. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-17 create this file. + ************************************************************************/ +#include "xfframestyle.hxx" +#include "xfcolumns.hxx" +#include "xfborders.hxx" +#include "xfshadow.hxx" +#include "xfbgimage.hxx" + +XFFrameStyle::XFFrameStyle() +{ + m_eWrap = enumXFWrapNone; + m_nWrapLines = 0; //not limited. + m_pBorders = NULL; + m_pColumns = NULL; + m_pShadow = NULL; + m_pBGImage = NULL; + + m_bProtectContent = sal_False; + m_bProtectSize = sal_False; + m_bProtectPos = sal_False; + m_bEditable = sal_False; + m_bPrintable = sal_True; + m_bBackground = sal_False; + m_nTransparency = 0; + + m_eTextDir = enumXFTextDirNone; + m_eXPos = enumXFFrameXPosCenter; + m_eXRel = enumXFFrameXRelParaContent; + m_eYPos = enumXFFrameYPosTop; + m_eYRel = enumXFFrameYRelPage; +} + +XFFrameStyle::~XFFrameStyle() +{ + if( m_pBorders ) + delete m_pBorders; + if( m_pColumns ) + delete m_pColumns; + if( m_pShadow ) + delete m_pShadow; + if( m_pBGImage ) + delete m_pBGImage; +} + +void XFFrameStyle::SetBorders(XFBorders *pBorders) +{ + if( m_pBorders ) + delete m_pBorders; + m_pBorders = pBorders; +} + +void XFFrameStyle::SetColumns(XFColumns *pColumns) +{ + if( m_pColumns ) + delete m_pColumns; + m_pColumns = pColumns; +} + +void XFFrameStyle::SetShadow(XFShadow *pShadow) +{ + if( m_pShadow ) + delete m_pShadow; + m_pShadow = pShadow; +} + +void XFFrameStyle::SetBackImage(XFBGImage *image) +{ + if( m_pBGImage ) + delete m_pBGImage; + m_pBGImage = image; +} + +enumXFStyle XFFrameStyle::GetStyleFamily() +{ + return enumXFStyleGraphics; +} + +void XFFrameStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("style:name"), GetStyleName() ); + if( GetParentStyleName().getLength() > 0 ) + pAttrList->AddAttribute(A2OUSTR("style:parent-style-name"),GetParentStyleName()); + pAttrList->AddAttribute( A2OUSTR("style:family"), A2OUSTR("graphics") ); + //parent style name ignore now. + pStrm->StartElement( A2OUSTR("style:style") ); + + m_aMargins.ToXml(pStrm); + + pAttrList->Clear(); + + /*if( m_eWrap == enumXFWrapBackground ) + { + pAttrList->AddAttribute( A2OUSTR("style:run-through"), A2OUSTR("background") ); + } + else + {*/ + if( m_bBackground) + pAttrList->AddAttribute( A2OUSTR("style:run-through"), A2OUSTR("background") ); + else + pAttrList->AddAttribute( A2OUSTR("style:run-through"), A2OUSTR("foreground") ); + + if( m_eWrap == enumXFWrapNone ) + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("none") ); + else if( m_eWrap == enumXFWrapLeft ) + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("left") ); + else if( m_eWrap == enumXFWrapRight ) + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("right") ); + else if( m_eWrap == enumXFWrapParallel ) + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("parallel") ); + else if( m_eWrap == enumXFWrapRunThrough ) + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("run-through") ); + else if( m_eWrap == enumXFWrapBest ) + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("dynamic") ); + //} + //background + if( m_aBackColor.IsValid() ) + { + pAttrList->AddAttribute( A2OUSTR("fo:background-color"), m_aBackColor.ToString() ); + pAttrList->AddAttribute( A2OUSTR("style:background-transparency"), Int16ToOUString(m_nTransparency) + A2OUSTR("%")); + } + + //pad + m_aPad.ToXml(pStrm); + //margin: + m_aMargins.ToXml(pStrm); + //border + if( m_pBorders ) + m_pBorders->ToXml(pStrm); + else + pAttrList->AddAttribute( A2OUSTR("fo:border"), A2OUSTR("none") ); + //shadow + if( m_pShadow ) + m_pShadow->ToXml(pStrm); + //print + if( m_bPrintable ) + pAttrList->AddAttribute( A2OUSTR("style:print-content"), A2OUSTR("true") ); + //text directory + if( m_eTextDir != enumXFTextDirNone ) + pAttrList->AddAttribute( A2OUSTR("style:writing-mode"), GetTextDirName(m_eTextDir) ); + //protect: + if( m_bProtectContent || m_bProtectSize || m_bProtectPos ) + { + rtl::OUString protect; + if( m_bProtectContent ) + protect += A2OUSTR("content"); + if( m_bProtectSize ) + { + if( protect.getLength()>0 ) + protect += A2OUSTR(" "); + protect += A2OUSTR("size"); + } + if( m_bProtectPos ) + { + if( protect.getLength()>0 ) + protect += A2OUSTR(" "); + protect += A2OUSTR("position"); + } + pAttrList->AddAttribute( A2OUSTR("style:protect"), protect ); + } + //vertical pos and horizon pos: + pAttrList->AddAttribute( A2OUSTR("style:vertical-pos"), GetFrameYPos(m_eYPos) ); + pAttrList->AddAttribute( A2OUSTR("style:vertical-rel"), GetFrameYRel(m_eYRel) ); + pAttrList->AddAttribute( A2OUSTR("style:horizontal-pos"), GetFrameXPos(m_eXPos) ); + pAttrList->AddAttribute( A2OUSTR("style:horizontal-rel"), GetFrameXRel(m_eXRel) ); + + // + pStrm->StartElement( A2OUSTR("style:properties") ); + if( m_pColumns ) + m_pColumns->ToXml(pStrm); + if( m_pBGImage ) + m_pBGImage->ToXml(pStrm); + pStrm->EndElement( A2OUSTR("style:properties") ); + + pStrm->EndElement( A2OUSTR("style:style") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfframestyle.hxx b/lotuswordpro/source/filter/xfilter/xfframestyle.hxx new file mode 100644 index 000000000000..55c409c6a999 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfframestyle.hxx @@ -0,0 +1,251 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Frame object style for OOo. + * You can reference to the XFFrame object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-10 create and implements. + ************************************************************************/ +#ifndef _XFFRAMESTYLE_HXX +#define _XFFRAMESTYLE_HXX + +#include "xfglobal.hxx" +#include "xfstyle.hxx" +#include "xfmargins.hxx" +#include "xfcolor.hxx" +#include "xfpadding.hxx" + +class XFBorders; +class XFColumns; +class XFShadow; +class XFBGImage; + +/** + * @brief + * Style for all frame obejcts. + */ +class XFFrameStyle : public XFStyle +{ +public: + XFFrameStyle(); + + virtual ~XFFrameStyle(); + +public: + void SetWrapType(enumXFWrap wrap, sal_Int32 nParagraphs = 0); + + /** + * @descr: space between frame and paragraph text. + */ + void SetMargins(double left, double right=-1,double top=-1, double bottom=-1); + + /** + * @descr: space between frame and text inside frame. + */ + void SetPadding(double left, double right=-1,double top=-1, double bottom=-1); + + /** + * @descr: set the border property of the frame. + */ + void SetBorders(XFBorders *pBorders); + + /** + * @descr: set the column property of the frame. + */ + void SetColumns(XFColumns *pColumns); + + /** + * @descr: set the shadow object the frame. + */ + void SetShadow(XFShadow *pShadow); + + /** + * @descr: set the background image of the frame. + */ + void SetBackImage(XFBGImage *iamge); + + /** + * @descr: set the background color of the frame. + */ + void SetBackColor(XFColor& color); + + /** + * @descr Set whether frame is protected. There are three properties that can be protected, content,size and position. + */ + void SetProtect(sal_Bool content, sal_Bool size, sal_Bool pos); + + /** + * @descr Set text dir. + */ + void SetTextDir(enumXFTextDir dir); + + /** + * @descr Set horizontal position type. + */ + void SetXPosType(enumXFFrameXPos pos, enumXFFrameXRel rel); + + /** + * @descr Set vertical position type. + */ + void SetYPosType(enumXFFrameYPos pos, enumXFFrameYRel rel); + + /** + * @descr Set frame background. + */ + void SetBackGround(sal_Bool bBackground); + + void SetTransparency(sal_Int16 nTransparency); + + virtual enumXFStyle GetStyleFamily(); + + virtual void ToXml(IXFStream *pStrm); + +protected: + enumXFWrap m_eWrap; + sal_Int32 m_nWrapLines; + XFPadding m_aPad; + XFMargins m_aMargins; + XFBorders *m_pBorders; + XFColumns *m_pColumns; + XFShadow *m_pShadow; + XFBGImage *m_pBGImage; + XFColor m_aBackColor; + sal_Bool m_bProtectContent; + sal_Bool m_bProtectSize; + sal_Bool m_bProtectPos; + sal_Bool m_bEditable; + sal_Bool m_bPrintable; + sal_Bool m_bBackground; + sal_Int16 m_nTransparency; + + enumXFTextDir m_eTextDir; + enumXFFrameXPos m_eXPos; + enumXFFrameXRel m_eXRel; + enumXFFrameYPos m_eYPos; + enumXFFrameYRel m_eYRel; +}; + +inline void XFFrameStyle::SetWrapType(enumXFWrap wrap, sal_Int32 nParagraphs) +{ + m_eWrap = wrap; +} + +inline void XFFrameStyle::SetMargins(double left, double right,double top, double bottom) +{ + if( left != -1 ) + m_aMargins.SetLeft(left); + if( right != -1 ) + m_aMargins.SetRight(right); + if( top != -1 ) + m_aMargins.SetTop(top); + if( bottom != -1 ) + m_aMargins.SetBottom( bottom ); +} + +inline void XFFrameStyle::SetPadding(double left, double right,double top, double bottom) +{ + if( left != -1 ) + m_aPad.SetLeft(left); + if( right != -1 ) + m_aPad.SetRight(right); + if( top != -1 ) + m_aPad.SetTop(top); + if( bottom != -1 ) + m_aPad.SetBottom( bottom ); +} + +inline void XFFrameStyle::SetBackColor(XFColor& color) +{ + m_aBackColor = color; +} + +inline void XFFrameStyle::SetTextDir(enumXFTextDir dir) +{ + m_eTextDir = dir; +} + +inline void XFFrameStyle::SetProtect(sal_Bool content, sal_Bool size, sal_Bool pos) +{ + m_bProtectContent = content; + m_bProtectSize = size; + m_bProtectPos = pos; +} + +inline void XFFrameStyle::SetXPosType(enumXFFrameXPos pos, enumXFFrameXRel rel) +{ + m_eXPos = pos; + m_eXRel = rel; +} + +inline void XFFrameStyle::SetYPosType(enumXFFrameYPos pos, enumXFFrameYRel rel) +{ + m_eYPos = pos; + m_eYRel = rel; +} + +inline void XFFrameStyle::SetBackGround(sal_Bool bBackground) +{ + m_bBackground = bBackground; +} + +inline void XFFrameStyle::SetTransparency(sal_Int16 nTransparency) +{ + m_nTransparency = nTransparency; +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfframetable.hxx b/lotuswordpro/source/filter/xfilter/xfframetable.hxx new file mode 100644 index 000000000000..4d96870dce3a --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfframetable.hxx @@ -0,0 +1,90 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Table object exist in a frame. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-04-4 create and implements. + ************************************************************************/ +#ifndef _XFFRAMETABLE_HXX +#define _XFFRAMETABLE_HXX + +#include "xftable.hxx" +#include "xfframe.hxx" + +class XFFrameTable : public XFTable +{ +public: + void SetFrameStyle(rtl::OUString style); + + virtual void ToXml(IXFStream *pStrm); + +private: + rtl::OUString m_strFrameStyle; +}; + +inline void XFFrameTable::ToXml(IXFStream *pStrm) +{ + XFFrame *pFrame = new XFFrame(); + pFrame->SetStyleName(m_strFrameStyle); + pFrame->Add(this); + pFrame->ToXml(pStrm); + + delete pFrame; +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfglobal.cxx b/lotuswordpro/source/filter/xfilter/xfglobal.cxx new file mode 100644 index 000000000000..2228668d9499 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfglobal.cxx @@ -0,0 +1,145 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Global functions or include files that are needed. + * It's all for the full filter. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#include "xfglobal.hxx" +#include "xffontfactory.hxx" +#include "xfstylemanager.hxx" + +int XFGlobal::s_nFrameID = 1; +int XFGlobal::s_nGraphID = 1; +int XFGlobal::s_nSectionID = 1; +int XFGlobal::s_nTableID = 1; +int XFGlobal::s_nNoteID = 1; +int XFGlobal::s_nStrokeDashID = 1; +int XFGlobal::s_nAreaID = 1; + +//For chart object, /2005/2 +int XFGlobal::s_nObjID = 1; + +int XFGlobal::s_nImageID = 1; + +rtl::OUString XFGlobal::GenSectionName() +{ + //give it a initial name: + return A2OUSTR("sect") + Int32ToOUString(s_nSectionID++); +} + +rtl::OUString XFGlobal::GenFrameName() +{ + //give it a initial name: + return A2OUSTR("frame") + Int32ToOUString(s_nFrameID++); +} + +rtl::OUString XFGlobal::GenGraphName() +{ + return A2OUSTR("gr") + Int32ToOUString(s_nGraphID++); +} + +//For chart object, /2005/2 +rtl::OUString XFGlobal::GenObjName() +{ + return A2OUSTR("Object") + Int32ToOUString(s_nObjID++); +} + +rtl::OUString XFGlobal::GenTableName() +{ + return A2OUSTR("table") + Int32ToOUString(s_nFrameID++); +} + +rtl::OUString XFGlobal::GenNoteName() +{ + return A2OUSTR("ftn") + Int32ToOUString(s_nNoteID++); +} + +rtl::OUString XFGlobal::GenStrokeDashName() +{ + return A2OUSTR("stroke dash ") + Int32ToOUString(s_nStrokeDashID++); +} + +rtl::OUString XFGlobal::GenAreaName() +{ + return A2OUSTR("draw area") + Int32ToOUString(s_nAreaID++); +} + +rtl::OUString XFGlobal::GenImageName() +{ + return A2OUSTR("Graphic") + Int32ToOUString(s_nImageID++); +} + +void XFGlobal::Reset() +{ + s_nSectionID = 1; + s_nFrameID = 1; + s_nTableID = 1; + s_nNoteID = 1; + s_nStrokeDashID = 1; + s_nAreaID = 1; + s_nObjID = 1; +} + +void XFGlobalReset() +{ +// XFFontFactory::Reset(); +// XFStyleManager::Reset(); + XFGlobal::Reset(); +} diff --git a/lotuswordpro/source/filter/xfilter/xfglobal.hxx b/lotuswordpro/source/filter/xfilter/xfglobal.hxx new file mode 100644 index 000000000000..9648a0eb3417 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfglobal.hxx @@ -0,0 +1,178 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Global functions or include files that are needed. + * It's all for the full filter. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#ifndef _GLOBAL_HXX +#define _GLOBAL_HXX + +#include <cassert> + +#ifndef _SAL_TYPES_H +#include "sal/types.h" +#endif + +#ifndef _RTL_USTRING_HXX_ +#include <rtl/ustring.hxx> +#endif + +#ifndef _IXFOBJECT_HXX +#include "ixfobject.hxx" +#endif + +#ifndef _IXFSTREAM_HXX +#include "ixfstream.hxx" +#endif + +#ifndef _IXFATTRLIST_HXX +#include "ixfattrlist.hxx" +#endif + +#ifndef _XFUTIL_HXX +#include "xfutil.hxx" +#endif + +#ifndef _XFDEFS_HXX +#include "xfdefs.hxx" +#endif + +#define PI 3.1415926 +#define FLOAT_MIN 0.001 +#define MAX2(a,b) (((a) > (b)) ? (a) : (b)) +#define MAX3(a,b,c) MAX2(a,MAX2(b,c)) +#define MIN2(a,b) (((a) < (b)) ? (a) : (b)) +#define MIN3(a,b,c) MIN2(a,MIN2(b,c)) +#define FABS(f) (f>0?f:-f) + +void XFGlobalReset(); + +/** + * @brief + * Global object, it manages all global variables for the full filter. + * Before loading a file, we'll need to reset all global variables. + * XFGlobal::Reset can do this for you. + */ +class XFGlobal +{ +public: + /** + * @descr Generate a name for the section. + */ + static rtl::OUString GenSectionName(); + + /** + * @descr Gen a name for the frame. + */ + static rtl::OUString GenFrameName(); + + /** + * @descr Generate a name for graphics. + */ + static rtl::OUString GenGraphName(); + + /** + * @descr Generate a name for a table. + */ + static rtl::OUString GenTableName(); + + /** + * @descr Generate a name for a note. + */ + static rtl::OUString GenNoteName(); + + /** + * @descr Generate a name for the stroke style. + */ + static rtl::OUString GenStrokeDashName(); + + /** + * @descr Generate a name for the area fill style. + */ + static rtl::OUString GenAreaName(); + + /** + * @descr Generate a name for a ole obejct. + */ + static rtl::OUString GenObjName(); + + /** + * @descr Generate a name for an image object + */ + static rtl::OUString GenImageName(); + + /** + * @descr Reset all global variables. + */ + static void Reset(); + +public: + static int s_nSectionID; + static int s_nFrameID; + static int s_nGraphID; + static int s_nTableID; + static int s_nNoteID; + static int s_nStrokeDashID; + static int s_nAreaID; + static int s_nObjID; + static int s_nImageID; +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfheader.hxx b/lotuswordpro/source/filter/xfilter/xfheader.hxx new file mode 100644 index 000000000000..c4e8af920616 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfheader.hxx @@ -0,0 +1,90 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Header object. Sub object of master page. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-19 create this file. + ************************************************************************/ +#ifndef _XFHEADER_HXX +#define _XFHEADER_HXX + +#include "xfcontentcontainer.hxx" +#include "xfparagraph.hxx" +#include <vector> + +class XFHeader : public XFContentContainer +{ +public: + XFHeader() + { + } +public: + virtual void ToXml(IXFStream *pStrm) + { + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pStrm->StartElement( A2OUSTR("style:header") ); + XFContentContainer::ToXml(pStrm); + pStrm->EndElement( A2OUSTR("style:header") ); + } +private: + XFContentContainer m_aContents; +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfheaderstyle.cxx b/lotuswordpro/source/filter/xfilter/xfheaderstyle.cxx new file mode 100644 index 000000000000..4b4be458af9f --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfheaderstyle.cxx @@ -0,0 +1,192 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Header style,exist in page-master object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-21 create this file. + ************************************************************************/ +#include "xfheaderstyle.hxx" +#include "xfbgimage.hxx" + +XFHeaderStyle::XFHeaderStyle(sal_Bool isFooter) +{ + m_bIsFooter = isFooter; + m_bDynamicSpace = sal_True; + m_fHeight = -1; + m_fMinHeight = -1; + m_pBorders = NULL; + m_pShadow = NULL; + m_pBGImage = NULL; +} + +XFHeaderStyle::~XFHeaderStyle() +{ + if( m_pBorders ) + delete m_pBorders; + if( m_pBGImage ) + delete m_pBGImage; + if( m_pShadow ) + delete m_pShadow; +} + +void XFHeaderStyle::SetMargins(double left, double right, double bottom) +{ + if( left != -1 ) + m_aMargin.SetLeft(left); + if( right != -1 ) + m_aMargin.SetRight(right); + if( bottom != -1 ) + m_aMargin.SetBottom(bottom); +} +void XFHeaderStyle::SetDynamicSpace(sal_Bool dynamic) +{ + m_bDynamicSpace = dynamic; +} + +void XFHeaderStyle::SetHeight(double height) +{ + m_fHeight = height; +} + +void XFHeaderStyle::SetMinHeight(double minHeight) +{ + m_fMinHeight = minHeight; +} + +void XFHeaderStyle::SetPadding(double left, double right, double top, double bottom) +{ + if( left != -1 ) + m_aPadding.SetLeft(left); + if( right != -1 ) + m_aPadding.SetRight(right); + if( top != -1 ) + m_aPadding.SetTop(top); + if( bottom != -1 ) + m_aPadding.SetBottom(bottom); +} + +void XFHeaderStyle::SetShadow(XFShadow *pShadow) +{ + if( m_pShadow && (pShadow != m_pShadow) ) + delete m_pShadow; + m_pShadow = pShadow; +} + +void XFHeaderStyle::SetBorders(XFBorders *pBorders) +{ + if( m_pBorders ) + delete m_pBorders; + m_pBorders = pBorders; +} + +void XFHeaderStyle::SetBackImage(XFBGImage *image) +{ + if( m_pBGImage ) + delete m_pBGImage; + m_pBGImage = image; +} + +void XFHeaderStyle::SetBackColor(XFColor color) +{ + m_aBackColor = color; +} + +void XFHeaderStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + if( m_bIsFooter ) + pStrm->StartElement( A2OUSTR("style:footer-style") ); + else + pStrm->StartElement( A2OUSTR("style:header-style") ); + + //height + if( m_fMinHeight>0 ) + pAttrList->AddAttribute( A2OUSTR("fo:min-height"), DoubleToOUString(m_fMinHeight) + A2OUSTR("cm") ); + else if( m_fHeight>0 ) + pAttrList->AddAttribute( A2OUSTR("svg:height"), DoubleToOUString(m_fHeight) + A2OUSTR("cm") ); + + m_aMargin.ToXml(pStrm); + if(m_pShadow) + m_pShadow->ToXml(pStrm); + m_aPadding.ToXml(pStrm); + if( m_pBorders ) + m_pBorders->ToXml(pStrm); + + if( m_aBackColor.IsValid() ) + pAttrList->AddAttribute( A2OUSTR("fo:background-color"), m_aBackColor.ToString() ); + + if( m_bDynamicSpace ) + pAttrList->AddAttribute( A2OUSTR("style:dynamic-spacing"), A2OUSTR("true") ); + else + pAttrList->AddAttribute( A2OUSTR("style:dynamic-spacing"), A2OUSTR("false") ); + + pStrm->StartElement( A2OUSTR("style:properties") ); + + // background image + if( m_pBGImage ) + m_pBGImage->ToXml(pStrm); + + pStrm->EndElement( A2OUSTR("style:properties") ); + + if( m_bIsFooter ) + pStrm->EndElement( A2OUSTR("style:footer-style") ); + else + pStrm->EndElement( A2OUSTR("style:header-style") ); +} diff --git a/lotuswordpro/source/filter/xfilter/xfheaderstyle.hxx b/lotuswordpro/source/filter/xfilter/xfheaderstyle.hxx new file mode 100644 index 000000000000..3cafc14f19da --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfheaderstyle.hxx @@ -0,0 +1,142 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Header style,exist in page-master object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-19 create this file. + ************************************************************************/ +#ifndef _XFHEADERSTYLE_HXX +#define _XFHEADERSTYLE_HXX + +#include "xfstyle.hxx" +#include "xfmargins.hxx" +#include "xfborders.hxx" +#include "xfpadding.hxx" +#include "xfshadow.hxx" + +/** + * @brief + * Header style object. + */ +class XFBGImage; +class XFHeaderStyle : public XFStyle +{ +public: + explicit XFHeaderStyle(sal_Bool isFooter=sal_False); + + virtual ~XFHeaderStyle(); + +public: + /** + * @descr Set margins for header style. + */ + void SetMargins(double left = -1, double right = -1, double bottom = -1); + + void SetDynamicSpace(sal_Bool dynamic); + + /** + * @descr Set header fixed height. + */ + void SetHeight(double height); + + /** + * @descr Set header min height. + */ + void SetMinHeight(double minHeight); + + /** + * @descr Set padding for header. Padding is the space between header borde and header content. + */ + void SetPadding(double left=-1, double right=-1, double top=-1, double bottom=-1); + + /** + * @descr Set header shadow. + */ + void SetShadow(XFShadow *pShadow); + + /** + * @descr Set header borders. + */ + void SetBorders(XFBorders *pBorders); + + void SetBackImage(XFBGImage *image); + + /** + * @descr Set header background color. + */ + void SetBackColor(XFColor color); + + /** + * @descr Output header style obejct. + */ + virtual void ToXml(IXFStream *pStrm); + +protected: + sal_Bool m_bIsFooter; + sal_Bool m_bDynamicSpace; + double m_fHeight; + double m_fMinHeight; + XFMargins m_aMargin; + XFShadow* m_pShadow; + XFPadding m_aPadding; + XFBorders *m_pBorders; + XFBGImage *m_pBGImage; + XFColor m_aBackColor; +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfhyperlink.hxx b/lotuswordpro/source/filter/xfilter/xfhyperlink.hxx new file mode 100644 index 000000000000..1b162833e881 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfhyperlink.hxx @@ -0,0 +1,140 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Hyperlink object for OOo xml filter. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-1-31 create this file. + ************************************************************************/ +#ifndef _XFHYPERLINK_HXX +#define _XFHYPERLINK_HXX + +class XFHyperlink : public XFContent +{ +public: + XFHyperlink(); + +public: + void SetHRef(rtl::OUString href); + + void SetText(rtl::OUString text); + + void SetName(rtl::OUString name); + + void SetTargetFrame(rtl::OUString frame=A2OUSTR("_self")); + + virtual void ToXml(IXFStream *pStrm); + +private: + rtl::OUString m_strHRef; + rtl::OUString m_strName; + rtl::OUString m_strFrame; + rtl::OUString m_strText; +}; + +inline XFHyperlink::XFHyperlink() +{ + m_strFrame = A2OUSTR("_self"); +} + +inline void XFHyperlink::SetHRef(rtl::OUString href) +{ + m_strHRef = href; +} + +inline void XFHyperlink::SetName(rtl::OUString name) +{ + m_strName = name; +} + +inline void XFHyperlink::SetTargetFrame(rtl::OUString frame) +{ + m_strFrame = frame; +} + +inline void XFHyperlink::SetText(rtl::OUString text) +{ + m_strText = text; +} + +inline void XFHyperlink::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pAttrList->AddAttribute( A2OUSTR("xlink:type"), A2OUSTR("simple") ); + pAttrList->AddAttribute( A2OUSTR("xlink:href"), m_strHRef ); + if( m_strName.getLength() > 0 ) + pAttrList->AddAttribute( A2OUSTR("office:name"), m_strName ); + pAttrList->AddAttribute( A2OUSTR("office:target-frame-name"), m_strFrame ); + pAttrList->AddAttribute( A2OUSTR("xlink:show"), A2OUSTR("replace") ); + pStrm->StartElement( A2OUSTR("text:a") ); + + pAttrList->Clear(); + if( GetStyleName().getLength()>0 ) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), GetStyleName() ); + pStrm->StartElement( A2OUSTR("text:span") ); + if( m_strText.getLength() ) + pStrm->Characters(m_strText); + else + pStrm->Characters(m_strHRef); + pStrm->EndElement( A2OUSTR("text:span") ); + + pStrm->EndElement( A2OUSTR("text:a") ); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfimage.cxx b/lotuswordpro/source/filter/xfilter/xfimage.cxx new file mode 100644 index 000000000000..7b838d99e4d6 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfimage.cxx @@ -0,0 +1,145 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Image object. + ************************************************************************/ +/************************************************************************* + * Change History + 2005-02-22 create and implemente. + ************************************************************************/ +#include "xfimage.hxx" +#include "xfbase64.hxx" + +XFImage::XFImage() +{ + m_eType = enumXFFrameImage; + m_strName = XFGlobal::GenImageName(); +} + +void XFImage::SetFileURL(rtl::OUString url) +{ + m_strImageFile = url; + m_bUseLink = sal_True; +} + +void XFImage::SetImageData(sal_uInt8 *buf, int len) +{ + m_strData = XFBase64::Encode(buf, len); + m_bUseLink = sal_False; +} + +/* + <text:p text:style-name="Standard"> + <draw:image draw:style-name="fr1" draw:name="Graphic1" + text:anchor-type="paragraph" svg:width="4.981cm" svg:height="4.77cm" + draw:z-index="0" xlink:href="file:///d:/bee.wmf" xlink:type="simple" + xlink:show="embed" xlink:actuate="onLoad"/> + </text:p> + */ +void XFImage::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + if( GetStyleName().getLength() ) + pAttrList->AddAttribute( A2OUSTR("draw:style-name"), GetStyleName() ); + + assert(m_strName.getLength()>0); //name should not be null. + if( m_strName.getLength() ) + pAttrList->AddAttribute( A2OUSTR("draw:name"), m_strName ); + //anchor type: + switch( m_eAnchor ) + { + case enumXFAnchorPara: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("paragraph") ); + break; + case enumXFAnchorPage: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("page") ); + pAttrList->AddAttribute( A2OUSTR("text:anchor-page-number"), Int32ToOUString(m_nAnchorPage) ); + break; + case enumXFAnchorChar: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("char") ); + break; + case enumXFAnchorAsChar: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("as-char") ); + break; + case enumXFAnchorFrame: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("frame") ); + break; + } + pAttrList->AddAttribute( A2OUSTR("svg:x"), DoubleToOUString(m_aRect.GetX()) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("svg:y"), DoubleToOUString(m_aRect.GetY()) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("svg:width"), DoubleToOUString(m_aRect.GetWidth()) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("svg:height"), DoubleToOUString(m_aRect.GetHeight()) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("draw:z-index"), Int32ToOUString(m_nZIndex) ); + + if( m_bUseLink ) + { + pAttrList->AddAttribute( A2OUSTR("xlink:href"), m_strImageFile ); + pAttrList->AddAttribute( A2OUSTR("xlink:type"), A2OUSTR("simple") ); + pAttrList->AddAttribute( A2OUSTR("xlink:show"), A2OUSTR("embed") ); + pAttrList->AddAttribute( A2OUSTR("xlink:actuate"), A2OUSTR("onLoad") ); + } + + pStrm->StartElement( A2OUSTR("draw:image") ); + if( !m_bUseLink ) + { + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("office:binary-data") ); + pStrm->Characters(m_strData); + pStrm->EndElement( A2OUSTR("office:binary-data") ); + } + pStrm->EndElement( A2OUSTR("draw:image") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfimage.hxx b/lotuswordpro/source/filter/xfilter/xfimage.hxx new file mode 100644 index 000000000000..90b4c8132b6c --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfimage.hxx @@ -0,0 +1,100 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Image object. + ************************************************************************/ +/************************************************************************* + * Change History + 2005-02-22 create and implemente. + ************************************************************************/ +#ifndef _XFIMAGE_HXX +#define _XFIMAGE_HXX + +#include "xfframe.hxx" + +/** + * @brief + * Image obejct. + * There are two way to import an image, file link or base64 stream. + */ +class XFImage : public XFFrame +{ +public: + XFImage(); + +public: + /** + * @descr Use file link source.a + */ + void SetFileURL(rtl::OUString url); + + /** + * @descr Use base64 stream. + */ + void SetImageData(sal_uInt8 *buf, int len); + + /** + * @descr Output image. + */ + virtual void ToXml(IXFStream *pStrm); + +private: + rtl::OUString m_strImageFile; + rtl::OUString m_strData; + sal_Bool m_bUseLink; +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfimagestyle.cxx b/lotuswordpro/source/filter/xfilter/xfimagestyle.cxx new file mode 100644 index 000000000000..68458df66924 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfimagestyle.cxx @@ -0,0 +1,211 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Image style object. + ************************************************************************/ +/************************************************************************* + * Change History + 2005-02-22 create and implemente. + ************************************************************************/ +#include "xfimagestyle.hxx" +#include "xfborders.hxx" +#include "xfshadow.hxx" + +XFImageStyle::XFImageStyle() +{ + m_nBrightness = 0; + m_nContrast = 0; + m_nGamma = 0; + m_nTransparent = 0; + m_nAdjustRed = 0; + m_nAdjustGreen = 0; + m_nAdjustBlue = 0; + m_fClipLeft = 0; + m_fClipRight = 0; + m_fClipTop = 0; + m_fClipBottom = 0; + m_bHoriFlip = sal_False; + m_bVertFlip = sal_False; + m_eColorMode = enumXFColorStandard; +} + +void XFImageStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("style:name"), GetStyleName() ); + if( GetParentStyleName().getLength() > 0 ) + pAttrList->AddAttribute(A2OUSTR("style:parent-style-name"),GetParentStyleName()); + pAttrList->AddAttribute( A2OUSTR("style:family"), A2OUSTR("graphics") ); + //parent style name ignore now. + pStrm->StartElement( A2OUSTR("style:style") ); + + m_aMargins.ToXml(pStrm); + + pAttrList->Clear(); + + if( m_eWrap == enumXFWrapBackground ) + { + pAttrList->AddAttribute( A2OUSTR("style:run-through"), A2OUSTR("background") ); + } + else + { + pAttrList->AddAttribute( A2OUSTR("style:run-through"), A2OUSTR("foreground") ); + + if( m_eWrap == enumXFWrapNone ) + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("none") ); + else if( m_eWrap == enumXFWrapLeft ) + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("left") ); + else if( m_eWrap == enumXFWrapRight ) + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("right") ); + else if( m_eWrap == enumXFWrapParallel ) + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("parallel") ); + else if( m_eWrap == enumXFWrapRunThrough ) + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("run-through") ); + else if( m_eWrap == enumXFWrapBest ) + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("dynamic") ); + } + //background + if( m_aBackColor.IsValid() ) + pAttrList->AddAttribute( A2OUSTR("fo:background-color"), m_aBackColor.ToString() ); + //pad + m_aPad.ToXml(pStrm); + //margin: + m_aMargins.ToXml(pStrm); + //flip + if( m_bHoriFlip || m_bVertFlip ) + { + if( m_bHoriFlip && m_bVertFlip ) + pAttrList->AddAttribute( A2OUSTR("style:mirror"), A2OUSTR("horizontal-on-right-pages vertical") ); + else if( m_bHoriFlip && !m_bVertFlip ) + pAttrList->AddAttribute( A2OUSTR("style:mirror"), A2OUSTR("horizontal-on-right-pages") ); + else if( !m_bHoriFlip && m_bVertFlip ) + pAttrList->AddAttribute( A2OUSTR("style:mirror"), A2OUSTR("vertical") ); + } + //color adjust + if( m_nAdjustRed ) + pAttrList->AddAttribute( A2OUSTR("draw:red"), Int32ToOUString(m_nAdjustRed) + A2OUSTR("%") ); + if( m_nAdjustGreen ) + pAttrList->AddAttribute( A2OUSTR("draw:green"), Int32ToOUString(m_nAdjustGreen) + A2OUSTR("%") ); + if( m_nAdjustBlue ) + pAttrList->AddAttribute( A2OUSTR("draw:blue"), Int32ToOUString(m_nAdjustBlue) + A2OUSTR("%") ); + + if( m_nGamma ) + pAttrList->AddAttribute( A2OUSTR("draw:gamma"), Int32ToOUString(m_nGamma) ); + if( m_nBrightness ) + pAttrList->AddAttribute( A2OUSTR("draw:luminance"), Int32ToOUString(m_nBrightness) + A2OUSTR("%") ); + if( m_nContrast ) + pAttrList->AddAttribute( A2OUSTR("draw:contrast"), Int32ToOUString(m_nContrast) + A2OUSTR("%") ); + + if( m_nTransparent ) + pAttrList->AddAttribute( A2OUSTR("draw:transparency"), Int32ToOUString(m_nTransparent) + A2OUSTR("%") ); + + pAttrList->AddAttribute(A2OUSTR("draw:color-mode"), GetColorMode(m_eColorMode)); + //border + if( m_pBorders ) + m_pBorders->ToXml(pStrm); + //shadow + if( m_pShadow ) + m_pShadow->ToXml(pStrm); + + if( m_bPrintable ) + pAttrList->AddAttribute( A2OUSTR("style:print-content"), A2OUSTR("true") ); + //protect: + if( m_bProtectContent || m_bProtectSize || m_bProtectPos ) + { + rtl::OUString protect; + if( m_bProtectContent ) + protect += A2OUSTR("content"); + if( m_bProtectSize ) + { + if( protect.getLength()>0 ) + protect += A2OUSTR(" "); + protect += A2OUSTR("size"); + } + if( m_bProtectPos ) + { + if( protect.getLength()>0 ) + protect += A2OUSTR(" "); + protect += A2OUSTR("position"); + } + pAttrList->AddAttribute( A2OUSTR("style:protect"), protect ); + } + //vertical pos and horizon pos: + pAttrList->AddAttribute( A2OUSTR("style:vertical-pos"), GetFrameYPos(m_eYPos) ); + pAttrList->AddAttribute( A2OUSTR("style:vertical-rel"), GetFrameYRel(m_eYRel) ); + pAttrList->AddAttribute( A2OUSTR("style:horizontal-pos"), GetFrameXPos(m_eXPos) ); + pAttrList->AddAttribute( A2OUSTR("style:horizontal-rel"), GetFrameXRel(m_eXRel) ); + + //clip: + if( FABS(m_fClipLeft)>FLOAT_MIN || FABS(m_fClipRight)>FLOAT_MIN || FABS(m_fClipTop)>FLOAT_MIN || FABS(m_fClipBottom)>FLOAT_MIN ) + { + rtl::OUString clip = A2OUSTR("rect("); + clip += DoubleToOUString(m_fClipTop) + A2OUSTR("cm "); + clip += DoubleToOUString(m_fClipRight) + A2OUSTR("cm "); + clip += DoubleToOUString(m_fClipBottom) + A2OUSTR("cm "); + clip += DoubleToOUString(m_fClipLeft) + A2OUSTR("cm"); + clip += A2OUSTR(")"); + pAttrList->AddAttribute(A2OUSTR("fo:clip"),clip); + } + + // + pStrm->StartElement( A2OUSTR("style:properties") ); + pStrm->EndElement( A2OUSTR("style:properties") ); + + pStrm->EndElement( A2OUSTR("style:style") ); + +} diff --git a/lotuswordpro/source/filter/xfilter/xfimagestyle.hxx b/lotuswordpro/source/filter/xfilter/xfimagestyle.hxx new file mode 100644 index 000000000000..aa4899bdd260 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfimagestyle.hxx @@ -0,0 +1,164 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Image style object. + ************************************************************************/ +/************************************************************************* + * Change History + 2005-02-22 create this file. + 2005-02-25 make it inherit from XFFrameStyle. + ************************************************************************/ +#ifndef _XFIMAGESTYLE_HXX +#define _XFIMAGESTYLE_HXX + +#include "xfframestyle.hxx" +#include "xfrect.hxx" + +class XFImageStyle : public XFFrameStyle +{ +public: + XFImageStyle(); + +public: + void SetBrightness(sal_Int32 brightness); + + void SetContrast(sal_Int32 contrast); + + void SetGamma(sal_Int32 gamma); + + void SetTransparent(sal_Int32 transparent); + + void SetAdjustRed(sal_Int32 red); + + void SetAdjustGreen(sal_Int32 green); + + void SetAdjustBlue(sal_Int32 blue); + + void SetClip(double left, double right, double top, double bottom); + + void SetFlip(sal_Bool hori, sal_Bool vert); + + void SetColorMode(enumXFColorMode mode); + + virtual void ToXml(IXFStream *pStrm); + +private: + sal_Int32 m_nBrightness; + sal_Int32 m_nContrast; + sal_Int32 m_nGamma; + sal_Int32 m_nTransparent; + sal_Int32 m_nAdjustRed; + sal_Int32 m_nAdjustGreen; + sal_Int32 m_nAdjustBlue; + double m_fClipLeft; + double m_fClipRight; + double m_fClipTop; + double m_fClipBottom; + sal_Bool m_bHoriFlip; + sal_Bool m_bVertFlip; + enumXFColorMode m_eColorMode; +}; + +inline void XFImageStyle::SetBrightness(sal_Int32 brightness) +{ + m_nBrightness = brightness; +} + +inline void XFImageStyle::SetContrast(sal_Int32 contrast) +{ + m_nContrast = contrast; +} + +inline void XFImageStyle::SetGamma(sal_Int32 gamma) +{ + m_nGamma = gamma; +} + +inline void XFImageStyle::SetTransparent(sal_Int32 transparent) +{ + m_nTransparent = transparent; +} + +inline void XFImageStyle::SetAdjustRed(sal_Int32 red) +{ + m_nAdjustRed = red; +} + +inline void XFImageStyle::SetAdjustGreen(sal_Int32 green) +{ + m_nAdjustGreen = green; +} + +inline void XFImageStyle::SetAdjustBlue(sal_Int32 blue) +{ + m_nAdjustBlue = blue; +} + +inline void XFImageStyle::SetClip(double left, double right, double top, double bottom) +{ + m_fClipLeft = left; + m_fClipRight = right; + m_fClipTop = top; + m_fClipBottom = bottom; +} + +inline void XFImageStyle::SetFlip(sal_Bool hori, sal_Bool vert) +{ + m_bHoriFlip = hori; + m_bVertFlip = vert; +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfindex.cxx b/lotuswordpro/source/filter/xfilter/xfindex.cxx new file mode 100644 index 000000000000..4531e6338f21 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfindex.cxx @@ -0,0 +1,449 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Represente index source,index body and index index entry. + ************************************************************************/ +/************************************************************************* + * Change History + 2005-02-02 create and implemente. + ************************************************************************/ +#include "xfindex.hxx" +#include "xfparagraph.hxx" + +XFIndex::XFIndex() +{ + m_pTitle = NULL; + m_eType = enumXFIndexTOC; + m_bProtect = sal_True; + m_bSeparator = sal_False; + m_nMaxLevel = 0; + + for(sal_uInt16 i=1;i<MAX_TOC_LEVEL+1;i++) + { + m_aTOCSource[i].clear(); + } +} + +XFIndex::~XFIndex() +{ + if( m_pTitle ) + delete m_pTitle; + + for(sal_uInt16 i=1;i<MAX_TOC_LEVEL+1;i++) + { + m_aTOCSource[i].clear(); + } + + while(m_aTemplates.size()>0) + { + XFIndexTemplate * pTemplate = m_aTemplates.back(); + m_aTemplates.pop_back(); + delete pTemplate;pTemplate=NULL; + } +} + +void XFIndex::SetSectionStyle(rtl::OUString strSectStyleName) +{ + SetStyleName(strSectStyleName); +} + +void XFIndex::SetTitle(rtl::OUString title, rtl::OUString strParaStyle) +{ + m_strTitle = title; + + m_pTitle = new XFParagraph(); + m_pTitle->SetStyleName(strParaStyle); + m_pTitle->Add(m_strTitle); +} + +void XFIndex::AddTemplate(sal_uInt32 level, + rtl::OUString style, + enumXFIndexTemplate type1, + enumXFIndexTemplate type2, + enumXFIndexTemplate type3, + enumXFIndexTemplate type4 ) +{ + if( level<1 ) + return; + + if (level > m_nMaxLevel) + m_nMaxLevel = level; + + XFIndexTemplate * templ = new XFIndexTemplate(); + + templ->AddEntry(type1); + templ->AddEntry(type2); + templ->AddEntry(type3); + templ->AddEntry(type4); + templ->SetLevel( rtl::OUString::valueOf( ( sal_Int64 ) level ) ); + + m_aTemplates.push_back( templ ); +} + +void XFIndex::AddTemplate(rtl::OUString level, rtl::OUString style, XFIndexTemplate* templ) +{ +// if( level<1 || !templ ) +// return; + +// if (level > m_nMaxLevel) +// m_nMaxLevel = level; + + templ->SetLevel( level ); + if(m_eType != enumXFIndexTOC) // TOC's styles are applied to template entries separately + { + templ->SetStyleName( style ); + } + m_aTemplates.push_back( templ ); +} + +void XFIndex::AddEntry(rtl::OUString entry, rtl::OUString strParaStyle) +{ + XFParagraph *pPara = new XFParagraph(); + pPara->SetStyleName(strParaStyle); + pPara->Add(entry); + pPara->Add(new XFTabStop()); + XFContentContainer::Add(pPara); +} + +sal_Int32 XFIndex::GetEntryCount() +{ + return GetCount(); +} + +void XFIndex::SetProtected(sal_Bool protect) +{ + m_bProtect = protect; +} + +void XFIndex::SetSeparator(sal_Bool sep) +{ + m_bSeparator = sep; +} + +void XFIndex::AddTocSource(sal_uInt16 nLevel, const rtl::OUString sStyleName) +{ + if (nLevel > MAX_TOC_LEVEL) + { + return; + } + + m_aTOCSource[nLevel].push_back(sStyleName); +} + +void XFIndex::SetDefaultAlphaIndex(rtl::OUString strDivision,sal_Bool bRunin, sal_Bool bSeparator) +{ + XFIndexTemplate * pTemplateSep = new XFIndexTemplate(); + if (bSeparator) + { + SetSeparator(sal_True); + pTemplateSep->AddEntry(enumXFIndexTemplateText,A2OUSTR("")); + } + AddTemplate(A2OUSTR("separator"),A2OUSTR("Separator"),pTemplateSep); + + XFIndexTemplate * pTemplate1 = new XFIndexTemplate(); + pTemplate1->AddEntry(enumXFIndexTemplateText,A2OUSTR("")); + pTemplate1->AddEntry(enumXFIndexTemplateTab,A2OUSTR("")); + pTemplate1->AddEntry(enumXFIndexTemplatePage,A2OUSTR("")); + AddTemplate(Int32ToOUString(1),A2OUSTR("Primary"),pTemplate1); + + XFIndexTemplate * pTemplate2 = new XFIndexTemplate(); + pTemplate2->AddEntry(enumXFIndexTemplateText,A2OUSTR("")); + pTemplate2->AddEntry(enumXFIndexTemplateTab,A2OUSTR("")); + pTemplate2->AddEntry(enumXFIndexTemplatePage,A2OUSTR("")); + XFIndexTemplate * pTemplate3 = new XFIndexTemplate(); + pTemplate3->AddEntry(enumXFIndexTemplateText,A2OUSTR("")); + pTemplate3->AddEntry(enumXFIndexTemplateTab,A2OUSTR("")); + pTemplate3->AddEntry(enumXFIndexTemplatePage,A2OUSTR("")); + + if (bRunin) + { + AddTemplate(Int32ToOUString(2),A2OUSTR("Primary"),pTemplate2); + AddTemplate(Int32ToOUString(3),A2OUSTR("Primary"),pTemplate3); + } + else + { + AddTemplate(Int32ToOUString(2),A2OUSTR("Secondary"),pTemplate2); + AddTemplate(Int32ToOUString(3),A2OUSTR("Secondary"),pTemplate3); + } +} + +void XFIndex::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + rtl::OUString strIndexName; + rtl::OUString strTplName; + rtl::OUString strSourceName; + + if(m_eType == enumXFIndexTOC ) + { + strIndexName = A2OUSTR("text:table-of-content"); + strSourceName = A2OUSTR("text:table-of-content-source"); + strTplName = A2OUSTR("text:table-of-content-entry-template"); + } + else if( m_eType == enumXFIndexAlphabetical ) + { + strIndexName = A2OUSTR("text:alphabetical-index"); + strSourceName = A2OUSTR("text:alphabetical-index-source"); + strTplName = A2OUSTR("text:alphabetical-index-entry-template"); + } + else if( m_eType == enumXFIndexUserIndex ) + { + strIndexName = A2OUSTR("text:user-index"); + strSourceName = A2OUSTR("text:text:user-index-source"); + strTplName = A2OUSTR("text:user-index-entry-template"); + } + else if( m_eType == enumXFIndexObject ) + { + strIndexName = A2OUSTR("text:object-index"); + strSourceName = A2OUSTR("text:object-index-source"); + strTplName = A2OUSTR("text:object-index-entry-template"); + } + else if( m_eType == enumXFIndexIllustration ) + { + strIndexName = A2OUSTR("text:illustration-index"); + strSourceName = A2OUSTR("text:illustration-index-source"); + strTplName = A2OUSTR("text:illustration-index-entry-template"); + } + else if( m_eType == enumXFIndexTableIndex ) + { + strIndexName = A2OUSTR("text:table-index"); + strSourceName = A2OUSTR("text:table-index-source"); + strTplName = A2OUSTR("text:table-index-entry-template"); + } + + if( GetStyleName().getLength() > 0 ) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), GetStyleName() ); + if( m_bProtect ) + pAttrList->AddAttribute( A2OUSTR("text:protected"), A2OUSTR("true") ); + else + pAttrList->AddAttribute( A2OUSTR("text:protected"), A2OUSTR("false") ); + + pAttrList->AddAttribute( A2OUSTR("text:name"), m_strTitle ); + pStrm->StartElement( strIndexName ); + + //text:table-of-content-source: + pAttrList->Clear(); + + if(m_eType == enumXFIndexTOC ) + { + pAttrList->AddAttribute( A2OUSTR("text:outline-level"), Int32ToOUString(10)); + pAttrList->AddAttribute( A2OUSTR("text:use-index-source-styles"), A2OUSTR("true")); + pAttrList->AddAttribute( A2OUSTR("text:use-index-marks"), A2OUSTR("true")); + pAttrList->AddAttribute( A2OUSTR("text:use-outline-level"), A2OUSTR("false")); + } + if (m_bSeparator) + pAttrList->AddAttribute( A2OUSTR("text:alphabetical-separators"), A2OUSTR("true") ); + + pStrm->StartElement( strSourceName ); + //title template: + pAttrList->Clear(); + + pStrm->StartElement( A2OUSTR("text:index-title-template") ); + pStrm->Characters( m_strTitle ); + pStrm->EndElement( A2OUSTR("text:index-title-template") ); + + //entry templates: + std::vector<XFIndexTemplate *>::iterator it; + for (it = m_aTemplates.begin(); it != m_aTemplates.end(); it++) + { + (*it)->SetTagName( strTplName); + (*it)->ToXml(pStrm); + } + + // by + if(m_eType == enumXFIndexTOC ) + { + for(sal_uInt16 i=1; i <= MAX_TOC_LEVEL; i++) + { + if (m_aTOCSource[i].size() == 0) + { + // unnecessary to output this level + continue; + } + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("text:outline-level"), Int32ToOUString(i)); + pStrm->StartElement( A2OUSTR("text:index-source-styles") ); + + std::vector<rtl::OUString>::iterator it; + for (it = m_aTOCSource[i].begin(); it != m_aTOCSource[i].end(); it++) + { + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("text:style-name"), *it); + pStrm->StartElement( A2OUSTR("text:index-source-style") ); + pStrm->EndElement( A2OUSTR("text:index-source-style") ); + } + pStrm->EndElement( A2OUSTR("text:index-source-styles") ); + } + } + + pStrm->EndElement( strSourceName ); + + //index-body: + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("text:index-body") ); + //index-title: + if(m_strTitle.getLength()) + { + pAttrList->AddAttribute( A2OUSTR("text:name"), m_strTitle + A2OUSTR("_Head") ); + pStrm->StartElement( A2OUSTR("text:index-title") ); + if( m_pTitle ) + m_pTitle->ToXml(pStrm); + pStrm->EndElement( A2OUSTR("text:index-title") ); + } + + XFContentContainer::ToXml(pStrm); + pStrm->EndElement( A2OUSTR("text:index-body") ); + + pStrm->EndElement( strIndexName ); +} + + +void XFIndexTemplate::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pAttrList->AddAttribute( A2OUSTR("text:outline-level"), m_nLevel ); + pAttrList->AddAttribute( A2OUSTR("text:style-name"), m_strStyle ); + if( m_strTagName.getLength() == 0 ) + m_strTagName = A2OUSTR("text:table-of-content-entry-template"); + pStrm->StartElement( m_strTagName ); + + for( size_t i=0; i<m_aEntries.size(); i++ ) + { + pAttrList->Clear(); + + switch( m_aEntries[i].first ) + { + case enumXFIndexTemplateChapter: + if(m_aEntries[i].second.getLength() > 0) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), m_aEntries[i].second ); + + pStrm->StartElement( A2OUSTR("text:index-entry-chapter-number") ); + pStrm->EndElement( A2OUSTR("text:index-entry-chapter-number") ); + break; + case enumXFIndexTemplateText: + if(m_aEntries[i].second.getLength() > 0) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), m_aEntries[i].second ); + + pStrm->StartElement( A2OUSTR("text:index-entry-text") ); + pStrm->EndElement( A2OUSTR("text:index-entry-text") ); + break; + case enumXFIndexTemplateTab: + if( m_eTabType != enumXFTabRight ) + pAttrList->AddAttribute( A2OUSTR("style:position"), DoubleToOUString(m_fTabLength) + A2OUSTR("cm") ); + + if(m_aEntries[i].second.getLength() > 0) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), m_aEntries[i].second ); + + switch(m_eTabType) + { + case enumXFTabLeft: + pAttrList->AddAttribute( A2OUSTR("style:type"), A2OUSTR("left") ); + break; + case enumXFTabCenter: + pAttrList->AddAttribute( A2OUSTR("style:type"), A2OUSTR("center") ); + break; + case enumXFTabRight: + pAttrList->AddAttribute( A2OUSTR("style:type"), A2OUSTR("right") ); + break; + case enumXFTabChar: + pAttrList->AddAttribute( A2OUSTR("style:type"), A2OUSTR("char") ); + break; + } + //delimiter: + if( m_eTabType == enumXFTabChar ) + pAttrList->AddAttribute( A2OUSTR("style:char"), m_strTabDelimiter ); + //leader char: + if( m_strTabLeader.getLength() ) + pAttrList->AddAttribute( A2OUSTR("style:leader-char"), m_strTabLeader ); + + pStrm->StartElement( A2OUSTR("text:index-entry-tab-stop") ); + pStrm->EndElement( A2OUSTR("text:index-entry-tab-stop") ); + break; + case enumXFIndexTemplatePage: + if(m_aEntries[i].second.getLength() > 0) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), m_aEntries[i].second ); + + pStrm->StartElement( A2OUSTR("text:index-entry-page-number") ); + pStrm->EndElement( A2OUSTR("text:index-entry-page-number") ); + break; + case enumXFIndexTemplateLinkStart: + pStrm->StartElement( A2OUSTR("text:index-entry-link-start") ); + pStrm->EndElement( A2OUSTR("text:index-entry-link-start") ); + break; + case enumXFIndexTemplateLinkEnd: + pStrm->StartElement( A2OUSTR("text:index-entry-link-end") ); + pStrm->EndElement( A2OUSTR("text:index-entry-link-end") ); + break; + case enumXFIndexTemplateSpan: + pAttrList->Clear(); + pAttrList->AddAttribute(A2OUSTR("text:style-name"), GetStyleName()); + pStrm->StartElement( A2OUSTR("text:index-entry-span") ); + pStrm->Characters(m_aTextEntries[i]); + pStrm->EndElement( A2OUSTR("text:index-entry-span") ); + break; + case enumXFIndexTemplateBibliography: + pStrm->StartElement( A2OUSTR("text:index-entry-bibliography") ); + pStrm->EndElement( A2OUSTR("text:index-entry-bibliography") ); + break; + } + } + + pStrm->EndElement( m_strTagName ); +} diff --git a/lotuswordpro/source/filter/xfilter/xfindex.hxx b/lotuswordpro/source/filter/xfilter/xfindex.hxx new file mode 100644 index 000000000000..988601b859cb --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfindex.hxx @@ -0,0 +1,282 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Represente index source,index body and index index entry. + ************************************************************************/ +/************************************************************************* + * Change History + 2005-02-02 create and implemente. + ************************************************************************/ +#ifndef _XFINDEX_HXX +#define _XFINDEX_HXX +#include <map> +#include <vector> + +#include "xfcontent.hxx" +#include "ixfproperty.hxx" +#include "xfcontentcontainer.hxx" +#include "xftabstop.hxx" + +class XFIndex; +class XFIndexEntry; +class XFIndexTemplate; +class XFParagraph; + +/** + * @brief + * Index template. + * When index update, the template is used to decide the index body. + */ +class XFIndexTemplate : public XFContent +{ +public: + XFIndexTemplate(); + +public: + /** + * @descr Set template level. + */ + void SetLevel(rtl::OUString level); + /** + * @descr Set style. + */ + void SetStyleName(rtl::OUString style); + /** + * @descr Add a entry in the template. + */ + void AddEntry(enumXFIndexTemplate entry, rtl::OUString styleName = A2OUSTR("")); + + /** + * @descr Add a tab entry in the template. + */ + void AddTabEntry(enumXFTab type, double len, sal_Unicode leader = '*', sal_Unicode delimiter='.', rtl::OUString styleName = A2OUSTR("")); + + /** + * @descr Add a entry in the template. + */ + void AddTextEntry(rtl::OUString sSpan, rtl::OUString styleName = A2OUSTR("")); + + /** + * @descr clear all index template parts. + */ + void Clear(); + virtual void ToXml(IXFStream *pStrm); + +private: + /** + * @descr Helper function. + */ + void SetTagName(rtl::OUString tag); + + friend class XFIndex; +private: + rtl::OUString m_nLevel; + rtl::OUString m_strStyle; + enumXFTab m_eTabType; + double m_fTabLength; + rtl::OUString m_strTabDelimiter; + rtl::OUString m_strTabLeader; + rtl::OUString m_strTagName; + typedef std::pair<enumXFIndexTemplate, rtl::OUString> TOCTEMPLATE_ENTRY_TYPE; + std::vector<TOCTEMPLATE_ENTRY_TYPE> m_aEntries; // template entry + text style + std::map<sal_uInt16, rtl::OUString> m_aTextEntries; + + rtl::OUString m_strChapterTextStyle; +}; + +/** + * @brief + * Index, include index template, index body. + */ +class XFIndex : public XFContentContainer +{ +public: + XFIndex(); + + virtual ~XFIndex(); + +public: + /** + * @descr Set index type. + */ + void SetIndexType(enumXFIndex type); + + /** + * @descr Set index section style. Perhaps you should create a section style first. + */ + void SetSectionStyle(rtl::OUString strSectStyleName); + + /** + * @descr Set index title. + */ + void SetTitle(rtl::OUString title, rtl::OUString strParaStyle); + + /** + * @descr Set index entry template. + * @param level [1-10]. + */ + void AddTemplate(sal_uInt32 level, + rtl::OUString style, + enumXFIndexTemplate type1 = enumXFIndexTemplateChapter, + enumXFIndexTemplate type2 = enumXFIndexTemplateText, + enumXFIndexTemplate type3 = enumXFIndexTemplateTab, + enumXFIndexTemplate type4 = enumXFIndexTemplatePage); + + /** + * @descr Add index templaet entry. + */ + void AddTemplate(rtl::OUString level, rtl::OUString style, XFIndexTemplate* templ); + + /** + * @descr Add index entry. + */ + void AddEntry(rtl::OUString entry, rtl::OUString strParaStyle); + + /** + * @descr return entry count. + */ + sal_Int32 GetEntryCount(); + + /** + * @descr Set if protected index to prevent handly-revise. + */ + void SetProtected(sal_Bool protect); + + /** + * @descr Set separator. + */ + void SetSeparator(sal_Bool sep); + + virtual void ToXml(IXFStream *pStrm); + + void AddTocSource(sal_uInt16 nLevel, const rtl::OUString sStyleName); + + /** + * @descr Set default value for index. + */ + void SetDefaultAlphaIndex(rtl::OUString strDivision,sal_Bool bRunin, sal_Bool bSeparator); + +private: + enumXFIndex m_eType; + rtl::OUString m_strTitle; + rtl::OUString m_strSectStyle; + bool m_bProtect; + bool m_bSeparator; + XFParagraph *m_pTitle; + + std::vector<XFIndexTemplate *> m_aTemplates; // template entry + style + + #define MAX_TOC_LEVEL 10 + std::vector<rtl::OUString> m_aTOCSource[MAX_TOC_LEVEL+1]; + + sal_uInt32 m_nMaxLevel; +}; + +inline XFIndexTemplate::XFIndexTemplate() +{ + m_nLevel = Int32ToOUString(0); +} + +inline void XFIndexTemplate::SetLevel(rtl::OUString level) +{ + m_nLevel = level; +} +inline void XFIndexTemplate::SetStyleName(rtl::OUString style) +{ + m_strStyle = style; +} + +inline void XFIndexTemplate::SetTagName(rtl::OUString tag) +{ + m_strTagName = tag; +} + +inline void XFIndexTemplate::AddEntry(enumXFIndexTemplate entry, rtl::OUString styleName) +{ + std::pair<enumXFIndexTemplate, rtl::OUString> pair(entry, styleName); + m_aEntries.push_back(pair); +} + +inline void XFIndexTemplate::AddTabEntry(enumXFTab type, double len, sal_Unicode leader, sal_Unicode delimiter, rtl::OUString styleName) +{ + m_eTabType = type; + m_strTabLeader = rtl::OUString( leader ); + m_strTabDelimiter = rtl::OUString( delimiter ); + m_fTabLength = len; + + AddEntry(enumXFIndexTemplateTab, styleName); +} + +inline void XFIndexTemplate::AddTextEntry(rtl::OUString sText, rtl::OUString styleName) +{ + sal_uInt16 nLen = m_aEntries.size(); + AddEntry(enumXFIndexTemplateSpan, styleName); + + m_aTextEntries[nLen] = sText; +} + + +inline void XFIndexTemplate::Clear() +{ + m_aEntries.clear(); +} + +inline void XFIndex::SetIndexType(enumXFIndex type) +{ + m_eType = type; +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfinputlist.hxx b/lotuswordpro/source/filter/xfilter/xfinputlist.hxx new file mode 100644 index 000000000000..17e7e491f4d9 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfinputlist.hxx @@ -0,0 +1,115 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * input list field. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-05-27 create this file. + ************************************************************************/ +#ifndef _XFINPUTLIST_HXX +#define _XFINPUTLIST_HXX + +#include "xfcontent.hxx" + +/** + * @brief + * input list field. + */ +class XFInputList : public XFContent +{ +public: + void SetName(rtl::OUString sName); + void SetLabels(std::vector<rtl::OUString> list); + virtual void ToXml(IXFStream *pStrm); +private: + rtl::OUString m_strName; + std::vector<rtl::OUString> m_list; +}; + +inline void XFInputList::SetName(rtl::OUString sName) +{ + m_strName = sName; +} + +inline void XFInputList::SetLabels(std::vector<rtl::OUString> list) +{ + m_list=list; +} + +inline void XFInputList::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pAttrList->AddAttribute( A2OUSTR("text:name"), m_strName ); + pStrm->StartElement( A2OUSTR("text:drop-down") ); + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("text:value"), A2OUSTR(" ") ); + pStrm->StartElement( A2OUSTR("text:label") ); + pStrm->EndElement( A2OUSTR("text:label") ); + for(sal_uInt32 i=0; i< m_list.size();i++) + { + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("text:value"), m_list[i] ); + pStrm->StartElement( A2OUSTR("text:label") ); + pStrm->EndElement( A2OUSTR("text:label") ); + } + pStrm->EndElement( A2OUSTR("text:drop-down") ); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xflinebreak.hxx b/lotuswordpro/source/filter/xfilter/xflinebreak.hxx new file mode 100644 index 000000000000..c67f507e7310 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xflinebreak.hxx @@ -0,0 +1,84 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************** + * @file + * Line break object,<text:line-break/> + *************************************************************************/ +/************************************************************************** + * Change History + * 2004-01-11 create this file. + *************************************************************************/ +#ifndef _XFLINEBREAK_HXX +#define _XFLINEBREAK_HXX + +#include "xfglobal.hxx" +#include "xfcontent.hxx" + +class XFLineBreak : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +inline void XFLineBreak::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("text:line-break") ); + pStrm->EndElement( A2OUSTR("text:line-break") ); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xflineheight.hxx b/lotuswordpro/source/filter/xfilter/xflineheight.hxx new file mode 100644 index 000000000000..5c9678a28337 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xflineheight.hxx @@ -0,0 +1,176 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Line height for paragraph. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#ifndef _XFLINEHEIGHT_HXX +#define _XFLINEHEIGHT_HXX + +class XFLineHeight +{ +public: + XFLineHeight() + { + Reset(); + } +public: + void SetHeight(double value); + + void SetLeastHeight(double value); + + void SetPercent(sal_Int32 value); + + void SetSpace(double value); + + void Reset(); + + void ToXml(IXFStream *pStrm); + + enumLHType GetType(); + + friend bool operator==(XFLineHeight& indent1, XFLineHeight& indent2); + friend bool operator!=(XFLineHeight& indent1, XFLineHeight& indent2); +private: + union{ + sal_Int32 m_nValue; + double m_fValue; + }m_Value; + enumLHType m_eType; +}; + +inline void XFLineHeight::SetHeight(double value) +{ + m_Value.m_fValue = value; + m_eType = enumLHHeight; +} + +inline void XFLineHeight::SetLeastHeight(double value) +{ + m_Value.m_fValue = value; + m_eType = enumLHLeast; +} + +inline void XFLineHeight::SetPercent(sal_Int32 value) +{ + m_Value.m_nValue = value; + m_eType = enumLHPercent; +} +inline void XFLineHeight::SetSpace(double value) +{ + m_Value.m_fValue = value; + m_eType = enumLHSpace; +} +inline void XFLineHeight::Reset() +{ + m_eType = enumLHNone; + rtl_zeroMemory(&m_Value,sizeof(m_Value)); +} + +inline enumLHType XFLineHeight::GetType() +{ + return m_eType; +} + +inline void XFLineHeight::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + switch(m_eType) + { + case enumLHNone: + return; + case enumLHHeight: + pAttrList->AddAttribute( A2OUSTR("fo:line-height"),DoubleToOUString(m_Value.m_fValue) + A2OUSTR("cm") ); + break; + case enumLHLeast: + pAttrList->AddAttribute( A2OUSTR("style:line-height-at-least"),DoubleToOUString(m_Value.m_fValue) + A2OUSTR("cm") ); + break; + case enumLHPercent: + pAttrList->AddAttribute( A2OUSTR("fo:line-height"), DoubleToOUString(m_Value.m_nValue) + A2OUSTR("%") ); + break; + case enumLHSpace: + pAttrList->AddAttribute( A2OUSTR("style:line-spacing"), DoubleToOUString(m_Value.m_fValue) + A2OUSTR("cm") ); + break; + } +} + +inline bool operator==(XFLineHeight& lh1, XFLineHeight& lh2) +{ + if( lh1.m_eType != lh2.m_eType ) + return false; + if( lh1.m_eType == enumLHPercent ) + { + if( lh1.m_Value.m_nValue != lh2.m_Value.m_nValue ) + return false; + } + else + { + if( lh1.m_Value.m_fValue != lh2.m_Value.m_fValue ) + return false; + } + return true; +} + +inline bool operator!=(XFLineHeight& lh1, XFLineHeight& lh2) +{ + return !(lh1==lh2); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xflinenumberconfig.hxx b/lotuswordpro/source/filter/xfilter/xflinenumberconfig.hxx new file mode 100644 index 000000000000..5c2dfd869be1 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xflinenumberconfig.hxx @@ -0,0 +1,211 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Line numbering config for the full document. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-03-23 create this file. + ************************************************************************/ +#ifndef _XFLINENUMBERCONFIG_HXX +#define _XFLINENUMBERCONFIG_HXX + +#include "xfstyle.hxx" + +class XFLineNumberConfig : public XFStyle +{ +public: + XFLineNumberConfig(); + +public: + void SetNumberOffset(double offset); + + void SetNumberPosition(enumXFLineNumberPos pos); + + void SetNumberIncrement(sal_Int32 increment); + + void SetSeperator(sal_Int32 increment, rtl::OUString seperator); + + void SetNumberFormat(rtl::OUString numfmt = A2OUSTR("1")); + + void SetTextStyle(rtl::OUString style); + + void SetRestartOnPage(sal_Bool restart = sal_True); + + void SetCountEmptyLines(sal_Bool empty = sal_True); + + void SetCountFrameLines(sal_Bool frame = sal_True); + + virtual void ToXml(IXFStream *pStrm); + +private: + enumXFLineNumberPos m_ePosition; + double m_fOffset; + sal_Int32 m_nIncrement; + sal_Int32 m_nSepIncrement; + rtl::OUString m_strSeparator; + rtl::OUString m_strNumFmt; + rtl::OUString m_strTextStyle; + sal_Bool m_bRestartOnPage; + sal_Bool m_bCountEmptyLines; + sal_Bool m_bCountFrameLines; +}; + +inline XFLineNumberConfig::XFLineNumberConfig() +{ + m_fOffset = 0; + m_nIncrement = 5; + m_nSepIncrement = 3; + m_bRestartOnPage = sal_False; + m_bCountEmptyLines = sal_True; + m_bCountFrameLines = sal_False; +} + +inline void XFLineNumberConfig::SetNumberOffset(double offset) +{ + m_fOffset = offset; +} + +inline void XFLineNumberConfig::SetNumberPosition(enumXFLineNumberPos position) +{ + m_ePosition = position; +} + +inline void XFLineNumberConfig::SetNumberIncrement(sal_Int32 increment) +{ + m_nIncrement = increment; +} + +inline void XFLineNumberConfig::SetSeperator(sal_Int32 increment, rtl::OUString seperator) +{ + m_nSepIncrement = increment; + m_strSeparator = seperator; +} + +inline void XFLineNumberConfig::SetNumberFormat(rtl::OUString numfmt) +{ + m_strNumFmt = numfmt; +} + +inline void XFLineNumberConfig::SetTextStyle(rtl::OUString style) +{ + m_strTextStyle = style; +} + +inline void XFLineNumberConfig::SetRestartOnPage(sal_Bool restart) +{ + m_bRestartOnPage = restart; +} + +inline void XFLineNumberConfig::SetCountEmptyLines(sal_Bool empty) +{ + m_bCountEmptyLines = empty; +} + +inline void XFLineNumberConfig::SetCountFrameLines(sal_Bool frame) +{ + m_bCountFrameLines = frame; +} + +inline void XFLineNumberConfig::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + if( m_strTextStyle.getLength() > 0 ) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), m_strTextStyle ); + pAttrList->AddAttribute( A2OUSTR("text:offset"), DoubleToOUString(m_fOffset) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("style:num-format"), m_strNumFmt ); + //position: + if( m_ePosition == enumXFLineNumberLeft ) + pAttrList->AddAttribute( A2OUSTR("text:number-position"), A2OUSTR("left") ); + else if( m_ePosition == enumXFLineNumberRight ) + pAttrList->AddAttribute( A2OUSTR("text:number-position"), A2OUSTR("right") ); + else if( m_ePosition == enumXFLineNumberInner ) + pAttrList->AddAttribute( A2OUSTR("text:number-position"), A2OUSTR("inner") ); + else if( m_ePosition == enumXFLineNumberOutter ) + pAttrList->AddAttribute( A2OUSTR("text:number-position"), A2OUSTR("outter") ); + + pAttrList->AddAttribute( A2OUSTR("text:increment"), Int32ToOUString(m_nIncrement) ); + + if( m_bRestartOnPage ) + pAttrList->AddAttribute( A2OUSTR("text:restart-on-page"), A2OUSTR("true") ); + else + pAttrList->AddAttribute( A2OUSTR("text:restart-on-page"), A2OUSTR("false") ); + + if( m_bCountEmptyLines ) + pAttrList->AddAttribute( A2OUSTR("text:count-empty-lines"), A2OUSTR("true") ); + else + pAttrList->AddAttribute( A2OUSTR("text:count-empty-lines"), A2OUSTR("false") ); + + if( m_bCountFrameLines ) + pAttrList->AddAttribute( A2OUSTR("text:count-in-floating-frames"), A2OUSTR("true") ); + else + pAttrList->AddAttribute( A2OUSTR("text:count-in-floating-frames"), A2OUSTR("false") ); + + + pStrm->StartElement( A2OUSTR("text:linenumbering-configuration") ); + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("text:increment"), Int32ToOUString(m_nSepIncrement) ); + pStrm->StartElement( A2OUSTR("text:linenumbering-separator") ); + pStrm->Characters(m_strSeparator); + pStrm->EndElement( A2OUSTR("text:linenumbering-separator") ); + + pStrm->EndElement( A2OUSTR("text:linenumbering-configuration") ); +} + + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xflist.cxx b/lotuswordpro/source/filter/xfilter/xflist.cxx new file mode 100644 index 000000000000..93e863a0402f --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xflist.cxx @@ -0,0 +1,189 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * List object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-17 create this file. + ************************************************************************/ +#include "xflist.hxx" +#include "xflistitem.hxx" +#include "ixfstream.hxx" +#include "ixfattrlist.hxx" + +XFList::XFList() +{ + m_bOrdered = sal_True; + m_bContinueNumber = sal_False; + m_pHeader = NULL; +} + +XFList::XFList(sal_Bool ordered) +{ + m_bOrdered = ordered; + m_bContinueNumber = sal_False; +} + +XFList::~XFList() +{ +} + +void XFList::AddItem(XFListItem *pItem) +{ + assert(pItem); + assert(pItem->GetContentType()!=enumXFContentUnknown); + + Add(pItem); +} + +void XFList::AddItem(rtl::OUString text) +{ + XFListItem *pItem = new XFListItem(); + pItem->Add(text); + AddItem(pItem); +} + +void XFList::SetHeader(XFListItem *pItem) +{ + if( m_pHeader ) + delete m_pHeader; + pItem->SetIsHeader(sal_True); + m_pHeader = pItem; +} + +void XFList::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + assert(NULL!=pAttrList); + + pAttrList->Clear(); + if( GetStyleName().getLength() ) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), GetStyleName() ); + if( m_bContinueNumber ) + pAttrList->AddAttribute( A2OUSTR("text:continue-numbering"), A2OUSTR("true") ); + + if( m_bOrdered ) + pStrm->StartElement( A2OUSTR("text:ordered-list") ); + else + pStrm->StartElement( A2OUSTR("text:unordered-list") ); + + if( m_pHeader ) + { + m_pHeader->ToXml(pStrm); + } + XFContentContainer::ToXml(pStrm); + + if( m_bOrdered ) + pStrm->EndElement( A2OUSTR("text:ordered-list") ); + else + pStrm->EndElement( A2OUSTR("text:unordered-list") ); +} + +void XFList::StartList(IXFStream *pStrm, sal_Bool bContinueNumber) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + assert(NULL!=pAttrList); + + pAttrList->Clear(); + if( GetStyleName().getLength() ) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), GetStyleName() ); + if( bContinueNumber ) + pAttrList->AddAttribute( A2OUSTR("text:continue-numbering"), A2OUSTR("true") ); + + if( m_bOrdered ) + pStrm->StartElement( A2OUSTR("text:ordered-list") ); + else + pStrm->StartElement( A2OUSTR("text:unordered-list") ); +} + +void XFList::EndList(IXFStream *pStrm) +{ + if( m_bOrdered ) + pStrm->EndElement( A2OUSTR("text:ordered-list") ); + else + pStrm->EndElement( A2OUSTR("text:unordered-list") ); +} + +void XFList::StartListHeader(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pStrm->StartElement( A2OUSTR("text:list-header") ); +} + +void XFList::EndListHeader(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pStrm->EndElement( A2OUSTR("text:list-header") ); +} + +void XFList::StartListItem(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + assert(NULL!=pAttrList); + + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("text:list-item") ); +} + +void XFList::EndListItem(IXFStream *pStrm) +{ + pStrm->EndElement( A2OUSTR("text:list-item") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xflist.hxx b/lotuswordpro/source/filter/xfilter/xflist.hxx new file mode 100644 index 000000000000..331919c78a72 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xflist.hxx @@ -0,0 +1,162 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Base list object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-17 create this file. + ************************************************************************/ +#ifndef _XFLIST_HXX +#define _XFLIST_HXX + +#include "xflistitem.hxx" +#include "xfcontentcontainer.hxx" + +class XFListItem; + +/** + * @brief + * list obejct for order-list and unordered-list. + */ +class XFList : public XFContentContainer +{ +public: + XFList(); + + XFList(sal_Bool ordered); + + virtual ~XFList(); + +public: + /** + * @descr Set whether it's an ordered list or an unordered list. + */ + void SetOrdered(sal_Bool ordered); + + /** + * @descr Set whether to continue to number list. + */ + void SetContinueNumber(sal_Bool bContinueNumber=sal_False); + + /** + * @descr Add a list item. + */ + void AddItem(XFListItem *pItem); + + /** + * @descr Add a simple text list item. + */ + void AddItem(rtl::OUString text); + + /** + * @descr Set the header list item. There can only be one list header. + */ + void SetHeader(XFListItem *pItem); + + /** + * @descr Output list obejct. + */ + virtual void ToXml(IXFStream *pStrm); + + virtual void StartList(IXFStream *pStrm, sal_Bool bContinueNumber = sal_False); + + virtual void EndList(IXFStream *pStrm); + + static void StartListHeader(IXFStream *pStrm); + + static void EndListHeader(IXFStream *pStrm); + + static void StartListItem(IXFStream *pStrm); + + static void EndListItem(IXFStream *pStrm); + +private: + sal_Bool m_bOrdered; + sal_Bool m_bContinueNumber; + XFListItem *m_pHeader; + +}; + +class XFUnorderedList : public XFList +{ +public: + XFUnorderedList() + { + SetOrdered(sal_False); + } +}; + +class XFOrderedList : public XFList +{ +public: + XFOrderedList() + { + SetOrdered(sal_True); + } +}; + +inline void XFList::SetOrdered(sal_Bool ordered) +{ + m_bOrdered = ordered; +} + +inline void XFList::SetContinueNumber(sal_Bool bContinueNumber) +{ + m_bContinueNumber = bContinueNumber; +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xflistitem.hxx b/lotuswordpro/source/filter/xfilter/xflistitem.hxx new file mode 100644 index 000000000000..f382ce7611f1 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xflistitem.hxx @@ -0,0 +1,118 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * List item. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-02-17 create this file. + ************************************************************************/ +#ifndef _XFLISTITEM_HXX +#define _XFLISTITEM_HXX + +#include "xfcontent.hxx" +#include "xfcontentcontainer.hxx" +#include "xfparagraph.hxx" + +class XFListItem : public XFContentContainer +{ +public: + XFListItem(); + +public: + void SetIsHeader(sal_Bool isHeader=sal_True); + + virtual void ToXml(IXFStream *pStrm); + +private: + sal_Bool m_bIsHeader; +}; + +inline XFListItem::XFListItem() +{ + m_bIsHeader = sal_False; +} + +inline void XFListItem::SetIsHeader(sal_Bool isHeader) +{ + m_bIsHeader = isHeader; +} + +inline void XFListItem::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + if( GetStyleName().getLength() > 0 ) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), GetStyleName() ); + + if( !m_bIsHeader ) + { + pStrm->StartElement( A2OUSTR("text:list-item") ); + XFContentContainer::ToXml(pStrm); + pStrm->EndElement( A2OUSTR("text:list-item") ); + } + else + { + pStrm->StartElement( A2OUSTR("text:list-header") ); + XFContentContainer::ToXml(pStrm); + pStrm->EndElement( A2OUSTR("text:list-header") ); + } +} + + + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfliststyle.cxx b/lotuswordpro/source/filter/xfilter/xfliststyle.cxx new file mode 100644 index 000000000000..2560f5c20858 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfliststyle.cxx @@ -0,0 +1,341 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Styles for ordered list and unordered list. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-07 create the file. + * 2005-01-20 use XFNumFmt to fill XFListLevelNumber. + ************************************************************************/ +#include "xfliststyle.hxx" + +XFListLevel::XFListLevel() +{ + m_nLevel = 0; + m_nDisplayLevel = 0; + m_fIndent = 0; + m_fMinLabelWidth = 0.499; + m_fMinLabelDistance = 0; + m_eAlign = enumXFAlignStart; + m_eListType = enumXFListLevelNumber; +} + +void XFListLevel::ToXml(IXFStream *pStrm) +{ +} + +//---------------------------------------------------- + +void XFListlevelNumber::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("text:level"), Int16ToOUString(m_nLevel) ); + //text:style-name,ignore now. + m_aNumFmt.ToXml(pStrm); + if( m_nDisplayLevel ) + pAttrList->AddAttribute( A2OUSTR("text:display-levels"), Int16ToOUString(m_nDisplayLevel) ); + + pStrm->StartElement( A2OUSTR("text:list-level-style-number") ); + + //<style:properties>...</style:properties> + pAttrList->Clear(); + if( m_fIndent > FLOAT_MIN ) + { + pAttrList->AddAttribute( A2OUSTR("text:space-before"), DoubleToOUString(m_fIndent) + A2OUSTR("cm") ); + } + if( m_fMinLabelWidth > FLOAT_MIN ) + { + pAttrList->AddAttribute( A2OUSTR("text:min-label-width"), DoubleToOUString(m_fMinLabelWidth) + A2OUSTR("cm") ); + } + if( m_fMinLabelDistance > FLOAT_MIN ) + { + pAttrList->AddAttribute( A2OUSTR("text:min-label-distance"), DoubleToOUString(m_fMinLabelDistance) + A2OUSTR("cm") ); + } + pAttrList->AddAttribute( A2OUSTR("fo:text-align"), GetAlignName(m_eAlign) ); + + + pStrm->StartElement( A2OUSTR("style:properties") ); + pStrm->EndElement( A2OUSTR("style:properties") ); + + pStrm->EndElement( A2OUSTR("text:list-level-style-number") ); +} + +void XFListLevelBullet::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("text:level"), Int16ToOUString(m_nLevel) ); + //text:style-name,ignore now. + m_aNumFmt.ToXml(pStrm); + //bullet-char + rtl::OUString bullet(m_chBullet); + pAttrList->AddAttribute( A2OUSTR("text:bullet-char"), bullet ); + + pStrm->StartElement( A2OUSTR("text:list-level-style-bullet") ); + + //<style:properties>...</style:properties> + pAttrList->Clear(); + if( m_fIndent != 0 ) + { + pAttrList->AddAttribute( A2OUSTR("text:space-before"), DoubleToOUString(m_fIndent) + A2OUSTR("cm") ); + } + if( m_fMinLabelWidth != 0 ) + { + pAttrList->AddAttribute( A2OUSTR("text:min-label-width"), DoubleToOUString(m_fMinLabelWidth) + A2OUSTR("cm") ); + } + if( m_fMinLabelDistance != 0 ) + { + pAttrList->AddAttribute( A2OUSTR("text:min-label-distance"), DoubleToOUString(m_fMinLabelDistance) + A2OUSTR("cm") ); + } + + pAttrList->AddAttribute( A2OUSTR("fo:text-align"), GetAlignName(m_eAlign) ); + + if( m_strFontName.getLength() > 0 ) + { + pAttrList->AddAttribute( A2OUSTR("style:font-name"), m_strFontName ); + } + pStrm->StartElement( A2OUSTR("style:properties") ); + pStrm->EndElement( A2OUSTR("style:properties") ); + + pStrm->EndElement( A2OUSTR("text:list-level-style-bullet") ); +} + +//---------------------------------------------------- +XFListStyle::XFListStyle() +{ + XFNumFmt nf; + nf.SetSuffix( A2OUSTR(".") ); + nf.SetFormat( A2OUSTR("1") ); + + for( int i=0; i<10; i++ ) + { + m_pListLevels[i] = new XFListlevelNumber(); + m_pListLevels[i]->SetListlevelType(enumXFListLevelNumber); + m_pListLevels[i]->SetMinLabelWidth(0.499); + m_pListLevels[i]->SetIndent(0.501*(i+1)); + m_pListLevels[i]->SetLevel(i+1); + ( (XFListlevelNumber*)m_pListLevels[i])->SetNumFmt(nf); + } +} + +XFListStyle::XFListStyle(const XFListStyle& other) +{ + enumXFListLevel type; + for( int i=0; i<10; i++ ) + { + type = other.m_pListLevels[i]->m_eListType; + if( type == enumXFListLevelNumber ) + { + XFListlevelNumber *pNum = (XFListlevelNumber*)other.m_pListLevels[i]; + m_pListLevels[i] = new XFListlevelNumber(*pNum); + } + else if( type == enumXFListLevelBullet ) + { + XFListLevelBullet *pBullet = (XFListLevelBullet*)other.m_pListLevels[i]; + m_pListLevels[i] = new XFListLevelBullet(*pBullet); + } + else + m_pListLevels[i] = NULL; + } +} + +XFListStyle& XFListStyle::operator=(const XFListStyle& other) +{ + enumXFListLevel type; + for( int i=0; i<10; i++ ) + { + type = other.m_pListLevels[i]->m_eListType; + if( type == enumXFListLevelNumber ) + { + XFListlevelNumber *pNum = (XFListlevelNumber*)m_pListLevels[i]; + m_pListLevels[i] = new XFListlevelNumber(*pNum); + } + else if( type == enumXFListLevelBullet ) + { + XFListLevelBullet *pBullet = (XFListLevelBullet*)m_pListLevels[i]; + m_pListLevels[i] = new XFListLevelBullet(*pBullet); + } + else + m_pListLevels[i] = NULL; + } + return *this; +} + +XFListStyle::~XFListStyle() +{ + for( int i=0; i<10; i++ ) + { + if( m_pListLevels[i] ) + delete m_pListLevels[i]; + } +} + +void XFListStyle::SetDisplayLevel(sal_Int32 level, sal_Int16 nDisplayLevel) +{ + assert(level>=1&&level<=10); + + XFListLevel *pLevel = m_pListLevels[level-1]; + if( !pLevel ) + { + pLevel = new XFListlevelNumber(); + pLevel->SetListlevelType(enumXFListLevelNumber); + pLevel->SetLevel(level+1); + pLevel->SetMinLabelWidth(0.499); + pLevel->SetIndent(0.501*(level+1)); + pLevel->SetDisplayLevel(nDisplayLevel); + m_pListLevels[level-1] = pLevel; + } + else + pLevel->SetDisplayLevel(nDisplayLevel); +} + +void XFListStyle::SetListPosition(sal_Int32 level, + double indent, + double minLabelWidth, + double minLabelDistance, + enumXFAlignType align + ) +{ + assert(level>=1&&level<=10); + + XFListLevel *pLevel = m_pListLevels[level-1]; + if( !pLevel ) + { + XFListLevelBullet * pLevel = new XFListLevelBullet(); + pLevel->SetListlevelType(enumXFListLevelNumber); + pLevel->SetLevel(level+1); + pLevel->SetIndent(indent); + pLevel->SetMinLabelWidth(minLabelWidth); + pLevel->SetMinLabelDistance(minLabelDistance); + pLevel->SetAlignType(align); + m_pListLevels[level-1] = pLevel; + } + else + { + pLevel->SetIndent(indent); + pLevel->SetMinLabelWidth(minLabelWidth); + pLevel->SetMinLabelDistance(minLabelDistance); + pLevel->SetAlignType(align); + } +} + +void XFListStyle::SetListBullet(sal_Int32 level, + UChar32 bullet, + rtl::OUString fontname, + rtl::OUString prefix, + rtl::OUString suffix + ) +{ + assert(level>=1&&level<=10); + + if( m_pListLevels[level-1] ) + delete m_pListLevels[level-1]; + + XFListLevelBullet *pLevel = new XFListLevelBullet(); + pLevel->SetPrefix(prefix); + pLevel->SetSuffix(suffix); + pLevel->SetBulletChar(bullet); + pLevel->SetFontName(fontname); + // + pLevel->SetListlevelType(enumXFListLevelBullet); + pLevel->SetMinLabelWidth(0.499); + pLevel->SetIndent(0.501*level); + pLevel->SetLevel(level); + m_pListLevels[level-1] = pLevel; +} + +void XFListStyle::SetListNumber(sal_Int32 level, XFNumFmt& fmt, sal_Int16 start ) +{ + assert(level>=1&&level<=10); + + if( m_pListLevels[level-1] ) + delete m_pListLevels[level-1]; + + XFListlevelNumber *pLevel = new XFListlevelNumber(); + pLevel->SetNumFmt(fmt); + pLevel->SetStartValue(start); + // + pLevel->SetListlevelType(enumXFListLevelNumber); + pLevel->SetMinLabelWidth(0.499); + pLevel->SetIndent(0.501*level); + pLevel->SetLevel(level); + m_pListLevels[level-1] = pLevel; +} + +void XFListStyle::ToXml(IXFStream *pStrm) +{ + std::vector<XFListLevel*>::iterator it; + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("style:name"), GetStyleName() ); + if( GetParentStyleName().getLength() > 0 ) + pAttrList->AddAttribute(A2OUSTR("style:parent-style-name"),GetParentStyleName()); + pStrm->StartElement( A2OUSTR("text:list-style") ); + + for( int i=0; i<10; i++ ) + { + XFListLevel *pLevel = m_pListLevels[i]; + if( pLevel ) + pLevel->ToXml(pStrm); + } + + pStrm->EndElement( A2OUSTR("text:list-style") ); +} diff --git a/lotuswordpro/source/filter/xfilter/xfliststyle.hxx b/lotuswordpro/source/filter/xfilter/xfliststyle.hxx new file mode 100644 index 000000000000..5941fc768075 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfliststyle.hxx @@ -0,0 +1,268 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* +* @file +* Styles for ordered list and unordered list. +************************************************************************/ +/************************************************************************* +* Change History +* 2005-1-7 create the file. +************************************************************************/ +#ifndef _XFLISTSTYLE_HXX +#define _XFLISTSTYLE_HXX + +#include "xfglobal.hxx" +#include "xfstyle.hxx" +#include "xfnumfmt.hxx" +#include "unicode/utypes.h" +#include <vector> + +class IXFStream; + +enum enumXFListLevel +{ + enumXFListLevelBullet, + enumXFListLevelNumber, + enumXFListLevelImage +}; + +/************************************************************************** + * @descr + * Bullet style wrapper,the underline bullet type can be: + * number,image,or bullet. + *************************************************************************/ +class XFListLevel +{ +public: + XFListLevel(); + + virtual ~XFListLevel(){} + + void SetListlevelType(enumXFListLevel type); + + void SetLevel(sal_Int16 level); + + void SetDisplayLevel(sal_Int16 nDisplayLevel); + + void SetIndent(double indent); + + void SetMinLabelWidth(double labelWidth); + + void SetMinLabelDistance(double distance); + + void SetAlignType(enumXFAlignType align); + + virtual void ToXml(IXFStream *pStrm); + + friend class XFListStyle; +protected: + sal_Int16 m_nLevel; + sal_Int16 m_nDisplayLevel; + double m_fIndent; + double m_fMinLabelWidth; + double m_fMinLabelDistance; + enumXFAlignType m_eAlign; + enumXFListLevel m_eListType; +}; + +class XFListlevelNumber : public XFListLevel +{ +public: + XFListlevelNumber() + { + m_eListType = enumXFListLevelNumber; + } +public: + void SetNumFmt(XFNumFmt& fmt) + { + m_aNumFmt = fmt; + } + + void SetStartValue(sal_Int16 start) + { + m_aNumFmt.SetStartValue(start); + } + + virtual void ToXml(IXFStream *pStrm); +private: + XFNumFmt m_aNumFmt; +}; + + +class XFListLevelBullet : public XFListLevel +{ +public: + XFListLevelBullet() + { + m_eListType = enumXFListLevelBullet; + } + + void SetBulletChar(UChar32 ch) + { + m_chBullet = ch; + } + void SetPrefix(rtl::OUString prefix) + { + m_aNumFmt.SetPrefix(prefix); + } + void SetSuffix(rtl::OUString suffix) + { + m_aNumFmt.SetSuffix(suffix); + } + void SetFontName(rtl::OUString name) + { + m_strFontName = name; + } + + virtual void ToXml(IXFStream *pStrm); +private: + XFNumFmt m_aNumFmt; + int32_t m_chBullet; + rtl::OUString m_strFontName; +}; + +//not complete. +class XFListLevelImage : public XFListLevel +{ +public: + virtual void ToXml(IXFStream *pStrm); +private: + sal_Int16 m_nWidth; + sal_Int16 m_nHeight; + rtl::OUString m_strBinaryData; +}; + + +class XFListStyle : public XFStyle +{ +public: + XFListStyle(); + + XFListStyle(const XFListStyle& other); + + XFListStyle& operator=(const XFListStyle& other); + + virtual ~XFListStyle(); + +public: + void SetDisplayLevel(sal_Int32 level, sal_Int16 nShowLevel); + + void SetListPosition(sal_Int32 level, + double indent, + double minLabelWidth, + double minLabelDistance, + enumXFAlignType align=enumXFAlignStart + ); + + void SetListBullet(sal_Int32 level, + UChar32 bullet_char, + rtl::OUString fontname = A2OUSTR(""), + rtl::OUString prefix = A2OUSTR(""), + rtl::OUString suffix = A2OUSTR("") + ); + + void SetListNumber( sal_Int32 level, XFNumFmt& numFmt, sal_Int16 nStartValue = 1 ); + + //not implemented now. + void SetListImage(){} + + virtual enumXFStyle GetStyleFamily() + { + return enumXFStyleList; + } + virtual void ToXml(IXFStream *pStrm); + +private: + XFListLevel *m_pListLevels[10]; +}; + + + +inline void XFListLevel::SetListlevelType(enumXFListLevel type) +{ + m_eListType = type; +} + +inline void XFListLevel::SetAlignType(enumXFAlignType align) +{ + m_eAlign = align; +} + +inline void XFListLevel::SetLevel(sal_Int16 level) +{ + m_nLevel = level; +} + +inline void XFListLevel::SetDisplayLevel(sal_Int16 nDisplayLevel) +{ + m_nDisplayLevel = nDisplayLevel; +} + +inline void XFListLevel::SetIndent(double indent) +{ + m_fIndent = indent; +} + +inline void XFListLevel::SetMinLabelWidth(double labelWidth) +{ + m_fMinLabelWidth = labelWidth; +} + +inline void XFListLevel::SetMinLabelDistance(double distance) +{ + m_fMinLabelDistance = distance; +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfmargins.cxx b/lotuswordpro/source/filter/xfilter/xfmargins.cxx new file mode 100644 index 000000000000..8e8e69c1ba42 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfmargins.cxx @@ -0,0 +1,129 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Margins object, include left margin,right margin,top margin and bottom margin. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-19 create this file. + ************************************************************************/ + + +#include "xfmargins.hxx" + +XFMargins::XFMargins() +{ + Reset(); +} + +void XFMargins::Reset() +{ + m_fLeft = 0; + m_fRight = 0; + m_fTop = 0; + m_fBottom = 0; + m_nFlag = 0; +} + +void XFMargins::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + //margin left: + if( m_nFlag&XFMARGINS_FLAG_LEFT ) + { + pAttrList->AddAttribute( A2OUSTR("fo:margin-left"), DoubleToOUString(m_fLeft) + A2OUSTR("cm") ); + } + //margin right: + if( m_nFlag&XFMARGINS_FLAG_RIGHT ) + { + pAttrList->AddAttribute(A2OUSTR("fo:margin-right"), DoubleToOUString(m_fRight) + A2OUSTR("cm") ); + } + //margin top: + if( m_nFlag&XFMARGINS_FLAG_TOP ) + { + pAttrList->AddAttribute(A2OUSTR("fo:margin-top"), DoubleToOUString(m_fTop) + A2OUSTR("cm") ); + } + //margin bottom: + if( m_nFlag&XFMARGINS_FLAG_BOTTOM ) + { + pAttrList->AddAttribute(A2OUSTR("fo:margin-bottom"), DoubleToOUString(m_fBottom) + A2OUSTR("cm") ); + } +} + +bool operator==(XFMargins& indent1, XFMargins& indent2) +{ + return ( + (indent1.m_nFlag == indent2.m_nFlag) && + (indent1.m_fLeft == indent2.m_fLeft) && + (indent1.m_fRight == indent2.m_fRight) && + (indent1.m_fTop == indent2.m_fTop) && + (indent1.m_fBottom == indent2.m_fBottom) + ); +} +bool operator!=(XFMargins& indent1, XFMargins& indent2) +{ + return !(indent1==indent2); +} + +XFMargins& XFMargins::operator=(XFMargins& other) +{ + m_nFlag = other.m_nFlag; + m_fLeft = other.m_fLeft; + m_fRight = other.m_fRight; + m_fTop = other.m_fTop; + m_fBottom = other.m_fBottom; + return *this; +} diff --git a/lotuswordpro/source/filter/xfilter/xfmargins.hxx b/lotuswordpro/source/filter/xfilter/xfmargins.hxx new file mode 100644 index 000000000000..9cdbc9e337a5 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfmargins.hxx @@ -0,0 +1,147 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Margins object, include left margin,right margin,top margin and bottom margin. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-19 create this file. + ************************************************************************/ +#ifndef _XFMARGINS_HXX +#define _XFMARGINS_HXX + +#include "xfglobal.hxx" +#include "ixfproperty.hxx" + +#define XFMARGINS_FLAG_LEFT 0x00000001 +#define XFMARGINS_FLAG_RIGHT 0x00000002 +#define XFMARGINS_FLAG_TOP 0x00000004 +#define XFMARGINS_FLAG_BOTTOM 0x00000008 + +class XFMargins : public IXFProperty +{ +public: + XFMargins(); +public: + void Reset(); + void SetLeft(double left); + void SetRight(double right); + void SetTop(double top); + void SetBottom(double bottom); + + double GetLeft(); + double GetRight(); + double GetTop(); + double GetBottom(); + + virtual void ToXml(IXFStream *pStrm); + + friend bool operator==(XFMargins& indent1, XFMargins& indent2); + friend bool operator!=(XFMargins& indent1, XFMargins& indent2); + XFMargins& operator=(XFMargins& other); +private: + double m_fLeft; + double m_fRight; + double m_fTop; + double m_fBottom; + int m_nFlag; +}; + +inline void XFMargins::SetLeft(double left) +{ + m_fLeft = left; + m_nFlag |= XFMARGINS_FLAG_LEFT; +} + +inline void XFMargins::SetRight(double right) +{ + m_fRight = right; + m_nFlag |= XFMARGINS_FLAG_RIGHT; +} + +inline void XFMargins::SetTop(double top) +{ + m_fTop = top; + m_nFlag |= XFMARGINS_FLAG_TOP; +} + +inline void XFMargins::SetBottom(double bottom) +{ + m_fBottom = bottom; + m_nFlag |= XFMARGINS_FLAG_BOTTOM; +} + +inline double XFMargins::GetLeft() +{ + return m_fLeft; +} + +inline double XFMargins::GetRight() +{ + return m_fRight; +} + +inline double XFMargins::GetTop() +{ + return m_fTop; +} + +inline double XFMargins::GetBottom() +{ + return m_fBottom; +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfmasterpage.cxx b/lotuswordpro/source/filter/xfilter/xfmasterpage.cxx new file mode 100644 index 000000000000..39d7283386e7 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfmasterpage.cxx @@ -0,0 +1,132 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Master page object which was used to apply a layout to the pages. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#include "xfmasterpage.hxx" +#include "xfpagemaster.hxx" +#include "xfstylemanager.hxx" +#include "xffooter.hxx" +#include "xfheader.hxx" +#include "../lwpglobalmgr.hxx" +XFMasterPage::XFMasterPage() +{ + m_pHeader = NULL; + m_pFooter = NULL; +} + +XFMasterPage::~XFMasterPage() +{ + if( m_pHeader ) + delete m_pHeader; + if( m_pFooter ) + delete m_pFooter; +} + +void XFMasterPage::SetHeader(XFHeader *pHeader) +{ + if( m_pHeader ) + delete m_pHeader; + m_pHeader = pHeader; +} + +void XFMasterPage::SetFooter(XFFooter *pFooter) +{ + if( m_pFooter ) + delete m_pFooter; + m_pFooter = pFooter; +} + +enumXFStyle XFMasterPage::GetStyleFamily() +{ + return enumXFStyleMasterPage; +} + + +void XFMasterPage::SetPageMaster(rtl::OUString pm) +{ + m_strPageMaster = pm; +} + +void XFMasterPage::SetPageMaster(XFPageMaster *pPM) +{ + if( pPM->GetStyleName().getLength() > 0 ) + m_strPageMaster = pPM->GetStyleName(); + else + { + XFStyleManager* pXFStyleManager = LwpGlobalMgr::GetInstance()->GetXFStyleManager(); + m_strPageMaster = pXFStyleManager->AddStyle(pPM)->GetStyleName(); + } +} + +void XFMasterPage::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("style:name"), m_strStyleName ); + pAttrList->AddAttribute( A2OUSTR("style:page-master-name"), m_strPageMaster ); + pStrm->StartElement( A2OUSTR("style:master-page") ); + if( m_pHeader ) + m_pHeader->ToXml(pStrm); + if( m_pFooter ) + m_pFooter->ToXml(pStrm); + pStrm->EndElement( A2OUSTR("style:master-page") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfmasterpage.hxx b/lotuswordpro/source/filter/xfilter/xfmasterpage.hxx new file mode 100644 index 000000000000..99e24d34cf6b --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfmasterpage.hxx @@ -0,0 +1,98 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Master page object which was used to apply a layout to the pages. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#ifndef _XFMASTERPAGE_HXX +#define _XFMASTERPAGE_HXX + +#include "xfstyle.hxx" +#include "xfcontentcontainer.hxx" + +class XFPageMaster; +class XFFooter; +class XFHeader; +class XFMasterPage : public XFStyle +{ +public: + XFMasterPage(); + + virtual ~XFMasterPage(); + +public: + void SetPageMaster(rtl::OUString pm); + + void SetPageMaster(XFPageMaster *pPM); + + void SetHeader(XFHeader *pHeader); + + void SetFooter(XFFooter *pFooter); + + virtual enumXFStyle GetStyleFamily(); + + virtual void ToXml(IXFStream *pStrm); + +private: + rtl::OUString m_strPageMaster; + XFHeader *m_pHeader; + XFFooter *m_pFooter; +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfnumberstyle.cxx b/lotuswordpro/source/filter/xfilter/xfnumberstyle.cxx new file mode 100644 index 000000000000..8b2ef1ce7994 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfnumberstyle.cxx @@ -0,0 +1,388 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Number style for table cell. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-03-23 create this file. + ************************************************************************/ +#include "xfnumberstyle.hxx" + +XFNumberStyle::XFNumberStyle():m_aColor(0,0,0),m_aNegativeColor(255,0,0) +{ + m_eType = enumXFNumberNumber; + m_nDecimalDigits = 0; + m_nMinInteger = 1; + m_nMinExponent = 2; + m_bGroup = sal_False; + m_bRedIfNegative = sal_False; + m_bCurrencySymbolPost = sal_False; +} + +XFNumberStyle::XFNumberStyle(enumXFNumberType type) +{ + m_eType = type; + m_nDecimalDigits = 0; + m_nMinInteger = 1; + m_nMinExponent = 1; + m_bRedIfNegative = sal_False; + m_bCurrencySymbolPost = sal_False; +} + +enumXFStyle XFNumberStyle::GetStyleFamily() +{ + return enumXFStyleNumber; +} + +sal_Bool XFNumberStyle::Equal(IXFStyle *pStyle) +{ + if( !pStyle || pStyle->GetStyleFamily() != enumXFStyleNumber ) + return sal_False; + XFNumberStyle *pOther = (XFNumberStyle*)pStyle; + if( !pOther ) + return sal_False; + + if( m_eType != pOther->m_eType ) + return sal_False; + if( m_nDecimalDigits != pOther->m_nDecimalDigits ) + return sal_False; + if( m_nMinInteger != pOther->m_nMinInteger ) + return sal_False; + if( m_bRedIfNegative != pOther->m_bRedIfNegative ) + return sal_False; + if( m_bGroup != pOther->m_bGroup ) + return sal_False; + if( m_aColor != pOther->m_aColor ) + return sal_False; + if( m_strPrefix != pOther->m_strPrefix ) + return sal_False; + if( m_strSuffix != pOther->m_strSuffix ) + return sal_False; + + //When category of number format is scientific, the number can not be displayed normally in table. + if ( m_nMinExponent != pOther->m_nMinExponent ) + return sal_False; + + if( m_bRedIfNegative ) + { + if( m_aNegativeColor != pOther->m_aNegativeColor ) + return sal_False; + if( m_strNegativePrefix != pOther->m_strNegativePrefix ) + return sal_False; + if( m_strNegativeSuffix != pOther->m_strNegativeSuffix ) + return sal_False; + } + + if( m_eType == enuMXFNumberCurrency ) + { + if( m_bCurrencySymbolPost != pOther->m_bCurrencySymbolPost ) + return sal_False; + if( m_strCurrencySymbol != pOther->m_strCurrencySymbol ) + return sal_False; + } + + return sal_True; +} + +void XFNumberStyle::ToXml(IXFStream *pStrm) +{ + // for Text content number format + if (m_eType == enumXFText) + { + ToXml_StartElement(pStrm); + ToXml_EndElement(pStrm); + return; + } + // END for Text content number format + + if( !m_bRedIfNegative ) + { + ToXml_Normal(pStrm); + } + else + { + ToXml_Negative(pStrm); + } +} + +void XFNumberStyle::ToXml_StartElement(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pAttrList->AddAttribute( A2OUSTR("style:name"), GetStyleName() ); + if( GetParentStyleName().getLength() > 0 ) + pAttrList->AddAttribute(A2OUSTR("style:parent-style-name"),GetParentStyleName()); + + pAttrList->AddAttribute( A2OUSTR("style:family"), A2OUSTR("data-style") ); + + if( m_eType == enumXFNumberNumber ) + { + pStrm->StartElement( A2OUSTR("number:number-style") ); + } + else if( m_eType == enumXFNumberPercent ) + { + pStrm->StartElement( A2OUSTR("number:percentage-style") ); + } + else if( m_eType == enuMXFNumberCurrency ) + { + pStrm->StartElement( A2OUSTR("number:currency-style") ); + } + else if( m_eType == enumXFNumberScientific ) + { + pStrm->StartElement( A2OUSTR("number:number-style") ); + } + // for Text content number format + else if (m_eType == enumXFText) + { + pStrm->StartElement( A2OUSTR("number:text-content")); + } + // END for Text content number format + +} + +void XFNumberStyle::ToXml_EndElement(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pAttrList->AddAttribute( A2OUSTR("style:name"), GetStyleName() ); + pAttrList->AddAttribute( A2OUSTR("style:family"), A2OUSTR("data-style") ); + + if( m_eType == enumXFNumberNumber ) + { + pStrm->EndElement( A2OUSTR("number:number-style") ); + } + else if( m_eType == enumXFNumberPercent ) + { + pStrm->EndElement( A2OUSTR("number:percentage-style") ); + } + else if( m_eType == enuMXFNumberCurrency ) + { + pStrm->EndElement( A2OUSTR("number:currency-style") ); + } + else if( m_eType == enumXFNumberScientific ) + { + pStrm->EndElement( A2OUSTR("number:number-style") ); + } + // for Text content number format + else if (m_eType == enumXFText) + { + pStrm->EndElement( A2OUSTR("number:text-content")); + } + // END for Text content number format + +} +void XFNumberStyle::ToXml_Normal(IXFStream *pStrm) +{ + ToXml_StartElement(pStrm); + + ToXml_Content(pStrm,sal_False); + + ToXml_EndElement(pStrm); +} + +void XFNumberStyle::ToXml_Negative(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + rtl::OUString strStyleName = GetStyleName(); + rtl::OUString strGEStyle = strStyleName + A2OUSTR("PO"); + + SetStyleName(strGEStyle); + ToXml_Normal(pStrm); + SetStyleName(strStyleName); + + ToXml_StartElement(pStrm); + + ToXml_Content(pStrm,sal_True); + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("style:condition"), A2OUSTR("value()>=0") ); + pAttrList->AddAttribute( A2OUSTR("style:apply-style-name"), strGEStyle ); + pStrm->StartElement( A2OUSTR("style:map") ); + pStrm->EndElement( A2OUSTR("style:map") ); + + ToXml_EndElement(pStrm); +} + +void XFNumberStyle::ToXml_Content(IXFStream *pStrm, sal_Bool nagetive) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + //color: + if( !nagetive ) + pAttrList->AddAttribute( A2OUSTR("fo:color"), m_aColor.ToString() ); + else + pAttrList->AddAttribute( A2OUSTR("fo:color"), m_aNegativeColor.ToString() ); + + pStrm->StartElement( A2OUSTR("style:properties") ); + pStrm->EndElement( A2OUSTR("style:properties") ); + + if( !nagetive ) + { + if( m_strPrefix.getLength()>0 ) + { + pStrm->StartElement( A2OUSTR("number:text") ); + pStrm->Characters(m_strPrefix); + pStrm->EndElement( A2OUSTR("number:text") ); + } + } + else + { + if( m_strNegativePrefix.getLength() == 0 ) + m_strNegativePrefix = m_strPrefix; + if( m_strNegativePrefix.getLength()>0 ) + { + pStrm->StartElement( A2OUSTR("number:text") ); + // pStrm->Characters(m_strNegativePrefix); + pStrm->Characters(m_strNegativePrefix + A2OUSTR("-")); + pStrm->EndElement( A2OUSTR("number:text") ); + } + else + { + pStrm->StartElement( A2OUSTR("number:text") ); + pStrm->Characters(A2OUSTR("-")); + pStrm->EndElement( A2OUSTR("number:text") ); + } + } + + if( m_eType == enuMXFNumberCurrency && !m_bCurrencySymbolPost ) + { + if( m_strCurrencySymbol.getLength() > 0 ) + { + pStrm->StartElement( A2OUSTR("number:currency-symbol") ); + pStrm->Characters(m_strCurrencySymbol); + pStrm->EndElement( A2OUSTR("number:currency-symbol") ); + } + } + + //When category of number format is scientific, the number can not be displayed normally in table. + if ( m_eType == enumXFNumberScientific ) + { + pAttrList->Clear(); + pAttrList->AddAttribute(A2OUSTR("number:decimal-places"), Int32ToOUString(m_nDecimalDigits)); + pAttrList->AddAttribute(A2OUSTR("number:min-integer-digits"), Int32ToOUString(m_nMinInteger)); + pAttrList->AddAttribute(A2OUSTR("number:min-exponent-digits"), Int32ToOUString(m_nMinExponent)); + pStrm->StartElement( A2OUSTR("number:scientific-number") ); + pStrm->EndElement( A2OUSTR("number:scientific-number") ); + } + else + { + pAttrList->Clear(); + pAttrList->AddAttribute(A2OUSTR("number:decimal-places"),Int32ToOUString(m_nDecimalDigits)); + pAttrList->AddAttribute(A2OUSTR("number:min-integer-digits"),Int32ToOUString(m_nMinInteger)); + + if( m_bGroup ) + pAttrList->AddAttribute(A2OUSTR("number:grouping"),A2OUSTR("true")); + else + pAttrList->AddAttribute(A2OUSTR("number:grouping"),A2OUSTR("false")); + + pStrm->StartElement( A2OUSTR("number:number") ); + pStrm->EndElement( A2OUSTR("number:number") ); + } + + if( m_eType == enuMXFNumberCurrency && m_bCurrencySymbolPost ) + { + if( m_strCurrencySymbol.getLength()>0 ) + { + pStrm->StartElement( A2OUSTR("number:currency-symbol") ); + pStrm->Characters(m_strCurrencySymbol); + pStrm->EndElement( A2OUSTR("number:currency-symbol") ); + } + } + + if( !nagetive ) + { + if( m_strSuffix.getLength()>0 ) + { + pStrm->StartElement( A2OUSTR("number:text") ); + pStrm->Characters(m_strSuffix); + pStrm->EndElement( A2OUSTR("number:text") ); + } + else + { + if( m_eType == enumXFNumberPercent ) + { + pStrm->StartElement( A2OUSTR("number:text") ); + pStrm->Characters(A2OUSTR("%")); + pStrm->EndElement( A2OUSTR("number:text") ); + } + } + } + else + { + if( m_strNegativeSuffix.getLength() == 0 ) + m_strNegativeSuffix = m_strSuffix; + if( m_strNegativeSuffix.getLength()>0 ) + { + pStrm->StartElement( A2OUSTR("number:text") ); + pStrm->Characters(m_strNegativeSuffix); + pStrm->EndElement( A2OUSTR("number:text") ); + } + else + { + if( m_eType == enumXFNumberPercent ) + { + pStrm->StartElement( A2OUSTR("number:text") ); + pStrm->Characters(A2OUSTR("%")); + pStrm->EndElement( A2OUSTR("number:text") ); + } + } + } +} diff --git a/lotuswordpro/source/filter/xfilter/xfnumberstyle.hxx b/lotuswordpro/source/filter/xfilter/xfnumberstyle.hxx new file mode 100644 index 000000000000..1182dfa70903 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfnumberstyle.hxx @@ -0,0 +1,197 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Number style for table cell. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-03-23 create this file. + ************************************************************************/ +#ifndef _XFNUMBERSTYLE_HXX +#define _XFNUMBERSTYLE_HXX + +#include "xfstyle.hxx" +#include "xfstylemanager.hxx" +#include "xfcolor.hxx" +#include <rtl/ustring.hxx> + +class XFNumberStyle : public XFStyle +{ +public: + XFNumberStyle(); + + XFNumberStyle(enumXFNumberType type ); + +public: + void SetDecimalDigits(sal_Int32 decimal); + + void SetMinInteger(sal_Int32 integer); + + void SetMinExponent(sal_Int32 exponent); + + void SetGroup(sal_Bool group = sal_True); + + void SetColor(const XFColor& color); + XFColor GetColor(){return m_aColor;}//add by ,2005/11/30 + + void SetPrefix(rtl::OUString prefix); + + void SetSurfix(rtl::OUString surfix); + + void SetNegativeStyle(rtl::OUString prefix, rtl::OUString suffix, const XFColor& color=XFColor(255,0,0)); + + void SetNumberType(enumXFNumberType type); + + void SetCurrencySymbol(sal_Bool post, rtl::OUString symbol, sal_Bool bShowSpace=sal_False); + + virtual enumXFStyle GetStyleFamily(); + + virtual sal_Bool Equal(IXFStyle *pStyle); + + virtual void ToXml(IXFStream *pStrm); + +protected: + void ToXml_StartElement(IXFStream *pStrm); + + void ToXml_EndElement(IXFStream *pStrm); + + void ToXml_Normal(IXFStream *pStrm); + + void ToXml_Negative(IXFStream *pStrm); + + void ToXml_Content(IXFStream *pStrm, sal_Bool nagetive); + +protected: + enumXFNumberType m_eType; + sal_Int32 m_nDecimalDigits; + sal_Int32 m_nMinInteger; + sal_Int32 m_nMinExponent; + sal_Bool m_bGroup; + XFColor m_aColor; + sal_Bool m_bCurrencySymbolPost; + rtl::OUString m_strCurrencySymbol; + rtl::OUString m_strPrefix; + rtl::OUString m_strSuffix; + + sal_Bool m_bRedIfNegative; + XFColor m_aNegativeColor; + rtl::OUString m_strNegativePrefix; + rtl::OUString m_strNegativeSuffix; +}; + +inline void XFNumberStyle::SetDecimalDigits(sal_Int32 decimal) +{ + m_nDecimalDigits = decimal; +} + +inline void XFNumberStyle::SetMinInteger(sal_Int32 integer) +{ + m_nMinInteger = integer; +} + +inline void XFNumberStyle::SetMinExponent(sal_Int32 exponent) +{ + m_nMinExponent = exponent; +} + +inline void XFNumberStyle::SetNegativeStyle(rtl::OUString prefix, rtl::OUString suffix, const XFColor& color) +{ + m_bRedIfNegative = sal_True; + m_aNegativeColor = color; + m_strNegativePrefix = prefix; + m_strNegativeSuffix = suffix; +} + +inline void XFNumberStyle::SetGroup(sal_Bool group) +{ + m_bGroup = group; +} + +inline void XFNumberStyle::SetColor(const XFColor& color) +{ + m_aColor = color; +} + +inline void XFNumberStyle::SetNumberType(enumXFNumberType type) +{ + m_eType = type; +} + +inline void XFNumberStyle::SetPrefix(rtl::OUString prefix) +{ + m_strPrefix = prefix; +} + +inline void XFNumberStyle::SetSurfix(rtl::OUString surfix) +{ + m_strSuffix = surfix; +} + +inline void XFNumberStyle::SetCurrencySymbol(sal_Bool post, rtl::OUString symbol, sal_Bool bShowSpace) +{ + m_bCurrencySymbolPost = post; + m_strCurrencySymbol = symbol; + + if( bShowSpace ) + { + if( post ) + m_strCurrencySymbol = A2OUSTR(" ") + m_strCurrencySymbol; + else + m_strCurrencySymbol += A2OUSTR(" "); + } +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfnumfmt.hxx b/lotuswordpro/source/filter/xfilter/xfnumfmt.hxx new file mode 100644 index 000000000000..496020fc6f6d --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfnumfmt.hxx @@ -0,0 +1,153 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Number format. a),A),i),1),(1) + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-17 create this file. + ************************************************************************/ + +#ifndef _XFNUMFMT_HXX +#define _XFNUMFMT_HXX + +#include "xfglobal.hxx" +#include "ixfproperty.hxx" + +/** + * @brief + * Bullet number format. + */ +class XFNumFmt : public IXFProperty +{ +public: + XFNumFmt() + { + m_nStartValue = 0; + } + +public: + /********************************************************************** + * @descr: set the prefix of the number format,that the '(' of output + (1 item1 + (2 item2 + * @param: prefix + *********************************************************************/ + void SetPrefix(rtl::OUString prefix) + { + m_strPrefix = prefix; + } + + /********************************************************************** + * @descr: set the suffix of the number format,that the ')' of output + 1) item1 + 2) item2 + * @param: prefix + *********************************************************************/ + void SetSuffix(rtl::OUString suffix) + { + m_strSuffix = suffix; + } + + /********************************************************************** + * @descr: set the display value. ie. if you set format to '1',then + the ouput would be: + 1 item1 + 2 item2 + or if you set the format to 'a', then the output would be: + a item1 + b item2 + some sepecial, if you set the format to a sequence,ie. "һ,,,..." + the output would be: + һ item1 + item2 + item3 + + Of cource, for unordered-list, you can also set the format to + be a bullet char,ie: + '','','','','', + * @param: prefix + *********************************************************************/ + void SetFormat(rtl::OUString format) + { + m_strFormat = format; + } + + void SetStartValue(sal_Int16 start) + { + m_nStartValue = start; + } + + virtual void ToXml(IXFStream *pStrm) + { + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + if( m_strPrefix.getLength() > 0 ) + pAttrList->AddAttribute( A2OUSTR("style:num-prefix"), m_strPrefix ); + if( m_strSuffix.getLength() > 0 ) + pAttrList->AddAttribute( A2OUSTR("style:num-suffix"), m_strSuffix ); + pAttrList->AddAttribute( A2OUSTR("style:num-format"), m_strFormat ); + if( m_nStartValue != 0 ) + pAttrList->AddAttribute( A2OUSTR("text:start-value"), Int16ToOUString(m_nStartValue) ); + } +private: + rtl::OUString m_strPrefix; + rtl::OUString m_strSuffix; + rtl::OUString m_strFormat; + sal_Int16 m_nStartValue; +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfofficemeta.cxx b/lotuswordpro/source/filter/xfilter/xfofficemeta.cxx new file mode 100644 index 000000000000..9c1d3bd0a6dd --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfofficemeta.cxx @@ -0,0 +1,150 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Implemention file for Meta data,pls reference to the header file. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-26 create this file. + * 2004-01-05 it works now. + ************************************************************************/ +#include "xfofficemeta.hxx" +#include "ixfstream.hxx" +#include "ixfattrlist.hxx" + +void XFOfficeMeta::SetGenerator(rtl::OUString generator) +{ + m_strGenerator = generator; +} + +void XFOfficeMeta::SetTitle(rtl::OUString title) +{ + m_strTitle = title; +} + +void XFOfficeMeta::SetCreator(rtl::OUString creator) +{ + m_strCreator = creator; +} +void XFOfficeMeta::SetDescription(rtl::OUString dsr) +{ + m_strDsr = dsr; +} +void XFOfficeMeta::SetKeywords(rtl::OUString keywords) +{ + m_strKeywords = keywords; +} +void XFOfficeMeta::SetCreationTime(rtl::OUString crtime) +{ + m_strCrtime = crtime; +} +void XFOfficeMeta::SetLastTime(rtl::OUString lstime) +{ + m_strLstime = lstime; +} +void XFOfficeMeta::SetEditTime(rtl::OUString edtime) +{ + m_strEdtime = edtime; +} +void XFOfficeMeta::ToXml(IXFStream *pStream) +{ + IXFAttrList *pAttrList = pStream->GetAttrList(); + + pAttrList->Clear(); + pStream->StartElement( A2OUSTR("office:meta") ); + + //generator: + pStream->StartElement( A2OUSTR("meta:generator") ); + pStream->Characters( m_strGenerator ); + pStream->EndElement( A2OUSTR("meta:generator") ); + + //title + pStream->StartElement( A2OUSTR("dc:title") ); + pStream->Characters( m_strTitle ); + pStream->EndElement( A2OUSTR("dc:title") ); + + //keywords + pStream->StartElement( A2OUSTR("meta:keywords") ); + pStream->StartElement( A2OUSTR("meta:keyword") ); + pStream->Characters( m_strKeywords ); + pStream->EndElement( A2OUSTR("meta:keyword") ); + pStream->EndElement( A2OUSTR("meta:keywords") ); + + //creation time + pStream->StartElement( A2OUSTR("meta:creation-date") ); + pStream->Characters( m_strCrtime); + pStream->EndElement( A2OUSTR("meta:creation-date") ); + + //last revision time + pStream->StartElement( A2OUSTR("dc:date") ); + pStream->Characters( m_strLstime); + pStream->EndElement( A2OUSTR("dc:date") ); + //total edit time + pStream->StartElement( A2OUSTR("meta:editing-duration") ); + pStream->Characters( m_strEdtime); + pStream->EndElement( A2OUSTR("meta:editing-duration") ); + + //description + pStream->StartElement( A2OUSTR("dc:description") ); + pStream->Characters( m_strDsr ); + pStream->EndElement( A2OUSTR("dc:description") ); + //creator + pStream->StartElement( A2OUSTR("meta:initial-creator") ); + pStream->Characters( m_strCreator ); + pStream->EndElement( A2OUSTR("meta:initial-creator") ); + + pStream->EndElement( A2OUSTR("office:meta") ); +} diff --git a/lotuswordpro/source/filter/xfilter/xfofficemeta.hxx b/lotuswordpro/source/filter/xfilter/xfofficemeta.hxx new file mode 100644 index 000000000000..26a465dcde5c --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfofficemeta.hxx @@ -0,0 +1,97 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Meta info for the full document. + * You can see this by click: File->Properties. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-26 create this file. + ************************************************************************/ +#ifndef _XFOFFICEMETA_HXX +#define _XFOFFICEMETA_HXX + +#include "xfglobal.hxx" + +class XFOfficeMeta : public IXFObject +{ +public: + XFOfficeMeta(){}; + virtual ~XFOfficeMeta(){}; + + void SetGenerator(rtl::OUString generator); + void SetTitle(rtl::OUString title); + void SetCreator(rtl::OUString creator); + void SetDescription(rtl::OUString dsr); + void SetKeywords(rtl::OUString keywords); + void SetCreationTime(rtl::OUString crtime); + void SetLastTime(rtl::OUString lstime); + void SetEditTime(rtl::OUString edtime); + + virtual void ToXml(IXFStream *pStream); +private: + rtl::OUString m_strGenerator; + rtl::OUString m_strTitle; + rtl::OUString m_strCreator; + rtl::OUString m_strDsr; + rtl::OUString m_strKeywords; + rtl::OUString m_strCrtime; + rtl::OUString m_strLstime; + rtl::OUString m_strEdtime; + +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfoleobj.cxx b/lotuswordpro/source/filter/xfilter/xfoleobj.cxx new file mode 100644 index 000000000000..63b4706196e1 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfoleobj.cxx @@ -0,0 +1,118 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * Change History + 2005-02-25 Created + ************************************************************************/ +#include "xfoleobj.hxx" +#include "xfbase64.hxx" + +XFOleObject::XFOleObject() +{ +} + +void XFOleObject::SetOleData(sal_uInt8 *buf, int len) +{ + m_strData = XFBase64::Encode(buf, len); +} + +void XFOleObject::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + if( GetStyleName().getLength() ) + pAttrList->AddAttribute( A2OUSTR("draw:style-name"), GetStyleName() ); + + assert(m_strName.getLength()>0); //name should not be null. + if( m_strName.getLength() ) + pAttrList->AddAttribute( A2OUSTR("draw:name"), m_strName ); + //anchor type: + switch( m_eAnchor ) + { + case enumXFAnchorPara: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("paragraph") ); + break; + case enumXFAnchorPage: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("page") ); + pAttrList->AddAttribute( A2OUSTR("text:anchor-page-number"), Int32ToOUString(m_nAnchorPage) ); + break; + case enumXFAnchorChar: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("char") ); + break; + case enumXFAnchorAsChar: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("as-char") ); + break; + case enumXFAnchorFrame: + pAttrList->AddAttribute( A2OUSTR("text:anchor-type"), A2OUSTR("frame") ); + break; + } + pAttrList->AddAttribute( A2OUSTR("svg:x"), DoubleToOUString(m_aRect.GetX()) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("svg:y"), DoubleToOUString(m_aRect.GetY()) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("svg:width"), DoubleToOUString(m_aRect.GetWidth()) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("svg:height"), DoubleToOUString(m_aRect.GetHeight()) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("draw:z-index"), Int32ToOUString(m_nZIndex) ); + + if( m_strNextLink.getLength() > 0 ) + pAttrList->AddAttribute( A2OUSTR("draw:chain-next-name"), m_strNextLink ); + + pStrm->StartElement( A2OUSTR("draw:object-ole") ); + + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("office:binary-data") ); + pStrm->Characters(m_strData); + pStrm->EndElement( A2OUSTR("office:binary-data") ); + + pStrm->EndElement( A2OUSTR("draw:object-ole") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfoleobj.hxx b/lotuswordpro/source/filter/xfilter/xfoleobj.hxx new file mode 100644 index 000000000000..8860d814e866 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfoleobj.hxx @@ -0,0 +1,89 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * Change History + 2005-02-25 Created + ************************************************************************/ +#ifndef _XFOLEOBJ_HXX +#define _XFOLEOBJ_HXX + +#include "xfframe.hxx" + +/** + * @brief + * Ole object. + * Ole object is a frame object, it inherits all properties of frame obejct. + */ +class XFOleObject : public XFFrame +{ +public: + XFOleObject(); + +public: + /** + * @descr Set ole object data. The data will be base64 encoded before sent to SODC. + */ + void SetOleData(sal_uInt8 *buf, int len); + + /** + * @descr output ole obejct. + */ + virtual void ToXml(IXFStream *pStrm); + +private: + rtl::OUString m_strData; +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfoutlinestyle.cxx b/lotuswordpro/source/filter/xfilter/xfoutlinestyle.cxx new file mode 100644 index 000000000000..f57e2d72507e --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfoutlinestyle.cxx @@ -0,0 +1,131 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Outline style for the full document. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-02-2 create and implements. + ************************************************************************/ +#include "xfoutlinestyle.hxx" + +XFOutlineLevelStyle::XFOutlineLevelStyle() +{ + m_nLevel = 0; + m_fIndent = 0; + m_fMinLabelWidth = 0; + m_fMinLabelDistance = 0; + m_eAlign = enumXFAlignNone; + m_pNumFmt = NULL; +} + +XFOutlineLevelStyle::~XFOutlineLevelStyle() +{ + if( m_pNumFmt ) + delete m_pNumFmt; +} + +void XFOutlineLevelStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + assert(m_nLevel>0); + pAttrList->AddAttribute( A2OUSTR("text:level"), Int32ToOUString(m_nLevel) ); + if( GetStyleName().getLength() > 0 ) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), GetStyleName() ); + if( m_pNumFmt ) + m_pNumFmt->ToXml(pStrm); + else + pAttrList->AddAttribute( A2OUSTR("style:num-format"), A2OUSTR("") ); + pStrm->StartElement( A2OUSTR("text:outline-level-style") ); + + pAttrList->Clear(); + if( m_fIndent ) + pAttrList->AddAttribute( A2OUSTR("text:space-before"), DoubleToOUString(m_fIndent) + A2OUSTR("cm") ); + if( m_fMinLabelWidth ) + pAttrList->AddAttribute( A2OUSTR("text:min-label-width"), DoubleToOUString(m_fMinLabelWidth) + A2OUSTR("cm") ); + if( m_fMinLabelDistance ) + pAttrList->AddAttribute( A2OUSTR("text:min-label-distance"), DoubleToOUString(m_fMinLabelDistance) + A2OUSTR("cm") ); + if( enumXFAlignNone != m_eAlign ) + pAttrList->AddAttribute( A2OUSTR("fo:text-align"), GetAlignName(m_eAlign) ); + pStrm->StartElement( A2OUSTR("style:properties") ); + pStrm->EndElement( A2OUSTR("style:properties") ); + + pStrm->EndElement( A2OUSTR("text:outline-level-style") ); +} + +XFOutlineStyle::XFOutlineStyle() +{ + for( int i=0; i<10; i++ ) + m_aLevels[i].SetLevel(i+1); +} + +enumXFStyle XFOutlineStyle::GetStyleFamily() +{ + return enumXFStyleOutline; +} + +void XFOutlineStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pStrm->StartElement( A2OUSTR("text:outline-style") ); + for( int i=0; i<10; i++ ) + m_aLevels[i].ToXml(pStrm); + pStrm->EndElement( A2OUSTR("text:outline-style") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfoutlinestyle.hxx b/lotuswordpro/source/filter/xfilter/xfoutlinestyle.hxx new file mode 100644 index 000000000000..d3853397efdc --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfoutlinestyle.hxx @@ -0,0 +1,191 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Outline style for the full document. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-02-2 create and implements. + ************************************************************************/ +#ifndef _XFOUTLINESTYLE_HXX +#define _XFOUTLINESTYLE_HXX + +#include "xfstyle.hxx" +#include "xfnumfmt.hxx" + +class XFNumFmt; +class XFOutlineLevelStyle : public XFStyle +{ +public: + XFOutlineLevelStyle(); + + virtual ~XFOutlineLevelStyle(); + +public: + void SetNumFmt(XFNumFmt& fmt); + + void SetLevel(sal_Int16 level); + + void SetIndent(double indent); + + void SetMinLabelWidth(double labelWidth); + + void SetMinLabelDistance(double distance); + + void SetTextAlign(enumXFAlignType align); + + virtual void ToXml(IXFStream *pStrm); +private: + XFNumFmt *m_pNumFmt; + sal_Int16 m_nLevel; + double m_fIndent; + double m_fMinLabelWidth; + double m_fMinLabelDistance; + enumXFAlignType m_eAlign; +}; + +class XFOutlineStyle : public XFStyle +{ +public: + XFOutlineStyle(); + +public: + void SetNumFmt(sal_Int32 level, XFNumFmt& fmt); + + void SetIndent(sal_Int32 level, double indent); + + void SetMinLabelWidth(sal_Int32 level, double labelWidth); + + void SetMinLabelDistance(sal_Int32 level, double distance); + + void SetTextAlign(sal_Int32 level, enumXFAlignType align); + + virtual enumXFStyle GetStyleFamily(); + + virtual void ToXml(IXFStream *pStrm); + +private: + XFOutlineLevelStyle m_aLevels[10]; +}; + + +// +//XFOutlineLevelStyle: +// +inline void XFOutlineLevelStyle::SetNumFmt(XFNumFmt& fmt) +{ + m_pNumFmt = new XFNumFmt(fmt); +} + +inline void XFOutlineLevelStyle::SetLevel(sal_Int16 level) +{ + m_nLevel = level; +} + +inline void XFOutlineLevelStyle::SetIndent(double indent) +{ + m_fIndent = indent; +} + +inline void XFOutlineLevelStyle::SetMinLabelWidth(double width) +{ + m_fMinLabelWidth = width; +} + +inline void XFOutlineLevelStyle::SetMinLabelDistance(double distance) +{ + m_fMinLabelDistance = distance; +} + +inline void XFOutlineLevelStyle::SetTextAlign(enumXFAlignType align) +{ + m_eAlign = align; +} + +// +//XFOutlineStyle: +// +inline void XFOutlineStyle::SetNumFmt(sal_Int32 level, XFNumFmt& fmt) +{ + assert(level>=1&&level<=10); + m_aLevels[level].SetNumFmt(fmt); +} + +inline void XFOutlineStyle::SetIndent(sal_Int32 level, double indent) +{ + assert(level>=1&&level<=10); + m_aLevels[level].SetIndent(indent); +} + +inline void XFOutlineStyle::SetMinLabelWidth(sal_Int32 level, double width) +{ + assert(level>=1&&level<=10); + m_aLevels[level].SetMinLabelWidth(width); +} + +inline void XFOutlineStyle::SetMinLabelDistance(sal_Int32 level, double distance) +{ + assert(level>=1&&level<=10); + m_aLevels[level].SetMinLabelDistance(distance); +} + +inline void XFOutlineStyle::SetTextAlign(sal_Int32 level, enumXFAlignType align) +{ + assert(level>=1&&level<=10); + m_aLevels[level].SetTextAlign(align); +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfpadding.hxx b/lotuswordpro/source/filter/xfilter/xfpadding.hxx new file mode 100644 index 000000000000..7772c8b3c508 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfpadding.hxx @@ -0,0 +1,210 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Padding for paragraph. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-28 move some structure out of this file. + ************************************************************************/ +#ifndef _XFPADDING_HXX +#define _XFPADDING_HXX + +#include "xfglobal.hxx" +#include "ixfproperty.hxx" + +#define XFPADDING_FLAG_LEFT 0X00000001 +#define XFPADDING_FLAG_RIGHT 0X00000002 +#define XFPADDING_FLAG_TOP 0X00000004 +#define XFPADDING_FLAG_BOTTOM 0X00000008 + +/** + * @brief + * Padings for paragraph,frame,... + */ +class XFPadding : public IXFProperty +{ +public: + XFPadding(); + +public: + /** + * @descr Reset all values. + */ + void Reset(); + + /** + * @descr Set padding left. + */ + void SetLeft(double left); + + /** + * @descr Set padding right. + */ + void SetRight(double right); + + /** + * @descr Set padding top. + */ + void SetTop(double top); + + /** + * @descr Set padding bottom. + */ + void SetBottom(double bottom); + + /** + * @descr Output padding properties. + */ + virtual void ToXml(IXFStream *pStrm); + + friend bool operator==(XFPadding& p1, XFPadding& p2); + friend bool operator!=(XFPadding& p1, XFPadding& p2); +private: + int m_nFlag; + double m_fLeft; + double m_fRight; + double m_fTop; + double m_fBottom; +}; + + +inline XFPadding::XFPadding() +{ + Reset(); +} + +inline void XFPadding::Reset() +{ + m_nFlag = 0; + m_fLeft = 0; + m_fRight = 0; + m_fTop = 0; + m_fBottom = 0; +} + +inline void XFPadding::SetLeft(double left) +{ + m_fLeft = left; + m_nFlag |= XFPADDING_FLAG_LEFT; +} + +inline void XFPadding::SetRight(double right) +{ + m_fRight = right; + m_nFlag |= XFPADDING_FLAG_RIGHT; +} + +inline void XFPadding::SetTop(double top) +{ + m_fTop = top; + m_nFlag |= XFPADDING_FLAG_TOP; +} + +inline void XFPadding::SetBottom(double bottom) +{ + m_fBottom = bottom; + m_nFlag |= XFPADDING_FLAG_BOTTOM; +} + +inline void XFPadding::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + if( (m_fLeft == m_fRight) && (m_fLeft == m_fTop) && (m_fLeft== m_fBottom ) && m_nFlag == 0x00000015 ) + { + pAttrList->AddAttribute( A2OUSTR("fo:padding"), DoubleToOUString(m_fLeft) + A2OUSTR("cm") ); + return; + } + //margin left: + if( m_nFlag&XFPADDING_FLAG_LEFT ) + { + pAttrList->AddAttribute( A2OUSTR("fo:padding-left"), DoubleToOUString(m_fLeft) + A2OUSTR("cm") ); + } + //margin right: + if( m_nFlag&XFPADDING_FLAG_RIGHT ) + { + pAttrList->AddAttribute(A2OUSTR("fo:padding-right"), DoubleToOUString(m_fRight) + A2OUSTR("cm") ); + } + //margin top: + if( m_nFlag&XFPADDING_FLAG_TOP ) + { + pAttrList->AddAttribute(A2OUSTR("fo:padding-top"), DoubleToOUString(m_fTop) + A2OUSTR("cm") ); + } + //margin bottom: + if( m_nFlag&XFPADDING_FLAG_BOTTOM ) + { + pAttrList->AddAttribute(A2OUSTR("fo:padding-bottom"), DoubleToOUString(m_fBottom) + A2OUSTR("cm") ); + } +} + +inline bool operator==(XFPadding& p1, XFPadding& p2) +{ + return ( + (p1.m_nFlag == p2.m_nFlag) && + (p1.m_fLeft == p2.m_fLeft) && + (p1.m_fRight == p2.m_fRight) && + (p1.m_fTop == p2.m_fTop) && + (p1.m_fBottom == p2.m_fBottom) + ); +} + +inline bool operator!=(XFPadding& p1, XFPadding& p2) +{ + return !(p1==p2); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfpagecount.hxx b/lotuswordpro/source/filter/xfilter/xfpagecount.hxx new file mode 100644 index 000000000000..ab93caedd3aa --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfpagecount.hxx @@ -0,0 +1,89 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Page number field. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-31 create this file. + ************************************************************************/ +#ifndef _XFPAGECOUNT_HXX +#define _XFPAGECOUNT_HXX + +#include "xfglobal.hxx" +#include "xfcontent.hxx" +#include "xfnumfmt.hxx" + +/** + * @brief + * Page count field. + */ +class XFPageCount : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +inline void XFPageCount::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pStrm->StartElement( A2OUSTR("text:page-count") ); + pStrm->EndElement( A2OUSTR("text:page-count") ); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfpagemaster.cxx b/lotuswordpro/source/filter/xfilter/xfpagemaster.cxx new file mode 100644 index 000000000000..12cea2012e72 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfpagemaster.cxx @@ -0,0 +1,300 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Page master used bye XFMasterPage. + * It is the real object to define header and footer of pages. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-17 create this file. + ************************************************************************/ +#include "xfpagemaster.hxx" +#include "ixfstream.hxx" +#include "ixfattrlist.hxx" +#include "xfborders.hxx" +#include "xfshadow.hxx" +#include "xfcolumns.hxx" +#include "xfheaderstyle.hxx" +#include "xffooterstyle.hxx" +#include "xfbgimage.hxx" + +XFPageMaster::XFPageMaster() +{ + m_fPageWidth = 0; + m_fPageHeight = 0; + m_eUsage = enumXFPageUsageNone; + m_eTextDir = enumXFTextDirNone; + m_bPrintOrient = sal_True; + m_pBorders = NULL; + m_pShadow = NULL; + m_pColumns = NULL; + m_pBGImage = NULL; + + m_pHeaderStyle = NULL; + m_pFooterStyle = NULL; + + m_eSepAlign = enumXFAlignNone; + m_fSepWidth = 0; + m_aSepColor = 0; + m_fSepSpaceAbove = 0; + m_fSepSpaceBelow = 0; + m_nSepLengthPercent = 0; +} + +XFPageMaster::~XFPageMaster() +{ + if( m_pBorders ) + delete m_pBorders; + if( m_pShadow ) + delete m_pShadow; + if( m_pColumns ) + delete m_pColumns; + if( m_pHeaderStyle ) + delete m_pHeaderStyle; + if( m_pFooterStyle ) + delete m_pFooterStyle; + if( m_pBGImage ) + delete m_pBGImage; +} + +enumXFStyle XFPageMaster::GetStyleFamily() +{ + return enumXFStylePageMaster; +} + +void XFPageMaster::SetPageWidth(double width) +{ + m_fPageWidth = width; +} + +void XFPageMaster::SetPageHeight(double height) +{ + m_fPageHeight = height; +} + +void XFPageMaster::SetMargins(double left, double right,double top, double bottom) +{ + if( left != -1 ) + m_aMargin.SetLeft(left); + if( right != -1 ) + m_aMargin.SetRight(right); + if( top != -1 ) + m_aMargin.SetTop(top); + if( bottom != -1 ) + m_aMargin.SetBottom(bottom); +} + +void XFPageMaster::SetBorders(XFBorders *pBorders) +{ + if( m_pBorders && (pBorders != m_pBorders) ) + delete m_pBorders; + m_pBorders = pBorders; +} + +void XFPageMaster::SetShadow(XFShadow *pShadow) +{ + if( m_pShadow && (pShadow != m_pShadow) ) + delete m_pShadow; + m_pShadow = pShadow; +} + +void XFPageMaster::SetBackColor(XFColor color) +{ + m_aBackColor = color; +} + +void XFPageMaster::SetBackImage(XFBGImage *image) +{ + if( m_pBGImage ) + delete m_pBGImage; + m_pBGImage = image; +} + +void XFPageMaster::SetColumns(XFColumns *pColumns) +{ + if( m_pColumns && (pColumns != m_pColumns) ) + delete m_pColumns; + m_pColumns = pColumns; +} + + void XFPageMaster::SetHeaderStyle(XFHeaderStyle *pHeaderStyle) +{ + if( m_pHeaderStyle && (pHeaderStyle != m_pHeaderStyle) ) + delete m_pHeaderStyle; + m_pHeaderStyle = pHeaderStyle; +} + +void XFPageMaster::SetFooterStyle(XFFooterStyle *pFooterStyle) +{ + if( m_pFooterStyle && (pFooterStyle != m_pFooterStyle) ) + delete m_pFooterStyle; + m_pFooterStyle = pFooterStyle; +} + +void XFPageMaster::SetFootNoteSeparator( + enumXFAlignType align, + double width, + sal_Int32 lengthPercent, + double spaceAbove, + double spaceBelow, + XFColor color + ) +{ + m_eSepAlign = align; + m_fSepWidth = width; + m_nSepLengthPercent = lengthPercent; + m_fSepSpaceAbove = spaceAbove; + m_fSepSpaceBelow = spaceBelow; + m_aSepColor = color; +} + +/** + * + <style:page-master style:name="pm1"> + <style:properties fo:page-width="20.999cm" fo:page-height="29.699cm" style:num-format="1" + style:print-orientation="portrait" fo:margin-top="1.249cm" fo:margin-bottom="1.249cm" + fo:margin-left="3.175cm" fo:margin-right="3.175cm" style:writing-mode="lr-tb" + style:layout-grid-color="#c0c0c0" style:layout-grid-lines="42" + style:layout-grid-base-height="0.494cm" style:layout-grid-ruby-height="0.141cm" + style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" + style:layout-grid-display="false" style:footnote-max-height="0cm"> + <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" + style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> + </style:properties> + <style:header-style> + <style:properties fo:min-height="1.291cm" fo:margin-bottom="0.792cm" style:dynamic-spacing="true"/> + </style:header-style> + <style:footer-style> + <style:properties fo:min-height="1.291cm" fo:margin-top="0.792cm" style:dynamic-spacing="true"/> + </style:footer-style> + </style:page-master> + + */ +void XFPageMaster::ToXml(IXFStream *pStream) +{ + IXFAttrList *pAttrList = pStream->GetAttrList(); + + pAttrList->Clear(); + pAttrList->AddAttribute(A2OUSTR("style:name"),GetStyleName()); + + if( m_eUsage != enumXFPageUsageNone ) + pAttrList->AddAttribute(A2OUSTR("style:page-usage"), GetPageUsageName(m_eUsage)); + + pStream->StartElement( A2OUSTR("style:page-master") ); + + //style:properties + pAttrList->Clear(); + if( m_fPageWidth != 0 ) + pAttrList->AddAttribute( A2OUSTR("fo:page-width"), DoubleToOUString(m_fPageWidth) + A2OUSTR("cm") ); + if( m_fPageHeight != 0 ) + pAttrList->AddAttribute( A2OUSTR("fo:page-height"), DoubleToOUString(m_fPageHeight) + A2OUSTR("cm") ); + + m_aMargin.ToXml(pStream); + + if( m_bPrintOrient ) + pAttrList->AddAttribute( A2OUSTR("style:print-orientation"), A2OUSTR("portrait") ); + else + pAttrList->AddAttribute( A2OUSTR("style:print-orientation"), A2OUSTR("landscape") ); + + if( m_pBorders ) + m_pBorders->ToXml(pStream); + if( m_pShadow ) + pAttrList->AddAttribute( A2OUSTR("style:shadow"), m_pShadow->ToString() ); + + if( m_aBackColor.IsValid() ) + pAttrList->AddAttribute( A2OUSTR("fo:background-color"), m_aBackColor.ToString() ); + + //text directory + if( m_eTextDir != enumXFTextDirNone ) + pAttrList->AddAttribute( A2OUSTR("style:writing-mode"), GetTextDirName(m_eTextDir) ); + + pStream->StartElement( A2OUSTR("style:properties") ); + if( m_pColumns ) + m_pColumns->ToXml(pStream); + + if( m_pBGImage ) + m_pBGImage->ToXml(pStream); + + if( m_eSepAlign || m_nSepLengthPercent>0 || m_fSepSpaceAbove>0 || m_fSepSpaceBelow>0 ) + { + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("style:width"), DoubleToOUString(m_fSepWidth) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("style:distance-before-sep"), DoubleToOUString(m_fSepSpaceAbove) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("style:distance-after-sep"), DoubleToOUString(m_fSepSpaceBelow) + A2OUSTR("cm") ); + pAttrList->AddAttribute( A2OUSTR("style:color"), m_aSepColor.ToString() ); + if( m_eSepAlign == enumXFAlignStart ) + pAttrList->AddAttribute( A2OUSTR("style:adjustment"), A2OUSTR("left") ); + else if( m_eSepAlign == enumXFAlignCenter ) + pAttrList->AddAttribute( A2OUSTR("style:adjustment"), A2OUSTR("center") ); + else if( m_eSepAlign == enumXFAlignEnd ) + pAttrList->AddAttribute( A2OUSTR("style:adjustment"), A2OUSTR("right") ); + pAttrList->AddAttribute( A2OUSTR("style:rel-width"), Int32ToOUString(m_nSepLengthPercent) + A2OUSTR("%") ); + pStream->StartElement( A2OUSTR("style:footnote-sep") ); + pStream->EndElement( A2OUSTR("style:footnote-sep") ); + } + + pStream->EndElement( A2OUSTR("style:properties") ); + + //header style: + if( m_pHeaderStyle ) + m_pHeaderStyle->ToXml(pStream); + //footer style: + if( m_pFooterStyle ) + m_pFooterStyle->ToXml(pStream); + + pStream->EndElement( A2OUSTR("style:page-master") ); + +} diff --git a/lotuswordpro/source/filter/xfilter/xfpagemaster.hxx b/lotuswordpro/source/filter/xfilter/xfpagemaster.hxx new file mode 100644 index 000000000000..22c132db1d38 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfpagemaster.hxx @@ -0,0 +1,168 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Page master used bye XFMasterPage. + * It is the real object to define header and footer of pages. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-17 create this file. + ************************************************************************/ +#ifndef _XFPAGEMASTER_HXX +#define _XFPAGEMASTER_HXX + +#include "xfglobal.hxx" +#include "xfstyle.hxx" +#include "xfcolor.hxx" +#include "xfmargins.hxx" + +class XFBorders; +class XFShadow; +class XFColumns; +class XFHeaderStyle; +class XFFooterStyle; +class XFBGImage; + +class XFPageMaster : public XFStyle +{ +public: + XFPageMaster(); + + virtual ~XFPageMaster(); + +public: + void SetPageWidth(double width); + + void SetPageHeight(double height); + + void SetMargins(double left=-1, double right=-1,double top=-1, double bottom=-1); + + void SetPageUsage(enumXFPageUsage usage); + + void SetPrintOrient(sal_Bool bUseWidth=sal_True); + + void SetBorders(XFBorders *pBorders); + + void SetShadow(XFShadow *pShadow); + + void SetBackColor(XFColor color); + + void SetBackImage(XFBGImage *image); + + void SetColumns(XFColumns *pColumns); + + void SetHeaderStyle(XFHeaderStyle *pHeaderStyle); + + void SetFooterStyle(XFFooterStyle *pFooterStyle); + + void SetTextDir(enumXFTextDir dir); + + void SetFootNoteSeparator(enumXFAlignType align = enumXFAlignStart, + double width = 0.05, + sal_Int32 lengthPercent = 25, + double spaceAbove = 0.1, + double spaceBelow = 0.1, + XFColor color=XFColor(0,0,0) + ); + + virtual enumXFStyle GetStyleFamily(); + + virtual void ToXml(IXFStream *pStream); + +private: + double m_fPageWidth; + double m_fPageHeight; + + XFMargins m_aMargin; + + enumXFPageUsage m_eUsage; + enumXFTextDir m_eTextDir; + sal_Bool m_bPrintOrient; + + XFBorders *m_pBorders; + XFShadow *m_pShadow; + XFColor m_aBackColor; + XFColumns *m_pColumns; + XFBGImage *m_pBGImage; + + XFHeaderStyle *m_pHeaderStyle; + XFFooterStyle *m_pFooterStyle; + //seperator: + enumXFAlignType m_eSepAlign; + double m_fSepWidth; + XFColor m_aSepColor; + double m_fSepSpaceAbove; + double m_fSepSpaceBelow; + sal_Int32 m_nSepLengthPercent; + +}; + +inline void XFPageMaster::SetPageUsage(enumXFPageUsage usage) +{ + this->m_eUsage = usage; +} + +inline void XFPageMaster::SetPrintOrient(sal_Bool bUseWidth) +{ + m_bPrintOrient = bUseWidth; +} + +inline void XFPageMaster::SetTextDir(enumXFTextDir dir) +{ + m_eTextDir = dir; +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfpagenumber.hxx b/lotuswordpro/source/filter/xfilter/xfpagenumber.hxx new file mode 100644 index 000000000000..5b268dbe176c --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfpagenumber.hxx @@ -0,0 +1,101 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Page number field. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-31 create this file. + ************************************************************************/ +#ifndef _XFPAGENUMBER_HXX +#define _XFPAGENUMBER_HXX + +#include "xfglobal.hxx" +#include "xfcontent.hxx" +#include "xfnumfmt.hxx" + +/** + * @brief + * Page number field. + */ +class XFPageNumber : public XFContent +{ +public: + void SetNumFmt(rtl::OUString fmt); + + virtual void ToXml(IXFStream *pStrm); + +private: + XFNumFmt m_aNumFmt; +}; + +inline void XFPageNumber::SetNumFmt(rtl::OUString fmt) +{ + m_aNumFmt.SetFormat(fmt); +} + +inline void XFPageNumber::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + m_aNumFmt.ToXml(pStrm); + pAttrList->AddAttribute( A2OUSTR("text:select-page"), A2OUSTR("current") ); + pStrm->StartElement( A2OUSTR("text:page-number") ); + pStrm->EndElement( A2OUSTR("text:page-number") ); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfparagraph.cxx b/lotuswordpro/source/filter/xfilter/xfparagraph.cxx new file mode 100644 index 000000000000..37dbd3be31ac --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfparagraph.cxx @@ -0,0 +1,122 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Paragraph object of OOo, it will output <text:p >...</text:p> element. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-26 create this file. + ************************************************************************/ +#include "xfparagraph.hxx" +#include "ixfstream.hxx" +#include "ixfattrlist.hxx" +#include "xftextcontent.hxx" + +XFParagraph::XFParagraph() +{ + +} + +XFParagraph::XFParagraph(rtl::OUString& text,rtl::OUString& style) +{ + IXFContent *pText = new XFTextContent(text); + Add(pText); + + SetStyleName(style); +} + +XFParagraph::~XFParagraph() +{ +} + +enumXFContent XFParagraph::GetContentType() +{ + return enumXFContentPara; +} + +/** + * The paragraph obejct serial function,the ouput will be like: + * <text:p> + * <text:span text:style-name="T1">text content</text:span> + * text. + * <text:span text:style-name="T1">text content</text:span> + * </text:p> + */ +void XFParagraph::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + assert(pAttrList); + + pAttrList->Clear(); + if( GetStyleName().getLength() > 0 ) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), GetStyleName() ); + pStrm->StartElement( A2OUSTR("text:p") ); + + XFContentContainer::ToXml(pStrm); + + pStrm->EndElement( A2OUSTR("text:p") ); +} + +void XFParagraph::ClearContents() +{ + Reset(); +} + +sal_Bool XFParagraph::HasContents() +{ + return GetCount()>0; +} diff --git a/lotuswordpro/source/filter/xfilter/xfparagraph.hxx b/lotuswordpro/source/filter/xfilter/xfparagraph.hxx new file mode 100644 index 000000000000..652576b6b421 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfparagraph.hxx @@ -0,0 +1,98 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Paragraph object of OOo, it will output <text:p >...</text:p> element. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-26 create this file. + ************************************************************************/ +#ifndef _XFPARAGRAPH_HXX +#define _XFPARAGRAPH_HXX + +#include "xfglobal.hxx" +#include "xfcontentcontainer.hxx" +#include <vector> + +class IXFStream; +class IXFTextSpan; + +/** + * @brief + * Paragraph object for SODC. + * You can call Add() to add text span or drawing obejcts to XFParagraph. + */ +class XFParagraph : public XFContentContainer +{ +public: + XFParagraph(); + + XFParagraph(rtl::OUString& text, rtl::OUString& style); + + virtual ~XFParagraph(); + +public: + void ClearContents(); + + sal_Bool HasContents(); + + virtual enumXFContent GetContentType(); + + virtual void ToXml(IXFStream *pStrm); + +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfparastyle.cxx b/lotuswordpro/source/filter/xfilter/xfparastyle.cxx new file mode 100644 index 000000000000..9f9f6626053c --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfparastyle.cxx @@ -0,0 +1,527 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Styles for paragraph. + * Styles for paragraph may include many style,include font,indent,margin, + * shadow,line height,and so on. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-10 create this file. + * 2005-01-20 move some structure out of this file. + ************************************************************************/ +#include "xfparastyle.hxx" +#include "xffont.hxx" +#include "xfborders.hxx" +#include "xftabstyle.hxx" +#include "xfbgimage.hxx" + +XFParaStyle::XFParaStyle() +{ + //init member variables: + m_nFlag = 0; + m_eAlignType = enumXFAlignNone; + m_eLastLineAlign = enumXFAlignNone; + m_bJustSingleWord = sal_False; + m_bKeepWithNext = sal_False; + m_nPageNumber = 0; + m_fTextIndent = 0; + + m_pFont = NULL; + m_pBorders = NULL; + m_pBGImage = NULL; + + m_nLineNumberRestart = 0; + m_bNumberLines = sal_True; + m_bNumberRight = sal_False; +} + +XFParaStyle::XFParaStyle(XFParaStyle& other) +{ + m_strParentStyleName = other.m_strParentStyleName; + m_nFlag = other.m_nFlag; + m_eAlignType = other.m_eAlignType; + m_fTextIndent = other.m_fTextIndent; + m_bNumberLines = other.m_bNumberLines; + m_nLineNumberRestart = other.m_nLineNumberRestart; + m_bNumberRight = other.m_bNumberRight; + + if( other.m_pFont ) + m_pFont = other.m_pFont; + else + m_pFont = NULL; + + if( other.m_pBorders ) + m_pBorders = new XFBorders(*other.m_pBorders); + else + m_pBorders = NULL; + m_aBackColor = other.m_aBackColor; + if( other.m_pBGImage ) + m_pBGImage = new XFBGImage(*other.m_pBGImage); + else + m_pBGImage = NULL; + + m_aShadow = other.m_aShadow; + m_aMargin = other.m_aMargin; + m_aDropcap = other.m_aDropcap; + m_aLineHeight = other.m_aLineHeight; + m_aPadding = other.m_aPadding; + m_aBreaks = other.m_aBreaks; +// m_aTabs = other.m_aTabs; + for( int i=0; i<other.m_aTabs.GetCount(); i++ ) + { + IXFStyle *pStyle = other.m_aTabs.Item(i); + if( pStyle ) + { + XFTabStyle *pTabStyle = (XFTabStyle*)(pStyle); + if( pTabStyle ) + { + XFTabStyle *pCopyStyle = new XFTabStyle(*pTabStyle); + m_aTabs.AddStyle(pCopyStyle); + } + } + } +} + +XFParaStyle& XFParaStyle::operator=(XFParaStyle& other) +{ + m_strParentStyleName = other.m_strParentStyleName; + m_nFlag = other.m_nFlag; + m_eAlignType = other.m_eAlignType; + m_fTextIndent = other.m_fTextIndent; + m_bNumberLines = other.m_bNumberLines; + m_nLineNumberRestart = other.m_nLineNumberRestart; + m_bNumberRight = other.m_bNumberRight; + + if( other.m_pFont ) + m_pFont = other.m_pFont; + else + m_pFont = NULL; + + if( other.m_pBorders ) + m_pBorders = new XFBorders(*other.m_pBorders); + else + m_pBorders = NULL; + m_aBackColor = other.m_aBackColor; + if( other.m_pBGImage ) + m_pBGImage = new XFBGImage(*other.m_pBGImage); + else + m_pBGImage = NULL; + + m_aShadow = other.m_aShadow; + m_aMargin = other.m_aMargin; + m_aDropcap = other.m_aDropcap; + m_aLineHeight = other.m_aLineHeight; + m_aPadding = other.m_aPadding; + m_aBreaks = other.m_aBreaks; + // m_aTabs = other.m_aTabs; + for( int i=0; i<other.m_aTabs.GetCount(); i++ ) + { + IXFStyle *pStyle = other.m_aTabs.Item(i); + if( pStyle ) + { + XFTabStyle *pTabStyle = (XFTabStyle*)(pStyle); + if( pTabStyle ) + { + XFTabStyle *pCopyStyle = new XFTabStyle(*pTabStyle); + m_aTabs.AddStyle(pCopyStyle); + } + } + } + + return *this; +} + +XFParaStyle::~XFParaStyle() +{ + if( m_pBorders ) + delete m_pBorders; + if( m_pBGImage ) + delete m_pBGImage; +} + +enumXFStyle XFParaStyle::GetStyleFamily() +{ + return enumXFStylePara; +} + +void XFParaStyle::SetFont(XFFont *pFont) +{ + m_pFont = pFont; +} + +void XFParaStyle::SetIndent(double indent ) +{ + m_fTextIndent = indent; +} + +void XFParaStyle::SetMargins(double left, double right, double top, double bottom) +{ + if( left != -1 ) + m_aMargin.SetLeft(left); + if( right != -1 ) + m_aMargin.SetRight(right); + if( top != -1 ) + m_aMargin.SetTop(top); + if( bottom != -1 ) + m_aMargin.SetBottom( bottom ); +} + +void XFParaStyle::SetShadow(enumXFShadowPos pos, double offset, XFColor& color) +{ + m_aShadow.SetPosition(pos); + m_aShadow.SetOffset(offset); + m_aShadow.SetColor(color); +} + +void XFParaStyle::SetBackColor(XFColor& color) +{ + m_aBackColor = color; + m_nFlag |= XFPARA_FLAG_BACKCOLOR; +} + +void XFParaStyle::SetBackImage(XFBGImage *image) +{ + if( m_pBGImage ) + delete m_pBGImage; + m_pBGImage = image; +} + +void XFParaStyle::SetBorders(XFBorders *pBorders) +{ + if( m_pBorders ) + delete m_pBorders; + m_pBorders = pBorders; +} + +void XFParaStyle::SetDropCap(sal_Int16 nLength, + sal_Int16 nLines, + double fDistance + ) +{ + assert(nLength>=1); + assert(nLines>=2); + assert(fDistance>=0); + + m_aDropcap.SetCharCount(nLength); + m_aDropcap.SetLines(nLines); + m_aDropcap.SetDistance(fDistance); +} + +void XFParaStyle::SetLineHeight(enumLHType type, double value) +{ + if( type == enumLHNone ) + { + return; + } + switch(type) + { + case enumLHHeight: + m_aLineHeight.SetHeight(value) ; + break; + case enumLHLeast: + m_aLineHeight.SetLeastHeight(value); + break; + case enumLHPercent: //perhaps i should redesign the interface here,ohm.. + m_aLineHeight.SetPercent((sal_Int32)value); + break; + case enumLHSpace: + m_aLineHeight.SetSpace(value*0.5666); //don't known why,just suspect. + break; + } +} + +void XFParaStyle::AddTabStyle(enumXFTab type, double len, sal_Unicode leader, sal_Unicode delimiter) +{ + XFTabStyle *tab = new XFTabStyle(); + tab->SetTabType(type); + tab->SetLength(len); + tab->SetLeaderChar(leader); + tab->SetDelimiter(delimiter); + m_aTabs.AddStyle(tab); +} + +/** + *Affirm whether two XFParaStyle objects are equal. + */ +sal_Bool XFParaStyle::Equal(IXFStyle *pStyle) +{ + if( this == pStyle ) + return sal_True; + if( !pStyle || pStyle->GetStyleFamily() != enumXFStylePara ) + return sal_False; + + XFParaStyle *pOther = (XFParaStyle*)(pStyle); + if( !pOther ) + return sal_False; + + if( m_nFlag != pOther->m_nFlag ) + return sal_False; + if( m_strParentStyleName != pOther->m_strParentStyleName ) + return sal_False; + if( m_strMasterPage != pOther->m_strMasterPage ) + return sal_False; + if( m_fTextIndent != pOther->m_fTextIndent ) + return sal_False; + if( m_bJustSingleWord != pOther->m_bJustSingleWord ) + return sal_False; + if( m_bKeepWithNext != pOther->m_bKeepWithNext ) + return sal_False; + //line number: + if( m_bNumberLines != pOther->m_bNumberLines ) + return sal_False; + if( m_nLineNumberRestart != pOther->m_nLineNumberRestart ) + return sal_False; + //align: + if( m_eAlignType != pOther->m_eAlignType ) + return sal_False; + //last line align: + if( m_eLastLineAlign != pOther->m_eLastLineAlign ) + return sal_False; + + //shadow: + if( m_aShadow != pOther->m_aShadow ) + return sal_False; + //margin: + if( m_aMargin != pOther->m_aMargin ) + return sal_False; + + if( m_aPadding != pOther->m_aPadding ) + return sal_False; + + //dropcap: + if( m_aDropcap != pOther->m_aDropcap ) + return sal_False; + //line height: + if( m_aLineHeight != pOther->m_aLineHeight ) + return sal_False; + //breaks: + if( m_aBreaks != pOther->m_aBreaks ) + return sal_False; + if( m_nPageNumber != pOther->m_nPageNumber ) + return sal_False; + if( m_aTabs != pOther->m_aTabs ) + return sal_False; + + //font: + if( m_pFont ) + { + if( !pOther->m_pFont ) + return sal_False; + if(*m_pFont != *pOther->m_pFont ) + return sal_False; + } + else if( pOther->m_pFont ) + return sal_False; + + //border: + if( m_pBorders ) + { + if( !pOther->m_pBorders ) + return sal_False; + if( *m_pBorders != *pOther->m_pBorders ) + return sal_False; + } + else if( pOther->m_pBorders ) + return sal_False; + + if( m_pBGImage ) + { + if( !pOther->m_pBGImage ) + return sal_False; + if( *m_pBGImage != *pOther->m_pBGImage ) + return sal_False; + } + else if( pOther->m_pBGImage ) + return sal_False;//add end + + //number right + if ( m_bNumberRight != pOther->m_bNumberRight) + return sal_False; + + return sal_True; +} + +void XFParaStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + rtl::OUString style = GetStyleName(); + + pAttrList->Clear(); + if( style.getLength() ) + pAttrList->AddAttribute(A2OUSTR("style:name"),GetStyleName()); + pAttrList->AddAttribute(A2OUSTR("style:family"), A2OUSTR("paragraph")); + if( GetParentStyleName().getLength() > 0 ) + pAttrList->AddAttribute(A2OUSTR("style:parent-style-name"),GetParentStyleName()); + + if( m_strMasterPage.getLength() > 0 ) + pAttrList->AddAttribute(A2OUSTR("style:master-page-name"),m_strMasterPage); + pStrm->StartElement(A2OUSTR("style:style")); + + //Paragraph properties: + pAttrList->Clear(); + + //text indent: + if( m_fTextIndent ) + { + pAttrList->AddAttribute(A2OUSTR("fo:text-indent"), DoubleToOUString(m_fTextIndent) + A2OUSTR("cm") ); + } + //padding: + m_aPadding.ToXml(pStrm); + //margin: + m_aMargin.ToXml(pStrm); + + //text align: + if( m_eAlignType != enumXFAlignNone ) + { + pAttrList->AddAttribute(A2OUSTR("fo:text-align"), GetAlignName(m_eAlignType) ); + } + //last line align: + if( m_eLastLineAlign != enumXFAlignNone ) + { + pAttrList->AddAttribute(A2OUSTR("fo:fo:text-align-last"), GetAlignName(m_eLastLineAlign) ); + if( m_bJustSingleWord ) + pAttrList->AddAttribute(A2OUSTR("style:justify-single-word"), A2OUSTR("true") ); + } + //line number: + if( m_bNumberLines ) + { + pAttrList->AddAttribute( A2OUSTR("text:number-lines"), A2OUSTR("true") ); + pAttrList->AddAttribute( A2OUSTR("text:line-number"), Int32ToOUString(m_nLineNumberRestart) ); + } + else + { + pAttrList->AddAttribute( A2OUSTR("text:number-lines"), A2OUSTR("false") ); + assert(m_nLineNumberRestart>0); + pAttrList->AddAttribute( A2OUSTR("text:line-number"), A2OUSTR("0") ); + } + + //shadow: + m_aShadow.ToXml(pStrm); + //borders: + if( m_pBorders ) + m_pBorders->ToXml(pStrm); + //line height: + m_aLineHeight.ToXml(pStrm); + + //background color: + if( m_nFlag&XFPARA_FLAG_BACKCOLOR && m_aBackColor.IsValid() ) + { + pAttrList->AddAttribute(A2OUSTR("fo:background-color"), m_aBackColor.ToString() ); + } + //Font properties: + if( m_pFont ) + m_pFont->ToXml(pStrm); + + //page number: + if( m_nPageNumber ) + pAttrList->AddAttribute(A2OUSTR("fo:page-number"), Int32ToOUString(m_nPageNumber) ); + //page breaks: + m_aBreaks.ToXml(pStrm); + + if( m_bKeepWithNext ) + pAttrList->AddAttribute(A2OUSTR("fo:fo:keep-with-next"), A2OUSTR("true") ); + + pStrm->StartElement(A2OUSTR("style:properties")); + + //dropcap: + m_aDropcap.ToXml(pStrm); + + //tabs: + if( m_aTabs.GetCount() > 0 ) + { + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("style:tab-stops") ); + m_aTabs.ToXml(pStrm); + pStrm->EndElement( A2OUSTR("style:tab-stops") ); + } + + //background color: + if( m_pBGImage ) + m_pBGImage->ToXml(pStrm); + + pStrm->EndElement(A2OUSTR("style:properties")); + + pStrm->EndElement(A2OUSTR("style:style")); +} + +XFDefaultParaStyle::XFDefaultParaStyle() +{ + m_fTabDistance = 1.28; +} + +enumXFStyle XFDefaultParaStyle::GetStyleFamily() +{ + return enumXFStyleDefaultPara; +} + + +void XFDefaultParaStyle::ToXml(IXFStream * pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + pAttrList->AddAttribute(A2OUSTR("style:family"), A2OUSTR("paragraph")); + pStrm->StartElement(A2OUSTR("style:default-style")); + + //Paragraph properties: + pAttrList->Clear(); + + pAttrList->AddAttribute(A2OUSTR("style:tab-stop-distance"), DoubleToOUString(m_fTabDistance) + A2OUSTR("cm") ); + + pStrm->StartElement(A2OUSTR("style:properties")); + pStrm->EndElement(A2OUSTR("style:properties")); + pStrm->EndElement(A2OUSTR("style:default-style")); +} diff --git a/lotuswordpro/source/filter/xfilter/xfparastyle.hxx b/lotuswordpro/source/filter/xfilter/xfparastyle.hxx new file mode 100644 index 000000000000..deafd7d7ec58 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfparastyle.hxx @@ -0,0 +1,364 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Styles for paragraph. + * Styles for paragraph may include many style,include font,indent,margin, + * shadow,line height,and so on. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-10 create this file. + * 2005-01-20 move some structure out of this file. + ************************************************************************/ +#ifndef _XFPARASTYLE_HXX +#define _XFPARASTYLE_HXX + +#include "xfglobal.hxx" +#include "xfstyle.hxx" +#include "xfcolor.hxx" +#include "xfmargins.hxx" +#include "xfbreaks.hxx" +#include "xfpadding.hxx" +#include "xfshadow.hxx" +#include "xfdropcap.hxx" +#include "xfstylecont.hxx" +#include "xflineheight.hxx" + +#define XFPARA_FLAG_FONT 0X00000001 +#define XFPARA_FLAG_DROPCAP 0X00000002 +#define XFPARA_FLAG_BACKCOLOR 0X00000004 + +class XFFont; +class XFBorders; +class XFBGImage; + +/** + * @brief + * Style object for aragraph. + */ +class XFParaStyle : public XFStyle +{ +public: + XFParaStyle(); + + XFParaStyle(XFParaStyle& other); + + XFParaStyle& operator=(XFParaStyle& other); + + virtual ~XFParaStyle(); + +public: + /** + * @descr Set layout for the paragraph.When such property was setted, this paragraph will + * start at an new page. + */ + void SetMasterPage(rtl::OUString master); + + rtl::OUString GetMasterPage(); + + /** + * @descr set the paragraph defaut font. + * @param font font obejct to be setted.Font object are deleted by font-factory,so + * dont't delete it in the destructure function of para style. + */ + void SetFont(XFFont *font); + + /** + * @descr get the font object. + */ + XFFont* GetFont(){ return m_pFont; } + + /** + * @descr Set the indent of the paragraph.This is the indent for + the first line. + * @param indent value of the first-line indent. + */ + void SetIndent(double indent ); + + /** + * @descr Set line number style. + */ + void SetLineNumber(sal_Bool show, sal_Int32 restart=1); + /** + * @descr Set the pading of the paragraph.This is the distance + between the border and the top of the text. + * @param indent value of the padding. + */ + void SetPadding(double left, double right = -1, double top = -1, double bottom = -1); + + /** + * @descr Set the Margins of the paragraph. + * @param -1: don't change. + other: set value. + */ + void SetMargins(double left, double right=-1,double top=-1, double bottom=-1); + + /** + * @descr Set alignment property of the paragraph. + * @param eAlign alignment type,left,right,center or justify. + */ + void SetAlignType(enumXFAlignType eAlign); + + enumXFAlignType GetAlighType(); + + + /** + * @descr Set last line alignment property of the paragraph. + * @param eAlign alignment type,left,right,center or justify. + eJustSingleWord If chars of the last-line'word should be + stretched. + */ + void SetLastLineAlign(enumXFAlignType align,sal_Bool bJustSingleWord = sal_False); + + /** + * @descr Set the shadow of the paragraph.there is 4 postions, you + can find it in the definition of enumShadowPos. + * @param pos + * @param offset the distance between the paragraph border and the shadow. + * @param color color to fill the shadow. + */ + void SetShadow(enumXFShadowPos pos, double offset, XFColor& color); + + /** + * @descr The borders is complex,so you have to create one before use. + Very few paragraphs will readly have borders property,this way + we can save much memory. + * @param pBorders borders of the paragraph,please reference the XFBorders. + */ + void SetBorders(XFBorders *pBorders); + + /** + * @descr Set drop caption of the paragraph. + * @param nLength number of chars to be droped. + * @param nLines line of which the droped chars will occupy. + */ + void SetDropCap(sal_Int16 nLength = 1,sal_Int16 nLines = 3,double fDistance = 0); + + /** + * @descr Set line height of the paragraph. + * @param type type of line height,fixed,space,percent or cm. + * @param value value of the line height + */ + void SetLineHeight(enumLHType type, double value); + + /** + * @descr Set background color of the paragraph. + * @param color value of the back color. + */ + void SetBackColor(XFColor& color); + + /** + * @descr Set background image of the paragraph. + * @param image the background image to set. + */ + void SetBackImage(XFBGImage *image); + + /** + * descr You can only set one break property for every para style object. + */ + void SetBreaks(enumXFBreaks breaks); + + /** + * @descr For paragraph numbering. + */ + void SetPageNumber(sal_Int32 num); + + /** + * @descr Add a tab style. + */ + void AddTabStyle(enumXFTab type, double len, sal_Unicode leader = '*', sal_Unicode delimiter='.'); + + /** + * @descr for para style copy operator,sometimes you may need to override tab styles. + */ + void ClearTabStyles(); + + /** + * descr set the paragraph to be in the same page with the next paragraph. + * If that can't be insured,the paragraph will start with a new page. + */ + void SetKeepWithNext(sal_Bool keepWithNext); + + sal_uInt32 GetFlag(){ return m_nFlag; } + + /** + * @descr return margins. + */ + XFMargins GetMargins(){return m_aMargin;} + + virtual enumXFStyle GetStyleFamily(); + + virtual sal_Bool Equal(IXFStyle *pStyle); + + virtual void ToXml(IXFStream *strm); + + void SetNumberRight(sal_Bool bFlag){m_bNumberRight = bFlag;} + sal_Bool GetNumberRight(){return m_bNumberRight;} + +protected: + rtl::OUString m_strMasterPage; + enumXFAlignType m_eAlignType; + enumXFAlignType m_eLastLineAlign; + sal_Bool m_bJustSingleWord; + sal_Bool m_bKeepWithNext; + + double m_fTextIndent; + XFColor m_aBackColor; + XFMargins m_aMargin; + XFPadding m_aPadding; + XFStyleContainer m_aTabs; + XFFont *m_pFont; + XFShadow m_aShadow; + XFBorders *m_pBorders; + XFBGImage *m_pBGImage; + XFDropcap m_aDropcap; + XFLineHeight m_aLineHeight; + XFBreaks m_aBreaks; + sal_Int32 m_nPageNumber; + sal_Bool m_bNumberLines; + sal_Int32 m_nLineNumberRestart; + + sal_uInt32 m_nFlag; + sal_Bool m_bNumberRight; +}; + +inline void XFParaStyle::SetMasterPage(rtl::OUString master) +{ + m_strMasterPage = master; +} + +inline void XFParaStyle::SetBreaks(enumXFBreaks breaks) +{ + m_aBreaks.SetBreakType(breaks); +} + +inline void XFParaStyle::SetPageNumber(sal_Int32 num) +{ + assert(num>0); + m_nPageNumber = num; +} + +inline void XFParaStyle::SetLineNumber(sal_Bool show, sal_Int32 restart) +{ + m_bNumberLines = show; + m_nLineNumberRestart = restart; +} + +inline void XFParaStyle::SetPadding(double left, double right, double top, double bottom) +{ + m_aPadding.SetLeft(left); + if( right == -1 ) + m_aPadding.SetRight(left); + else + m_aPadding.SetRight(right); + if( top == -1 ) + m_aPadding.SetTop(left); + else + m_aPadding.SetTop(top); + if( bottom == -1 ) + m_aPadding.SetBottom(left); + else + m_aPadding.SetBottom(bottom); +} + +inline void XFParaStyle::SetAlignType(enumXFAlignType eAlign) +{ + m_eAlignType = eAlign; +} + +inline void XFParaStyle::SetLastLineAlign(enumXFAlignType align, sal_Bool bJustSingleWord) +{ + m_eLastLineAlign = align; + m_bJustSingleWord = bJustSingleWord; +} + +inline void XFParaStyle::SetKeepWithNext(sal_Bool keep) +{ + m_bKeepWithNext = keep; +} + +inline void XFParaStyle::ClearTabStyles() +{ + m_aTabs.Reset(); +} + +inline rtl::OUString XFParaStyle::GetMasterPage() +{ + return m_strMasterPage; +} + +inline enumXFAlignType XFParaStyle::GetAlighType() +{ + return m_eAlignType; +} + +class XFDefaultParaStyle : public XFStyle +{ +public: + XFDefaultParaStyle(); + void SetTabDistance(double len); + enumXFStyle GetStyleFamily(); + virtual void ToXml(IXFStream *pStrm); +private: + double m_fTabDistance; +}; + +inline void XFDefaultParaStyle::SetTabDistance(double len) +{ + m_fTabDistance = len; +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfplaceholder.hxx b/lotuswordpro/source/filter/xfilter/xfplaceholder.hxx new file mode 100644 index 000000000000..260e4e8db387 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfplaceholder.hxx @@ -0,0 +1,144 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * place holder object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-05-24 create this file. + ************************************************************************/ + +#ifndef _XFPLACEHOLDER_HXX +#define _XFPLACEHOLDER_HXX + +#include "xfcontent.hxx" + +/** + * @brief + * Index entry obejct. + */ +class XFHolderStart : public XFContent +{ +public: + XFHolderStart(); + ~XFHolderStart(); + void SetType(rtl::OUString sType); + void SetDesc(rtl::OUString sDesc); + void SetPrompt(rtl::OUString sText); + void ToXml(IXFStream *pStrm); +private: + rtl::OUString m_strType; + rtl::OUString m_strDesc; + rtl::OUString m_strText; +}; + +XFHolderStart::XFHolderStart() +{ +} + +XFHolderStart::~XFHolderStart() +{ +} + +inline void XFHolderStart::SetType(rtl::OUString sType) +{ + m_strType = sType; +} + +inline void XFHolderStart::SetDesc(rtl::OUString sDesc) +{ + m_strDesc = sDesc; +} + +inline void XFHolderStart::SetPrompt(rtl::OUString sText) +{ + m_strText = sText; +} + +inline void XFHolderStart::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("text:placeholder-type"),m_strType); + if (m_strDesc.getLength()>0) + pAttrList->AddAttribute( A2OUSTR("text:description"), m_strDesc); + pStrm->StartElement( A2OUSTR("text:placeholder") ); + if( m_strText.getLength()>0) + pStrm->Characters(m_strText); +} + +class XFHolderEnd : public XFContent +{ +public: + XFHolderEnd(); + ~XFHolderEnd(); + void ToXml(IXFStream *pStrm); +}; + +XFHolderEnd::XFHolderEnd() +{ +} + +XFHolderEnd::~XFHolderEnd() +{ +} + +inline void XFHolderEnd::ToXml(IXFStream *pStrm) +{ + pStrm->EndElement( A2OUSTR("text:placeholder") ); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfpoint.hxx b/lotuswordpro/source/filter/xfilter/xfpoint.hxx new file mode 100644 index 000000000000..1a2d7b30d87b --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfpoint.hxx @@ -0,0 +1,106 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Reperesent a point. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-18 create this file. + ************************************************************************/ +#ifndef _XFPOINT_HXX +#define _XFPOINT_HXX + +class XFPoint +{ +public: + XFPoint() + { + m_fX = m_fY = 0; + } + + XFPoint(double x, double y) + { + m_fX = x; + m_fY = y; + } + +public: + void SetX(double x) + { + m_fX = x; + } + + void SetY(double y) + { + m_fY = y; + } + + double GetX() const + { + return m_fX; + } + + double GetY() const + { + return m_fY; + } + +private: + double m_fX; + double m_fY; +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfpvector.hxx b/lotuswordpro/source/filter/xfilter/xfpvector.hxx new file mode 100644 index 000000000000..7b29463636eb --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfpvector.hxx @@ -0,0 +1,100 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Pointer vector. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#ifndef _XFPVECTOR_HXX +#define _XFPVECTOR_HXX + +#include <vector> + +template<class T> +class XFPVector : public std::vector<T> +{ +public: + ~XFPVector() + { + std::vector<T>::iterator it; + for( it=begin(); it != end(); it++ ) + { + T pT = *it; + if( pT ) + { + delete pT; + } + } + } + + void Reset() + { + std::vector<T>::iterator it; + for( it=begin(); it != end(); it++ ) + { + T *pT = *it; + if( pT ) + { + delete pT; + } + } + clear(); + } +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfrect.hxx b/lotuswordpro/source/filter/xfilter/xfrect.hxx new file mode 100644 index 000000000000..e176f5656646 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfrect.hxx @@ -0,0 +1,140 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Rect object + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-2-18 create this file. + ************************************************************************/ +#ifndef _XFRECT_HXX +#define _XFRECT_HXX + +#include "xfpoint.hxx" + +class XFRect +{ +public: + XFRect() + { + m_fWidth = m_fHeight = 0; + } + + XFRect(double x, double y, double width, double height):m_aPoint(x,y) + { + m_fWidth = width; + m_fHeight = height; + } + +public: + void SetX(double x) + { + m_aPoint.SetX(x); + } + + double GetX() const + { + return m_aPoint.GetX(); + } + + void SetY(double y) + { + m_aPoint.SetY(y); + } + + double GetY() const + { + return m_aPoint.GetY(); + } + + void SetWidth(double width) + { + m_fWidth = width; + } + + double GetWidth() const + { + return m_fWidth; + } + + void SetHeight(double height) + { + m_fHeight = height; + } + + double GetHeight() const + { + return m_fHeight; + } + + void SetStartPoint(XFPoint pt) + { + m_aPoint = pt; + } + + void SetSize(double width, double height) + { + m_fWidth = width; + m_fHeight = height; + } + +public: + XFPoint m_aPoint; + double m_fWidth; + double m_fHeight; +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfrow.cxx b/lotuswordpro/source/filter/xfilter/xfrow.cxx new file mode 100644 index 000000000000..27e04c840b90 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfrow.cxx @@ -0,0 +1,185 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Table object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-24 create and implements. + ************************************************************************/ +#include "xfrow.hxx" +#include "xfcell.hxx" +#include "xftable.hxx" + +XFRow::XFRow() +{ + m_nRepeat = 0; + m_nRow = 0; +} + +XFRow::XFRow(const XFRow& other) +{ + m_pOwnerTable = NULL; + m_nRepeat = other.m_nRepeat; + m_nRow = other.m_nRow; + + for( int i=1; i<=other.GetCellCount(); i++ ) + { + XFCell *pCell = new XFCell; + *pCell = *other.GetCell(i); + AddCell(pCell); + } +} + +XFRow& XFRow::operator=(const XFRow& other) +{ + m_pOwnerTable = NULL; + m_nRepeat = other.m_nRepeat; + m_nRow = other.m_nRow; + + for( int i=1; i<=other.GetCellCount(); i++ ) + { + XFCell *pCell = new XFCell; + *pCell = *other.GetCell(i); + AddCell(pCell); + } + return *this; +} + + +XFRow::~XFRow() +{ + std::map<sal_Int32,XFCell*>::iterator it; + for( it=m_aCells.begin(); it!=m_aCells.end(); it++ ) + { + XFCell *pCell = (*it).second; + if( pCell ) + delete pCell; + } +} + +void XFRow::AddCell(XFCell *pCell) +{ + if( !pCell ) + return; +/* sal_Int32 col = pCell->GetCol(); + if( col<1 ) + { + pCell->SetCol(m_aCells.size()+1); + } + + col = pCell->GetCol(); + if( m_aCells.find(col) != m_aCells.end() ) + delete m_aCells[col]; +*/ + sal_Int32 col = m_aCells.size()+1; + pCell->SetCol(col); + pCell->SetOwnerRow(this); + m_aCells[col]=pCell; +} + +sal_Int32 XFRow::GetCellCount() const +{ + return m_aCells.size(); +} + +XFCell* XFRow::GetCell(sal_Int32 col) const +{ + if( m_aCells.find(col) == m_aCells.end() ) + return NULL; + else + return m_aCells.find(col)->second; +} + +rtl::OUString XFRow::GetRowName() +{ + if( m_pOwnerTable && m_pOwnerTable->IsSubTable() ) + return m_pOwnerTable->GetTableName(); + return A2OUSTR(""); +} + +void XFRow::ToXml(IXFStream *pStrm) +{ + sal_Int32 lastCol = 0; + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + if( GetStyleName().getLength() ) + pAttrList->AddAttribute( A2OUSTR("table:style-name"), GetStyleName() ); + if( m_nRepeat ) + pAttrList->AddAttribute( A2OUSTR("table:number-rows-repeated"), Int32ToOUString(m_nRepeat) ); + pStrm->StartElement( A2OUSTR("table:table-row") ); + + std::map<sal_Int32,XFCell*>::iterator it = m_aCells.begin(); + for( ; it!=m_aCells.end(); it++ ) + { + int col = (*it).first; + XFCell *pCell = (*it).second; + if( !pCell ) + continue; + if( col>lastCol+1 ) + { + XFCell *pNULLCell = new XFCell(); + if( col>lastCol+2 ) + pNULLCell->SetRepeated(col-lastCol-1); + pNULLCell->ToXml(pStrm); + } + pCell->ToXml(pStrm); + lastCol = col; + } + + pStrm->EndElement( A2OUSTR("table:table-row") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfrow.hxx b/lotuswordpro/source/filter/xfilter/xfrow.hxx new file mode 100644 index 000000000000..c7d6869aa6bc --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfrow.hxx @@ -0,0 +1,142 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Table row object. A table is consist by rows. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-28 create and implements. + ************************************************************************/ +#ifndef _XFROW_HXX +#define _XFROW_HXX + +#include "xfcontent.hxx" +#include <map> + +class XFCell; +class XFTable; +class XFRow : public XFContent +{ +public: + XFRow(); + + XFRow(const XFRow& other); + + XFRow& operator=(const XFRow& other); + + virtual ~XFRow(); + +public: + void AddCell(XFCell *pCell); + + void SetRepeated(sal_Int32 repeat); + + void SetRow(sal_Int32 row); + + void SetOwnerTable(XFTable *pTable); + + sal_Int32 GetRow(); + + sal_Int32 GetCellCount() const; + + XFCell* GetCell(sal_Int32 col) const; + + XFTable* GetOwnerTable(); + + rtl::OUString GetRowName(); + + virtual void ToXml(IXFStream *pStrm); + + void RemoveCell(sal_Int32 cell); + +private: + XFTable *m_pOwnerTable; + std::map<sal_Int32,XFCell*> m_aCells; + sal_Int32 m_nRepeat; + sal_Int32 m_nRow; +}; + +inline void XFRow::SetRepeated(sal_Int32 repeat) +{ + m_nRepeat = repeat; +} + +inline void XFRow::SetRow(sal_Int32 row) +{ + m_nRow = row; +} + +inline void XFRow::SetOwnerTable(XFTable *pTable) +{ + m_pOwnerTable = pTable; +} + +inline sal_Int32 XFRow::GetRow() +{ + return m_nRow; +} + +inline XFTable* XFRow::GetOwnerTable() +{ + return m_pOwnerTable; +} + +inline void XFRow::RemoveCell(sal_Int32 cell) +{ + m_aCells.erase(cell); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfrowstyle.cxx b/lotuswordpro/source/filter/xfilter/xfrowstyle.cxx new file mode 100644 index 000000000000..5017fd82a75f --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfrowstyle.cxx @@ -0,0 +1,128 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Table row style, ie. table row height. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-28 create and implements. + ************************************************************************/ +#include "xfrowstyle.hxx" +#include "xfbgimage.hxx" + +XFRowStyle::XFRowStyle():m_fHeight(0) +{ + m_fHeight = 0; + m_fMinHeight = 0; + m_pBGImage = NULL; +} + + +void XFRowStyle::SetbackImage(XFBGImage *pImage) +{ + if( m_pBGImage ) + delete m_pBGImage; + m_pBGImage = pImage; +} + +enumXFStyle XFRowStyle::GetStyleFamily() +{ + return enumXFStyleTableRow; +} + +void XFRowStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pAttrList->AddAttribute( A2OUSTR("style:name"), GetStyleName() ); + if( GetParentStyleName().getLength() > 0 ) + pAttrList->AddAttribute(A2OUSTR("style:parent-style-name"),GetParentStyleName()); + + pAttrList->AddAttribute( A2OUSTR("style:family"), A2OUSTR("table-row") ); + pStrm->StartElement( A2OUSTR("style:style") ); + + pAttrList->Clear(); + if( m_fMinHeight ) + pAttrList->AddAttribute( A2OUSTR("style:min-row-height"), DoubleToOUString(m_fMinHeight) + A2OUSTR("cm") ); + else if( m_fHeight ) + pAttrList->AddAttribute( A2OUSTR("style:row-height"), DoubleToOUString(m_fHeight) + A2OUSTR("cm") ); + + if( m_aBackColor.IsValid() && !m_pBGImage ) + pAttrList->AddAttribute( A2OUSTR("fo:background-color"), m_aBackColor.ToString() ); + pStrm->StartElement( A2OUSTR("style:properties") ); + if( m_pBGImage ) + m_pBGImage->ToXml(pStrm); + pStrm->EndElement( A2OUSTR("style:properties") ); + + pStrm->EndElement( A2OUSTR("style:style") ); +} + +XFRowStyle& XFRowStyle::operator=(XFRowStyle& other) +{ + m_fHeight = other.m_fHeight; + m_fMinHeight = other.m_fMinHeight; + m_aBackColor = other.m_aBackColor; + + if( m_pBGImage ) + delete m_pBGImage; + + if( other.m_pBGImage ) + m_pBGImage = new XFBGImage(*other.m_pBGImage); + else + m_pBGImage = NULL; + return *this; +} diff --git a/lotuswordpro/source/filter/xfilter/xfrowstyle.hxx b/lotuswordpro/source/filter/xfilter/xfrowstyle.hxx new file mode 100644 index 000000000000..4c29062d902c --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfrowstyle.hxx @@ -0,0 +1,126 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Table row style, ie. table row height. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-28 create and implements. + ************************************************************************/ +#ifndef _XFROWSTYLE_HXX +#define _XFROWSTYLE_HXX + +#include "xfglobal.hxx" +#include "xfstyle.hxx" +#include "xfcolor.hxx" + +class XFBGImage; +class XFRowStyle : public XFStyle +{ +public: + XFRowStyle(); + XFRowStyle& operator=(XFRowStyle& other); + +public: + void SetRowHeight(double height); + + double GetRowHeight(); + + void SetMinRowHeight(double height); + + void SetBackColor(XFColor& color); + + void SetbackImage(XFBGImage *pImage); + + virtual enumXFStyle GetStyleFamily(); + + virtual void ToXml(IXFStream *pStrm); + +private: + double m_fHeight; + double m_fMinHeight; + XFColor m_aBackColor; + XFBGImage *m_pBGImage; +}; + +inline void XFRowStyle::SetRowHeight(double height) +{ + m_fHeight = height; +} + +inline void XFRowStyle::SetMinRowHeight(double height) +{ + m_fMinHeight = height; +} + +inline void XFRowStyle::SetBackColor(XFColor& color) +{ + m_aBackColor = color; +} +inline double XFRowStyle::GetRowHeight() +{ + if (m_fMinHeight > FLOAT_MIN) + { + return m_fMinHeight; + } + + else if (m_fHeight > FLOAT_MIN) + { + return m_fHeight; + } + return 0; +} +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfruby.hxx b/lotuswordpro/source/filter/xfilter/xfruby.hxx new file mode 100644 index 000000000000..96a3d85553eb --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfruby.hxx @@ -0,0 +1,113 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * ruby text. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-06-21 create this file. + ************************************************************************/ +#ifndef _XFRUBY_HXX +#define _XFRUBY_HXX + +#include "xfcontent.hxx" + +class XFRubyStart : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +class XFRubyEnd : public XFContent +{ +public: + void SetText(rtl::OUString sText); + virtual void ToXml(IXFStream *pStrm); +private: + rtl::OUString m_strText; +}; + +void XFRubyStart::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + if( GetStyleName().getLength()) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), GetStyleName()); + pStrm->StartElement( A2OUSTR("text:ruby") ); + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("text:ruby-base") ); +} + +void XFRubyEnd::SetText(rtl::OUString sText) +{ + m_strText = sText; +} + +void XFRubyEnd::ToXml(IXFStream *pStrm) +{ + pStrm->EndElement( A2OUSTR("text:ruby-base") ); + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + if( GetStyleName().getLength()) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), GetStyleName()); + pStrm->StartElement( A2OUSTR("text:ruby-text") ); + if( m_strText.getLength() ) + pStrm->Characters(m_strText); + pStrm->EndElement( A2OUSTR("text:ruby-text") ); + pStrm->EndElement( A2OUSTR("text:ruby") ); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfrubystyle.hxx b/lotuswordpro/source/filter/xfilter/xfrubystyle.hxx new file mode 100644 index 000000000000..837ff6c0087b --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfrubystyle.hxx @@ -0,0 +1,143 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * ruby style. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-06-21 create this file. + ************************************************************************/ +#ifndef _XFRUBYSTYLE_HXX +#define _XFRUBYSTYLE_HXX + +#include "xfglobal.hxx" +#include "xfstyle.hxx" +#include "xfdefs.hxx" + +class XFRubyStyle : public XFStyle +{ +public: + XFRubyStyle(){}; + virtual ~XFRubyStyle(){}; + virtual void ToXml(IXFStream *strm); + void SetPosition(enumXFRubyPosition ePosition); + void SetAlignment(enumXFRubyPosition eAlignment); + enumXFStyle GetStyleFamily(); + +private: + enumXFRubyPosition m_ePos; + enumXFRubyPosition m_eAlign; +}; + +void XFRubyStyle::SetPosition(enumXFRubyPosition ePosition) +{ + m_ePos = ePosition; +} +void XFRubyStyle::SetAlignment(enumXFRubyPosition eAlignment) +{ + m_eAlign = eAlignment; +} +enumXFStyle XFRubyStyle::GetStyleFamily() +{ + return enumXFStyleRuby; +} +void XFRubyStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + rtl::OUString style = GetStyleName(); + + pAttrList->Clear(); + if( style.getLength() ) + pAttrList->AddAttribute(A2OUSTR("style:name"),GetStyleName()); + pAttrList->AddAttribute(A2OUSTR("style:family"), A2OUSTR("ruby")); + pStrm->StartElement(A2OUSTR("style:style")); + + pAttrList->Clear(); + + OUString sPos; + if (m_eAlign == enumXFRubyLeft) + { + sPos = A2OUSTR("left"); + } + else if(m_eAlign == enumXFRubyRight) + { + sPos = A2OUSTR("right"); + } + else if(m_eAlign == enumXFRubyCenter) + { + sPos = A2OUSTR("center"); + } + if (sPos.getLength()>0) + pAttrList->AddAttribute(A2OUSTR("style:ruby-align"),sPos); + + OUString sAlign; + if (m_ePos == enumXFRubyTop) + { + sAlign = A2OUSTR("above"); + } + else if(m_ePos == enumXFRubyBottom) + { + sAlign = A2OUSTR("below"); + } + if (sAlign.getLength()>0) + pAttrList->AddAttribute(A2OUSTR("style:ruby-position"),sAlign); + + pStrm->StartElement(A2OUSTR("style:properties")); + pStrm->EndElement(A2OUSTR("style:properties")); + pStrm->EndElement(A2OUSTR("style:style")); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfsaxattrlist.cxx b/lotuswordpro/source/filter/xfilter/xfsaxattrlist.cxx new file mode 100644 index 000000000000..0eca165201c6 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfsaxattrlist.cxx @@ -0,0 +1,88 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Document object of the xml filter framework. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ + +#include "xfsaxattrlist.hxx" +#include "xmloff/attrlist.hxx" + +XFSaxAttrList::XFSaxAttrList() +{ + m_pSvAttrList = new SvXMLAttributeList(); + m_xAttrList.set(m_pSvAttrList); +} + +XFSaxAttrList::~XFSaxAttrList() +{ + //pls don't delete m_pSvAttrList,because when m_xAttrList release,the object will be automatic deleted. +// if( m_pSvAttrList ) +// delete m_pSvAttrList; +} + +void XFSaxAttrList::AddAttribute(const rtl::OUString& name, const rtl::OUString& value) +{ + m_pSvAttrList->AddAttribute(name,value); +} + +void XFSaxAttrList::Clear() +{ + m_pSvAttrList->Clear(); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfsaxattrlist.hxx b/lotuswordpro/source/filter/xfilter/xfsaxattrlist.hxx new file mode 100644 index 000000000000..6f3e1d57689f --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfsaxattrlist.hxx @@ -0,0 +1,100 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Wrapper the attibute list of a xml element. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#ifndef _XFSAXATTRLIST_HXX +#define _XFSAXATTRLIST_HXX + +#include "ixfattrlist.hxx" +#include "xmloff/attrlist.hxx" +#include <com/sun/star/xml/sax/XDocumentHandler.hpp> + +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::xml::sax; + +class XFSaxAttrList : public IXFAttrList +{ +public: + XFSaxAttrList(); + + virtual ~XFSaxAttrList(); + +public: + //Interface ISaxAttributeList: + virtual void AddAttribute(const rtl::OUString& name, const rtl::OUString& value); + + virtual void Clear(); + + Reference<XAttributeList> GetAttributeList(); + + friend class XFSaxStream; +private: + SvXMLAttributeList *m_pSvAttrList; + Reference<XAttributeList> m_xAttrList; + +}; + +inline Reference<XAttributeList> XFSaxAttrList::GetAttributeList() +{ + return m_xAttrList; +} + +#endif //XFSAXATTRLIST_INC diff --git a/lotuswordpro/source/filter/xfilter/xfsaxstream.cxx b/lotuswordpro/source/filter/xfilter/xfsaxstream.cxx new file mode 100644 index 000000000000..37c1acb8ec54 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfsaxstream.cxx @@ -0,0 +1,130 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Tool for sax writer. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-12-23 create this file. + ************************************************************************/ +#include "xfsaxstream.hxx" +#include "xfsaxattrlist.hxx" + +#include <cppuhelper/implbase1.hxx> +#include <cppuhelper/implbase3.hxx> +#include <cppuhelper/factory.hxx> + +#include <com/sun/star/document/XFilter.hpp> +#include <com/sun/star/document/XImporter.hpp> +#include <com/sun/star/xml/sax/XDocumentHandler.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/io/XInputStream.hpp> + +using namespace ::rtl; +using namespace ::cppu; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::io; +using namespace ::com::sun::star::registry; +using namespace ::com::sun::star::document; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::xml::sax; +using namespace ::com::sun::star::uno; + +XFSaxStream::XFSaxStream(Reference<XDocumentHandler>& xHandler) +{ + m_aHandler = xHandler; + m_pAttrList = new XFSaxAttrList(); +} + +XFSaxStream::~XFSaxStream() +{ + if( m_pAttrList ) + delete m_pAttrList; +} + +void XFSaxStream::StartDocument() +{ + m_aHandler->startDocument(); +} + +void XFSaxStream::EndDocument() +{ + m_aHandler->endDocument(); +} + +void XFSaxStream::StartElement(const rtl::OUString& oustr) +{ + m_aHandler->startElement( oustr, m_pAttrList->GetAttributeList() ); + m_pAttrList->Clear(); +} + +void XFSaxStream::EndElement(const rtl::OUString& oustr) +{ + m_aHandler->endElement(oustr); + + if( m_pAttrList ) + m_pAttrList->Clear(); +} + +void XFSaxStream::Characters(const rtl::OUString& oustr) +{ + m_aHandler->characters(oustr); +} + +IXFAttrList* XFSaxStream::GetAttrList() +{ + return m_pAttrList; +} diff --git a/lotuswordpro/source/filter/xfilter/xfsaxstream.hxx b/lotuswordpro/source/filter/xfilter/xfsaxstream.hxx new file mode 100644 index 000000000000..2c2fb65765b7 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfsaxstream.hxx @@ -0,0 +1,137 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Tool for sax writer. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-12-23 create this file. + ************************************************************************/ +#ifndef _XFSAXSTREAM_HXX +#define _XFSAXSTREAM_HXX + +#include "ixfstream.hxx" + +#include <cppuhelper/implbase1.hxx> +#include <cppuhelper/implbase3.hxx> +#include <cppuhelper/factory.hxx> +#include <com/sun/star/document/XFilter.hpp> +#include <com/sun/star/document/XImporter.hpp> +#include <com/sun/star/xml/sax/XDocumentHandler.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/io/XInputStream.hpp> + +using namespace ::rtl; +using namespace ::cppu; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::io; +using namespace ::com::sun::star::registry; +using namespace ::com::sun::star::document; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::xml::sax; +using namespace ::com::sun::star::uno; + +class XFSaxAttrList; +class IXFAttrList; + +/** + * @brief + * Sax stream object, XDocumentHandler wrapper. + */ +class XFSaxStream : public IXFStream +{ +public: + XFSaxStream(Reference<XDocumentHandler>& xHandler); + + virtual ~XFSaxStream(); + +public: + /** + * @descr Start document callback. + */ + virtual void StartDocument(); + + /** + * @descr End document callback. + */ + virtual void EndDocument(); + + /** + * @descr Start output element. + */ + virtual void StartElement(const rtl::OUString& oustr); + + /** + * @descr End output element. + */ + virtual void EndElement(const rtl::OUString& oustr); + + /** + * @descr Output Character section. + */ + virtual void Characters(const rtl::OUString& oustr); + + /** + * @descr Get the attribute list interface. + */ + virtual IXFAttrList* GetAttrList(); + +public: + Reference<XDocumentHandler> m_aHandler; + XFSaxAttrList *m_pAttrList; +}; + +#endif //XFSAXSTREAM_INC diff --git a/lotuswordpro/source/filter/xfilter/xfsection.cxx b/lotuswordpro/source/filter/xfilter/xfsection.cxx new file mode 100644 index 000000000000..d5da6464606f --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfsection.cxx @@ -0,0 +1,155 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Section object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-12-28 create this file. + ************************************************************************/ +#include "xfsection.hxx" + +XFSection::XFSection() +{ + m_bProtected = sal_False; + m_bHiden = sal_False; + m_strSectionName = XFGlobal::GenSectionName(); +} + +XFSection::~XFSection() +{ +} + +void XFSection::SetSectionName(rtl::OUString name) +{ + m_strSectionName = name; +} + +void XFSection::SetSourceLink( rtl::OUString link) +{ + m_strSourceLink = link; +} + +void XFSection::SetProtected(sal_Bool bProtected) +{ + m_bProtected = bProtected; +} + +void XFSection::SetHiden(sal_Bool hiden) +{ + m_bHiden = hiden; +} + +void XFSection::ToXml(IXFStream *pStrm) +{ + assert(m_strSectionName.getLength() > 0 ); + + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + rtl::OUString style = GetStyleName(); + if( style.getLength() ) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), style); + //section name + if( m_strSectionName.getLength() ) + pAttrList->AddAttribute( A2OUSTR("text:name"), m_strSectionName); + if( m_bProtected ) + pAttrList->AddAttribute( A2OUSTR("text:protected"), A2OUSTR("true") ); + if( m_bHiden ) + pAttrList->AddAttribute( A2OUSTR("text:display"), A2OUSTR("none") ); + + pStrm->StartElement( A2OUSTR("text:section") ); + if( m_strSourceLink.getLength() ) + { + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("xlink:href"), m_strSourceLink); + pAttrList->AddAttribute( A2OUSTR("text:filter-name"), A2OUSTR("wordpro")); + pStrm->StartElement( A2OUSTR("text:section-source") ); + pStrm->EndElement( A2OUSTR("text:section-source") ); + } + + XFContentContainer::ToXml(pStrm); + + pStrm->EndElement( A2OUSTR("text:section") ); + +} +/* +void XFSection::ToXmlHeader(IXFStream *pStrm) +{ + assert(m_strSectionName.getLength() > 0 ); + + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + rtl::OUString style = GetStyleName(); + if( style.getLength() ) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), style); + //section name + if( m_strSectionName.getLength() ) + pAttrList->AddAttribute( A2OUSTR("text:name"), m_strSectionName); + if( m_bProtected ) + pAttrList->AddAttribute( A2OUSTR("text:protected"), A2OUSTR("true") ); + if( m_bHiden ) + pAttrList->AddAttribute( A2OUSTR("text:display"), A2OUSTR("none") ); + + pStrm->StartElement( A2OUSTR("text:section") ); +} + +void XFSection::ToXmlTail(IXFStream *pStrm) +{ + pStrm->EndElement( A2OUSTR("text:section") ); +} +*/
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfsection.hxx b/lotuswordpro/source/filter/xfilter/xfsection.hxx new file mode 100644 index 000000000000..ae05a40d277c --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfsection.hxx @@ -0,0 +1,120 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Section object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-12-28 create this file. + ************************************************************************/ +#ifndef _XFSECTION_HXX +#define _XFSECTION_HXX + +#include "xfcontentcontainer.hxx" +#include "xfcontent.hxx" +#include "xfcolor.hxx" +#include <vector> + +/** + * @brief + * Section object. + */ +class XFSection : public XFContentContainer +{ +public: + XFSection(); + + virtual ~XFSection(); + +public: + /** + * @descr Set section name. If not setted, i'll generate a name for it. + */ + void SetSectionName(rtl::OUString name); + + void SetSourceLink(rtl::OUString link); + + /** + * @descr Set protected. + */ + void SetProtected(sal_Bool bProtected); + + /** + * @descr Set hidden. + */ + void SetHiden(sal_Bool hiden); + + /** + * @descr Output section obejct. + */ + virtual void ToXml(IXFStream *pStrm); +/* +private: + void ToXmlHeader(IXFStream *pStrm); + + void ToXmlTail(IXFStream *pStrm); +*/ +private: + rtl::OUString m_strSectionName; + sal_Bool m_bProtected; + sal_Bool m_bHiden; + XFColor m_aBackColor; + double m_fMarginLeft; + double m_fMarginRight; + rtl::OUString m_strSourceLink; +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfsectionstyle.cxx b/lotuswordpro/source/filter/xfilter/xfsectionstyle.cxx new file mode 100644 index 000000000000..7c44f60f01e7 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfsectionstyle.cxx @@ -0,0 +1,156 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Section style,whose family is "section" + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-10 create this file. + ************************************************************************/ +#include "xfsectionstyle.hxx" +#include "xfcolumns.hxx" + +XFSectionStyle::XFSectionStyle() +{ + m_fMarginLeft = 0; + m_fMarginRight = 0; + m_pBackImage = NULL; + m_pColumns = NULL; +} + +XFSectionStyle::~XFSectionStyle() +{ + if( m_pColumns ) + delete m_pColumns; + if( m_pBackImage ) + delete m_pBackImage; +} + +enumXFStyle XFSectionStyle::GetStyleFamily() +{ + return enumXFStyleSection; +} + +void XFSectionStyle::SetMarginLeft(double left) +{ + m_fMarginLeft = left; +} + +void XFSectionStyle::SetMarginRight(double right) +{ + m_fMarginRight = right; +} + +void XFSectionStyle::SetBackColor(const XFColor& color) +{ + m_aBackColor = color; +} + +void XFSectionStyle::SetColumns(XFColumns *pColumns) +{ + if( m_pColumns ) + delete m_pColumns; + m_pColumns = pColumns; +} + +void XFSectionStyle::SetBackImage(XFBGImage *image) +{ + if( m_pBackImage ) + delete m_pBackImage; + m_pBackImage = image; +} + +void XFSectionStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("style:name"), GetStyleName() ); + pAttrList->AddAttribute( A2OUSTR("style:family"), A2OUSTR("section") ); + + pStrm->StartElement( A2OUSTR("style:style") ); + + pAttrList->Clear(); + if( m_fMarginLeft != 0 ) + { + pAttrList->AddAttribute( A2OUSTR("fo:margin-left"), DoubleToOUString(m_fMarginLeft) + A2OUSTR("cm") ); + } + if( m_fMarginRight != 0 ) + { + pAttrList->AddAttribute( A2OUSTR("fo:margin-right"), DoubleToOUString(m_fMarginRight) + A2OUSTR("cm") ); + } + if( m_aBackColor.IsValid() && !m_pBackImage ) + { + pAttrList->AddAttribute( A2OUSTR("fo:background-color"), m_aBackColor.ToString() ); + } + else + { + pAttrList->AddAttribute( A2OUSTR("fo:background-color"), A2OUSTR("transparent") ); + } + + pStrm->StartElement( A2OUSTR("style:properties") ); + + if( m_pColumns ) + m_pColumns->ToXml(pStrm); + if( m_pBackImage ) + m_pBackImage->ToXml(pStrm); + + pStrm->EndElement( A2OUSTR("style:properties") ); + + pStrm->EndElement( A2OUSTR("style:style") ); + + +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfsectionstyle.hxx b/lotuswordpro/source/filter/xfilter/xfsectionstyle.hxx new file mode 100644 index 000000000000..b92745f4cd64 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfsectionstyle.hxx @@ -0,0 +1,106 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Section style,whose family is "section" + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-10 create this file. + ************************************************************************/ +#ifndef _XFSECTIONSTYLE_HXX +#define _XFSECTIONSTYLE_HXX + +#include "xfglobal.hxx" +#include "xfstyle.hxx" +#include "xfbgimage.hxx" +#include "xfcolor.hxx" + +class XFColumns; +/* + * @descr + * Section style, include background color,background image, columns and margins. + */ +class XFSectionStyle : public XFStyle +{ +public: + XFSectionStyle(); + + virtual ~XFSectionStyle(); + +public: + void SetMarginLeft(double left); + + void SetMarginRight(double right); + + void SetBackColor(const XFColor& color); + + void SetColumns(XFColumns *pColumns); + + void SetBackImage(XFBGImage *image); + + virtual enumXFStyle GetStyleFamily(); + + virtual void ToXml(IXFStream *pStrm); + +private: + double m_fMarginLeft; + double m_fMarginRight; + XFColor m_aBackColor; + XFColumns *m_pColumns; + XFBGImage *m_pBackImage; +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfshadow.cxx b/lotuswordpro/source/filter/xfilter/xfshadow.cxx new file mode 100644 index 000000000000..a03c2c762b07 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfshadow.cxx @@ -0,0 +1,128 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Shadow object,now only used by paragraph object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#include "xfshadow.hxx" + +XFShadow::XFShadow():m_aColor(128,128,0) +{ + m_ePosition = enumXFShadowNone; + m_fOffset = 0.18; +} + +XFShadow::~XFShadow() +{ +} + +rtl::OUString XFShadow::ToString() +{ + rtl::OUString buf; + rtl::OUString strOff = DoubleToOUString(m_fOffset); + + buf = m_aColor.ToString(); + switch(m_ePosition) + { + case enumXFShadowRightBottom: + buf += A2OUSTR(" ") + strOff + A2OUSTR("cm") + A2OUSTR(" ") + strOff + A2OUSTR("cm"); + break; + case enumXFShadowRightTop: + buf += A2OUSTR(" ") + strOff + A2OUSTR("cm") + A2OUSTR(" -") + strOff + A2OUSTR("cm"); + break; + case enumXFShadowLeftBottom: + buf += A2OUSTR(" -") + strOff + A2OUSTR("cm") + A2OUSTR(" ") + strOff + A2OUSTR("cm"); + break; + case enumXFShadowLeftTop: + buf += A2OUSTR(" -") + strOff + A2OUSTR("cm") + A2OUSTR(" -") + strOff + A2OUSTR("cm"); + break; + } + + return buf; +} + +void XFShadow::Reset() +{ + m_ePosition = enumXFShadowNone; + m_fOffset = 0; +} + +void XFShadow::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + if( m_ePosition == enumXFShadowNone ) + return; + else + pAttrList->AddAttribute( A2OUSTR("style:shadow"), ToString() ); +} + +sal_Bool operator==(XFShadow& s1, XFShadow& s2) +{ + if( (s1.m_ePosition == s2.m_ePosition) && + (s1.m_fOffset == s2.m_fOffset) && + (s1.m_aColor == s2.m_aColor) + ) + return sal_True; + return sal_False; +} + +sal_Bool operator!=(XFShadow& s1, XFShadow& s2) +{ + return !(s1==s2); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfshadow.hxx b/lotuswordpro/source/filter/xfilter/xfshadow.hxx new file mode 100644 index 000000000000..b05e306caad3 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfshadow.hxx @@ -0,0 +1,157 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Shadow object,now only used by paragraph object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#ifndef _XFSHADOW_HXX +#define _XFSHADOW_HXX + +#include "xfglobal.hxx" +#include "ixfproperty.hxx" +#include "xfcolor.hxx" + +/** + * @brief + * Shadow object. + */ +class XFShadow : public IXFProperty +{ +public: + XFShadow(); + + virtual ~XFShadow(); + +public: + /** + * @descr set shadow position. You can refer to enumXFShadowPos to get all posible positions. + */ + void SetPosition(enumXFShadowPos pos); + + /** + * @descr return shadow position. + */ + enumXFShadowPos GetPosition(); + + /** + * @descr Set shadow offset from owner obejct. + */ + void SetOffset(double offset); + + /** + * @descr return shadow offset. + */ + double GetOffset(); + + /** + * @descr Set shadow color. + */ + void SetColor(const XFColor& color); + + /** + * @descr return shadow color. + */ + XFColor GetColor(); + + void Reset(); + + rtl::OUString ToString(); + + virtual void ToXml(IXFStream *pStrm); + + friend sal_Bool operator==(XFShadow& s1, XFShadow& s2); + friend sal_Bool operator!=(XFShadow& s1, XFShadow& s2); +private: + enumXFShadowPos m_ePosition; + double m_fOffset; + XFColor m_aColor; +}; + + +inline void XFShadow::SetPosition(enumXFShadowPos pos) +{ + m_ePosition = pos; +} + +inline enumXFShadowPos XFShadow::GetPosition() +{ + return m_ePosition; +} + +inline void XFShadow::SetOffset(double offset) +{ + m_fOffset = offset; +} + +inline double XFShadow::GetOffset() +{ + return m_fOffset; +} + +inline void XFShadow::SetColor(const XFColor& color) +{ + m_aColor = color; +} + +inline XFColor XFShadow::GetColor() +{ + return m_aColor; +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfstyle.cxx b/lotuswordpro/source/filter/xfilter/xfstyle.cxx new file mode 100644 index 000000000000..aea8c1e0196e --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfstyle.cxx @@ -0,0 +1,107 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Base style object . + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-28 create this file. + ************************************************************************/ +#include "xfstyle.hxx" + +XFStyle::XFStyle() +{ + +} + +XFStyle::~XFStyle() +{ +} + +rtl::OUString XFStyle::GetStyleName() +{ + return m_strStyleName; +} + +void XFStyle::SetStyleName(const rtl::OUString& styleName) +{ + m_strStyleName = styleName; +} + +rtl::OUString XFStyle::GetParentStyleName() +{ + return m_strParentStyleName; +} + +void XFStyle::SetParentStyleName(const rtl::OUString& styleName) +{ + m_strParentStyleName = styleName; +} + +enumXFStyle XFStyle::GetStyleFamily() +{ + return enumXFStyleUnknown; +} + +void XFStyle::SetStyleFamily(enumXFStyle family) +{ + m_enumFamily = family; +} + +sal_Bool XFStyle::Equal(IXFStyle *pStyle) +{ + return sal_False; +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfstyle.hxx b/lotuswordpro/source/filter/xfilter/xfstyle.hxx new file mode 100644 index 000000000000..9b5c831fab3f --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfstyle.hxx @@ -0,0 +1,121 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Base style object . + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-28 create this file. + ************************************************************************/ +#ifndef _XFSTYLE_HXX +#define _XFSTYLE_HXX + +#include "ixfstyle.hxx" + +/** + * @brief + * implements ixfstyle interface. This is the base class for all concentrate style. + */ +class XFStyle : public IXFStyle +{ +public: + XFStyle(); + + virtual ~XFStyle(); + +public: + /** + * @descr get style name. + */ + virtual rtl::OUString GetStyleName(); + + /** + * @descr set style name. + */ + virtual void SetStyleName(const rtl::OUString& styleName); + + /** + * @descr Set parent style name. + */ + virtual rtl::OUString GetParentStyleName(); + + /** + * @descr return parent style name. + */ + virtual void SetParentStyleName(const rtl::OUString& styleName); + + /** + * @descr get styel family. + */ + virtual enumXFStyle GetStyleFamily(); + + /** + * @descr set style family. + */ + virtual void SetStyleFamily(enumXFStyle family); + + /** + * @descr decide whether two style are equal. + */ + virtual sal_Bool Equal(IXFStyle *pStyle); + +protected: + rtl::OUString m_strStyleName; + rtl::OUString m_strParentStyleName; + enumXFStyle m_enumFamily; +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfstylecont.cxx b/lotuswordpro/source/filter/xfilter/xfstylecont.cxx new file mode 100644 index 000000000000..6c459cb08160 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfstylecont.cxx @@ -0,0 +1,299 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Font object to serial to xml filter. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#include "xfstylecont.hxx" +#include "ixfstyle.hxx" +#include "xffont.hxx" +#include "xftextstyle.hxx" +#include "xfparastyle.hxx" +#include "xffontfactory.hxx" +#include "../lwpglobalmgr.hxx" + +XFStyleContainer::XFStyleContainer(const rtl::OUString& strStyleNamePrefix) + :m_strStyleNamePrefix(strStyleNamePrefix) +{ +} + +XFStyleContainer::XFStyleContainer(const XFStyleContainer& other) + :m_strStyleNamePrefix(other.m_strStyleNamePrefix) +{ + this->m_aStyles = other.m_aStyles; +} + +XFStyleContainer& XFStyleContainer::operator=(const XFStyleContainer& other) +{ + this->m_strStyleNamePrefix = other.m_strStyleNamePrefix; + this->m_aStyles = other.m_aStyles; + return *this; +} + +XFStyleContainer::~XFStyleContainer() +{ + std::vector<IXFStyle*>::iterator it; + for( it = m_aStyles.begin(); it != m_aStyles.end(); it++ ) + { + IXFStyle *pStyle = *it; + if( pStyle ) + delete pStyle; + } +} + + +void XFStyleContainer::Reset() +{ + std::vector<IXFStyle*>::iterator it; + + for( it = m_aStyles.begin(); it != m_aStyles.end(); it++ ) + { + IXFStyle *pStyle = *it; + if( pStyle ) + delete pStyle; + } + m_aStyles.clear(); +} + +IXFStyle* XFStyleContainer::AddStyle(IXFStyle *pStyle) +{ + IXFStyle *pConStyle = NULL; + rtl::OUString name; + + if( !pStyle ) + return NULL; + //no matter we want to delete the style or not,XFFont obejct should be saved first. + ManageStyleFont(pStyle); + + if( pStyle->GetStyleName().getLength()==0 ) + pConStyle = FindSameStyle(pStyle); + + if( pConStyle )//such a style has exist: + { + delete pStyle; + return pConStyle; + } + else + { + if( pStyle->GetStyleName().getLength() == 0 ) + { + name = m_strStyleNamePrefix + Int32ToOUString(m_aStyles.size()+1); + pStyle->SetStyleName(name); + } + else + { + name = pStyle->GetStyleName(); + //for name conflict + if(FindStyle( name)) + { + name = name + Int32ToOUString(m_aStyles.size()+1); + pStyle->SetStyleName(name); + } + } + + + m_aStyles.push_back(pStyle); + //transform the font object to XFFontFactory + + return pStyle; + } +} + +IXFStyle* XFStyleContainer::FindSameStyle(IXFStyle *pStyle) +{ + std::vector<IXFStyle*>::iterator it; + for( it = m_aStyles.begin(); it != m_aStyles.end(); it++ ) + { + IXFStyle *pConStyle = *it; + if( !pConStyle ) + continue; + + if( pConStyle->Equal(pStyle) ) + return pConStyle; + } + + return NULL; +} + +IXFStyle* XFStyleContainer::FindStyle(rtl::OUString name) +{ + std::vector<IXFStyle*>::iterator it; + for( it = m_aStyles.begin(); it != m_aStyles.end(); it++ ) + { + IXFStyle *pConStyle = *it; + if( !pConStyle ) + continue; + + if( pConStyle->GetStyleName() == name ) + return pConStyle; + } + + return NULL; +} + +IXFStyle* XFStyleContainer::Item(int index) +{ + assert(index>=0&&index<m_aStyles.size()); + if( index >=0 && index < m_aStyles.size() ) + { + return m_aStyles[index]; + } + return NULL; +} + +void XFStyleContainer::ToXml(IXFStream *pStrm) +{ + std::vector<IXFStyle*>::iterator it; + + for( it = m_aStyles.begin(); it != m_aStyles.end(); it++ ) + { + IXFStyle *pStyle = *it; + + assert(pStyle); + if( !pStyle ) + continue; + + pStyle->ToXml(pStrm); + } +} + + +void XFStyleContainer::ManageStyleFont(IXFStyle *pStyle) +{ + XFFont *pStyleFont = NULL; + XFFont *pFactoryFont = NULL; + + if( !pStyle ) + return; + + if( pStyle->GetStyleFamily() == enumXFStyleText ) + { + XFTextStyle *pTS = (XFTextStyle*)pStyle; + pStyleFont = pTS->GetFont(); + if( !pStyleFont ) + return; + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + XFFontFactory* pFontFactory = pGlobal->GetXFFontFactory(); + pFactoryFont = pFontFactory->FindSameFont(pStyleFont); + //this font has been exists in the factory: + if( pFactoryFont ) + { + pTS->SetFont(pFactoryFont); + if( pStyleFont != pFactoryFont ) + delete pStyleFont; + } + else + { + pFontFactory->AddFont(pStyleFont); + } + } + else if( pStyle->GetStyleFamily() == enumXFStylePara ) + { + XFParaStyle *pPS = (XFParaStyle*)pStyle; + pStyleFont = pPS->GetFont(); + if( !pStyleFont ) + return; + LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance(); + XFFontFactory* pFontFactory = pGlobal->GetXFFontFactory(); + pFactoryFont = pFontFactory->FindSameFont(pStyleFont); + //this font has been exists in the factory: + if( pFactoryFont ) + { + pPS->SetFont(pFactoryFont); + if( pFactoryFont != pStyleFont ) + delete pStyleFont; + } + else + { + pFontFactory->AddFont(pStyleFont); + } + } +} + +bool operator==(XFStyleContainer& b1, XFStyleContainer& b2) +{ + if( b1.m_strStyleNamePrefix != b2.m_strStyleNamePrefix ) + return false; + if( b1.m_aStyles.size() != b2.m_aStyles.size() ) + return false; + for( int i=0; i<b1.m_aStyles.size(); i++ ) + { + IXFStyle *pS1 = b1.m_aStyles[i]; + IXFStyle *pS2 = b2.m_aStyles[i]; + + if( pS1 ) + { + if( !pS2 ) + return false; + if( !pS1->Equal(pS2) ) + return false; + } + else + { + if( pS2 ) + return false; + } + } + return true; +} + +bool operator!=(XFStyleContainer& b1, XFStyleContainer& b2) +{ + return !(b1==b2); +} diff --git a/lotuswordpro/source/filter/xfilter/xfstylecont.hxx b/lotuswordpro/source/filter/xfilter/xfstylecont.hxx new file mode 100644 index 000000000000..e6612e44c78f --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfstylecont.hxx @@ -0,0 +1,139 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Style container,which response for special style,ie. text style. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#ifndef _XFSTYLECONTAINER_HXX +#define _XFSTYLECONTAINER_HXX + +#include "xfglobal.hxx" +#include <vector> + +class IXFStyle; + +/** + * @descr container obejct for styles. + * All styles can be placed into an style container. + */ +class XFStyleContainer : public IXFObject +{ +public: + XFStyleContainer(){}; + + XFStyleContainer(const rtl::OUString& strStyleNamePrefix); + + XFStyleContainer(const XFStyleContainer& other); + + XFStyleContainer& operator=(const XFStyleContainer& other); + + virtual ~XFStyleContainer(); + +public: + /** + * @descr Add style to container. + * If the same style has exist, then pStyle will be deleted, and the same style will be return. + */ + IXFStyle* AddStyle(IXFStyle *pStyle); + + /** + * @descr Find the same style. + */ + IXFStyle* FindSameStyle(IXFStyle *pStyle); + + /** + * @descr get style by name. + */ + IXFStyle* FindStyle(rtl::OUString name); + + /** + * @descr clear container. + */ + void Reset(); + + /** + * @descr get count of styles in the container. + */ + sal_Int32 GetCount(); + + /** + * @descr get style by index. + */ + IXFStyle* Item(int index); + + /** + * @descr Output all style. + */ + virtual void ToXml(IXFStream *pStrm); + + friend bool operator==(XFStyleContainer& b1, XFStyleContainer& b2); + friend bool operator!=(XFStyleContainer& b1, XFStyleContainer& b2); +private: + static void ManageStyleFont(IXFStyle *pStyle); +private: + std::vector<IXFStyle*> m_aStyles; + rtl::OUString m_strStyleNamePrefix; +}; + +inline sal_Int32 XFStyleContainer::GetCount() +{ + return m_aStyles.size(); +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfstylefamily.hxx b/lotuswordpro/source/filter/xfilter/xfstylefamily.hxx new file mode 100644 index 000000000000..915b83f88e29 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfstylefamily.hxx @@ -0,0 +1,71 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _XFSTYLEFAMILY_HXX +#define _XFSTYLEFAMILY_HXX + +enum enumXFStyleFamily +{ + enumXFStyleUnknown, + enumXFStyleText, + enumXFStylePara, + enumXFStyleList, + enumXFStyleSection, + enumXFStyleGraphics, + enumXFStylePageMaster, + enumXFStyleMasterPage, + enumXFStyleDate +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfstylemanager.cxx b/lotuswordpro/source/filter/xfilter/xfstylemanager.cxx new file mode 100644 index 000000000000..38d3eaf4ca26 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfstylemanager.cxx @@ -0,0 +1,387 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Style manager for the filter. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#include "xfstylemanager.hxx" +#include "ixfstyle.hxx" + +XFStyleManager::XFStyleManager() : s_aStdArrowStyles( A2OUSTR("arrow") ),s_aListStyles( A2OUSTR("L") ), + s_aTextStyles( A2OUSTR("T") ),s_aParaStyles( A2OUSTR("P") ),s_aSectionStyles( A2OUSTR("Sect") ), + s_aPageMasters( A2OUSTR("PM") ),s_aMasterpages( A2OUSTR("MP") ),s_aDateStyles( A2OUSTR("N") ), + s_aGraphicsStyles( A2OUSTR("fr") ),s_aTableStyles( A2OUSTR("table") ),s_aTableCellStyles( A2OUSTR("cell") ), + s_aTableRowStyles( A2OUSTR("row") ),s_aTableColStyles( A2OUSTR("col") ),s_pOutlineStyle(NULL) +{ +} + +XFStyleManager::~XFStyleManager() +{ + Reset(); +} + +void XFStyleManager::Reset() +{ + if( s_pOutlineStyle ) + { + delete s_pOutlineStyle; + s_pOutlineStyle = NULL; + } + + s_aStdTextStyles.Reset(); + s_aStdParaStyles.Reset(); + s_aStdStrokeDashStyles.Reset(); + s_aStdAreaStyles.Reset(); + s_aStdArrowStyles.Reset(); + s_aTextStyles.Reset(); + s_aParaStyles.Reset(); + s_aListStyles.Reset(); + s_aSectionStyles.Reset(); + s_aPageMasters.Reset(); + s_aMasterpages.Reset(); + s_aDateStyles.Reset(); + s_aGraphicsStyles.Reset(); + s_aConfigManager.Reset(); + //must clear all static containers. + s_aFontDecls.clear(); +} + +void XFStyleManager::AddFontDecl(rtl::OUString name, rtl::OUString family, sal_Bool fixed) +{ + s_aFontDecls.push_back( XFFontDecl(name, family, fixed) ); +} + +void XFStyleManager::AddFontDecl(XFFontDecl& aFontDecl) +{ + s_aFontDecls.push_back(aFontDecl); +} + +IXFStyle* XFStyleManager::AddStyle(IXFStyle *pStyle) +{ + assert(pStyle); + rtl::OUString name; + IXFStyle *pStyleRet = NULL; + + if( !pStyle ) + return NULL; + name = pStyle->GetStyleName(); + + if( pStyle->GetStyleFamily() == enumXFStyleText ) + { + if( name.getLength() ) + { + pStyleRet = s_aStdTextStyles.AddStyle(pStyle); + } + else + pStyleRet = s_aTextStyles.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStylePara ) + { + if( name.getLength() ) + { + pStyleRet = s_aStdParaStyles.AddStyle(pStyle); + } + else + pStyleRet = s_aParaStyles.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStyleDefaultPara ) + { + pStyleRet = s_aStdParaStyles.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStyleList ) + { + pStyleRet = s_aListStyles.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStyleSection ) + { + pStyleRet = s_aSectionStyles.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStylePageMaster ) + { + pStyleRet = s_aPageMasters.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStyleMasterPage ) + { + //Master page don't need name. + pStyleRet = s_aMasterpages.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStyleDate ) + { + pStyleRet = s_aDateStyles.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStyleTime ) + { + pStyleRet = s_aDateStyles.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStyleNumber ) + { + pStyleRet = s_aDateStyles.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStylePercent ) + { + pStyleRet = s_aDateStyles.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStyleCurrency ) + { + pStyleRet = s_aDateStyles.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStyleGraphics ) + { + pStyleRet = s_aGraphicsStyles.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStyleTable ) + { + pStyleRet = s_aTableStyles.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStyleTableCell ) + { + pStyleRet = s_aTableCellStyles.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStyleTableRow ) + { + pStyleRet = s_aTableRowStyles.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStyleTableCol ) + { + pStyleRet = s_aTableColStyles.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStyleOutline ) + { + if( s_pOutlineStyle ) + delete s_pOutlineStyle; + s_pOutlineStyle = pStyle; + } + else if( pStyle->GetStyleFamily() == enumXFStyleStrokeDash ) + { + pStyleRet = s_aStdStrokeDashStyles.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStyleArea ) + { + pStyleRet = s_aStdAreaStyles.AddStyle(pStyle); + } + else if( pStyle->GetStyleFamily() == enumXFStyleArrow ) + { + pStyleRet = s_aStdArrowStyles.AddStyle(pStyle); + } + else if (pStyle->GetStyleFamily() == enumXFStyleRuby) + { + pStyleRet = s_aRubyStyles.AddStyle(pStyle); + } + + return pStyleRet; +} + +IXFStyle* XFStyleManager::FindStyle(rtl::OUString name) +{ + IXFStyle *pStyle = (IXFStyle*)FindParaStyle(name); + if( pStyle ) + return pStyle; + pStyle = (IXFStyle*)FindTextStyle(name); + if( pStyle ) + return pStyle; + pStyle = s_aListStyles.FindStyle(name); + if( pStyle ) + return pStyle; + pStyle = s_aSectionStyles.FindStyle(name); + if( pStyle ) + return pStyle; + pStyle = s_aPageMasters.FindStyle(name); + if( pStyle ) + return pStyle; + pStyle = s_aMasterpages.FindStyle(name); + if( pStyle ) + return pStyle; + pStyle = s_aDateStyles.FindStyle(name); + if( pStyle ) + return pStyle; + pStyle = s_aGraphicsStyles.FindStyle(name); + if( pStyle ) + return pStyle; + pStyle = s_aTableStyles.FindStyle(name); + if( pStyle ) + return pStyle; + pStyle = s_aTableCellStyles.FindStyle(name); + if( pStyle ) + return pStyle; + pStyle = s_aTableRowStyles.FindStyle(name); + if( pStyle ) + return pStyle; + pStyle = s_aTableColStyles.FindStyle(name); + if( pStyle ) + return pStyle; + if(s_pOutlineStyle && s_pOutlineStyle->GetStyleName() == name ) + return s_pOutlineStyle; + pStyle = s_aStdStrokeDashStyles.FindStyle(name); + if( pStyle ) + return pStyle; + pStyle = s_aStdAreaStyles.FindStyle(name); + if( pStyle ) + return pStyle; + pStyle = s_aStdArrowStyles.FindStyle(name); + if( pStyle ) + return pStyle; + + return NULL; +} + +XFParaStyle* XFStyleManager::FindParaStyle(rtl::OUString name) +{ + IXFStyle *pStyle = s_aParaStyles.FindStyle(name); + if( pStyle ) + return (XFParaStyle*)pStyle; + else + return (XFParaStyle*)s_aStdParaStyles.FindStyle(name); +} + +XFTextStyle* XFStyleManager::FindTextStyle(rtl::OUString name) +{ + IXFStyle *pStyle = s_aTextStyles.FindStyle(name); + if( pStyle ) + return (XFTextStyle*)pStyle; + else + return (XFTextStyle*)s_aStdTextStyles.FindStyle(name); +} + +void XFStyleManager::SetLineNumberConfig(XFLineNumberConfig *pLNConf) +{ + s_aConfigManager.SetLineNumberConfig(pLNConf); +} + +void XFStyleManager::SetFootnoteConfig(XFFootnoteConfig *pFNConfig) +{ + s_aConfigManager.SetFootnoteConfig(pFNConfig); +} + +void XFStyleManager::SetEndnoteConfig(XFEndnoteConfig *pENConfig) +{ + s_aConfigManager.SetEndnoteConfig(pENConfig); +} + +void XFStyleManager::ToXml(IXFStream *pStrm) +{ + std::vector<XFFontDecl>::iterator itDecl; + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("office:font-decls") ); + + //font declarations: + for( itDecl = s_aFontDecls.begin(); itDecl != s_aFontDecls.end(); itDecl++ ) + { + XFFontDecl &f = *itDecl; + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("style:name"), f.GetFontName() ); + pAttrList->AddAttribute( A2OUSTR("fo:font-family"), f.GetFontFamily() ); + if( f.GetFontPitchFixed() ) + pAttrList->AddAttribute( A2OUSTR("style:font-pitch"), A2OUSTR("fixed") ); + else + pAttrList->AddAttribute( A2OUSTR("style:font-pitch"), A2OUSTR("variable") ); + pStrm->StartElement( A2OUSTR("style:font-decl") ); + pStrm->EndElement( A2OUSTR("style:font-decl") ); + } + + pStrm->EndElement( A2OUSTR("office:font-decls") ); + + //office:styles: + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("office:styles") ); + + s_aStdParaStyles.ToXml(pStrm); + s_aStdTextStyles.ToXml(pStrm); + s_aStdStrokeDashStyles.ToXml(pStrm); + s_aStdAreaStyles.ToXml(pStrm); + s_aStdArrowStyles.ToXml(pStrm); + //date,time styles: + s_aDateStyles.ToXml(pStrm); + s_aConfigManager.ToXml(pStrm); + //for optimist. + s_aListStyles.ToXml(pStrm); + + if( s_pOutlineStyle ) + s_pOutlineStyle->ToXml(pStrm); + + pStrm->EndElement( A2OUSTR("office:styles") ); + + //automatic styles: + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("office:automatic-styles") ); + + s_aTableStyles.ToXml(pStrm); + s_aTableCellStyles.ToXml(pStrm); + s_aTableRowStyles.ToXml(pStrm); + s_aTableColStyles.ToXml(pStrm); + s_aParaStyles.ToXml(pStrm); + s_aTextStyles.ToXml(pStrm); + s_aSectionStyles.ToXml(pStrm); + s_aPageMasters.ToXml(pStrm); + s_aRubyStyles.ToXml(pStrm); + //graphics: + s_aGraphicsStyles.ToXml(pStrm); + + pStrm->EndElement( A2OUSTR("office:automatic-styles") ); + + //master:styles + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("office:master-styles") ); + //masters pages: + s_aMasterpages.ToXml(pStrm); + + pStrm->EndElement( A2OUSTR("office:master-styles") ); +} diff --git a/lotuswordpro/source/filter/xfilter/xfstylemanager.hxx b/lotuswordpro/source/filter/xfilter/xfstylemanager.hxx new file mode 100644 index 000000000000..1b149da97c0d --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfstylemanager.hxx @@ -0,0 +1,148 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Style manager for the filter. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#ifndef _XFSTYLEMANAGER_HXX +#define _XFSTYLEMANAGER_HXX + +#include "xfglobal.hxx" +#include "xffontdecl.hxx" +#include "xfstylecont.hxx" +#include "xfconfigmanager.hxx" +#include <map> +#include <vector> + +class IXFStream; +class IXFStyle; +class XFOutlineStyle; +class XFParaStyle; +class XFTextStyle; +class XFLineNumberConfig; +class XFFootnoteConfig; +class XFEndnoteConfig; + +/** + * @brief + * Style manager for the filter. + * This is a global obejct, all styles will be placed here before output. + */ +class XFStyleManager// : public IXFObject +{ +public: + XFStyleManager(); + ~XFStyleManager(); + XFStyleManager(XFStyleManager& other){} + + XFStyleManager operator=(XFStyleManager& other){} + +public: + /** + * @descr clear all styles, called before load file. + */ + void Reset(); + + void AddFontDecl(XFFontDecl& aFontDecl); + + void AddFontDecl(rtl::OUString name, rtl::OUString family, sal_Bool fixed = false); + + IXFStyle* AddStyle(IXFStyle *pStyle); + + IXFStyle* FindStyle(rtl::OUString name); + + XFParaStyle* FindParaStyle(rtl::OUString name); + + XFTextStyle* FindTextStyle(rtl::OUString name); + + void SetLineNumberConfig(XFLineNumberConfig *pLNConfig); + + void SetFootnoteConfig(XFFootnoteConfig *pFNConfig); + + void SetEndnoteConfig(XFEndnoteConfig *pFNConfig); + + void ToXml(IXFStream *strm); + +private: + std::vector<XFFontDecl> s_aFontDecls; + //standard styles that can be inherited,<office:styles> + XFStyleContainer s_aStdTextStyles; + XFStyleContainer s_aStdParaStyles; + XFStyleContainer s_aStdStrokeDashStyles; + XFStyleContainer s_aStdAreaStyles; + XFStyleContainer s_aStdArrowStyles; + XFConfigManager s_aConfigManager; + //automatic styles,<office:automatic-styles> + XFStyleContainer s_aTextStyles; + XFStyleContainer s_aParaStyles; + XFStyleContainer s_aListStyles; + XFStyleContainer s_aSectionStyles; + XFStyleContainer s_aPageMasters; + XFStyleContainer s_aMasterpages; + XFStyleContainer s_aDateStyles; + XFStyleContainer s_aGraphicsStyles; + XFStyleContainer s_aTableStyles; + XFStyleContainer s_aTableCellStyles; + XFStyleContainer s_aTableRowStyles; + XFStyleContainer s_aTableColStyles; + IXFStyle *s_pOutlineStyle; + XFStyleContainer s_aRubyStyles; +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xfsubject.hxx b/lotuswordpro/source/filter/xfilter/xfsubject.hxx new file mode 100644 index 000000000000..f08470416c93 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfsubject.hxx @@ -0,0 +1,85 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Page number field. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-31 create this file. + ************************************************************************/ +#ifndef _XFSUBJECT_HXX +#define _XFSUBJECT_HXX + +#include "xfglobal.hxx" +#include "xfcontent.hxx" +#include "xfnumfmt.hxx" + +class XFSubject : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +inline void XFSubject::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pStrm->StartElement( A2OUSTR("text:subject") ); + pStrm->EndElement( A2OUSTR("text:subject") ); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xftable.cxx b/lotuswordpro/source/filter/xfilter/xftable.cxx new file mode 100644 index 000000000000..6ad9ef94bc3a --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftable.cxx @@ -0,0 +1,319 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Table object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-24 create and implements. + ************************************************************************/ +#include "xftable.hxx" +#include "xfrow.hxx" +#include "xfcolstyle.hxx" +#include "xfstylemanager.hxx" +#include <cassert> + +XFTable::XFTable() +{ + m_strName = XFGlobal::GenTableName(); + m_bSubTable = sal_False; + m_pOwnerCell = NULL; +} + +XFTable::XFTable(const XFTable& other) +{ + m_strName = other.m_strName; + m_bSubTable = other.m_bSubTable; + m_pOwnerCell = NULL; + for( int i=1; i<=other.m_aHeaderRows.GetCount(); i++ ) + { + XFRow *pRow = (XFRow*)other.m_aHeaderRows.GetContent(i+1); + if( pRow ) + { + m_aHeaderRows.Add( new XFRow(*pRow) ); + } + } + + m_aColumns = other.m_aColumns; + m_strDefCellStyle = other.m_strDefCellStyle; + m_strDefRowStyle = other.m_strDefRowStyle; + m_strDefColStyle = other.m_strDefColStyle; +} + +XFTable& XFTable::operator =(const XFTable& other) +{ + m_strName = other.m_strName; + m_bSubTable = other.m_bSubTable; + m_pOwnerCell = NULL; + for( int i=1; i<=other.m_aHeaderRows.GetCount(); i++ ) + { + XFRow *pRow = (XFRow*)other.m_aHeaderRows.GetContent(i); + if( pRow ) + { + m_aHeaderRows.Add( new XFRow(*pRow) ); + } + } + + m_aColumns = other.m_aColumns; + m_strDefCellStyle = other.m_strDefCellStyle; + m_strDefRowStyle = other.m_strDefRowStyle; + m_strDefColStyle = other.m_strDefColStyle; + return *this; +} + + + +XFTable::~XFTable() +{ + std::map<sal_Int32,XFRow*>::iterator it; + for( it=m_aRows.begin(); it!=m_aRows.end(); it++ ) + { + XFRow *pRow = (*it).second; + if( pRow ) + delete pRow; + } + m_aRows.clear(); + m_aColumns.clear(); +} + +void XFTable::SetColumnStyle(sal_Int32 col, rtl::OUString style) +{ + m_aColumns[col] = style; +} + +void XFTable::AddRow(XFRow *pRow) +{ + assert(pRow); + if( !pRow ) + return; + + int row = pRow->GetRow(); + + if( row<1 ) + pRow->SetRow(m_aRows.size()+1); + + row = pRow->GetRow(); + if( m_aRows.find(row) != m_aRows.end() ) + delete m_aRows[row]; + + pRow->SetOwnerTable(this); + m_aRows[row] = pRow; +} + +void XFTable::AddHeaderRow(XFRow *pRow) +{ + if( !pRow ) + return; + m_aHeaderRows.Add(pRow); +} + +rtl::OUString XFTable::GetTableName() +{ + if( m_bSubTable ) + { + return m_pOwnerCell->GetCellName(); + } + else + return m_strName; +} + +sal_Int32 XFTable::GetRowCount() +{ + sal_Int32 rowMax = -1; + std::map<sal_Int32,XFRow*>::iterator it; + for( it=m_aRows.begin(); it!=m_aRows.end(); it++ ) + { + if( it->first>rowMax ) + rowMax = it->first; + } + + return rowMax; +/* + if( m_aRows.size()<1 ) + return 0; + std::map<sal_Int32,XFRow*>::iterator it = m_aRows.end(); + it--; + return it->first;*/ +} + +XFRow* XFTable::GetRow(sal_Int32 row) +{ + return m_aRows[row]; +} + +sal_Int32 XFTable::GetColumnCount() +{ + int colMax = -1; + std::map<sal_Int32,rtl::OUString>::iterator it; + for( it=m_aColumns.begin(); it!=m_aColumns.end(); it++ ) + { + if( it->first>colMax ) + colMax = it->first; + } + return colMax; +/* + if( m_aColumns.size()<1 ) + return 0; + std::map<sal_Int32,rtl::OUString>::iterator it = m_aColumns.end(); + it--; + return it->first;*/ +} + +rtl::OUString XFTable::GetColumnStyle(sal_Int32 col) +{ + if( m_aColumns.find(col) != m_aColumns.end() ) + return m_aColumns[col]; + return A2OUSTR(""); +} + +enumXFContent XFTable::GetContentType() +{ + return enumXFContentTable; +} + +void XFTable::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + //sub table shouldn't use table name. + if( !m_bSubTable ) + pAttrList->AddAttribute( A2OUSTR("table:name"), m_strName); + + if( GetStyleName().getLength() ) + pAttrList->AddAttribute( A2OUSTR("table:style-name"), GetStyleName() ); + + if( m_bSubTable ) + pStrm->StartElement( A2OUSTR("table:sub-table") ); + else + pStrm->StartElement( A2OUSTR("table:table") ); + + //test code +// sal_Int32 rowMax = GetRowCount(); +// sal_Int32 colMax = GetColumnCount(); + //output columns: + { + int lastCol = 0; + std::map<sal_Int32,rtl::OUString>::iterator it; + for( it=m_aColumns.begin(); it!=m_aColumns.end(); it++ ) + { + sal_Int32 col = (*it).first; + rtl::OUString style = m_aColumns[col]; + + //default col repeated: + if( col >lastCol+1 ) + { + if( col > lastCol + 2 ) + { + if( m_strDefColStyle.getLength() > 0 ) + { + pAttrList->AddAttribute( A2OUSTR("table:style-name"), m_strDefColStyle ); + } + pAttrList->AddAttribute( A2OUSTR("table:number-columns-repeated"), Int32ToOUString(col-lastCol-1) ); + } + pStrm->StartElement( A2OUSTR("table:table-column") ); + pStrm->EndElement( A2OUSTR("table:table-column") ); + } + + if( style.getLength() > 0 ) + { + pAttrList->AddAttribute( A2OUSTR("table:style-name"), style ); + } + pStrm->StartElement( A2OUSTR("table:table-column") ); + pStrm->EndElement( A2OUSTR("table:table-column") ); + lastCol = col; + } + } + + if( m_aHeaderRows.GetCount()>0 ) + { + pStrm->StartElement( A2OUSTR("table:table-header-rows") ); + m_aHeaderRows.ToXml(pStrm); + pStrm->EndElement( A2OUSTR("table:table-header-rows") ); + } + //output rows: + { + int lastRow = 0; + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + std::map<sal_Int32,XFRow* >::iterator it = m_aRows.begin(); + for( ; it!=m_aRows.end(); it++ ) + { + int row = (*it).first; + XFRow *pRow = (*it).second; + + //null row repeated: + if( row>lastRow+1 ) + { + XFRow *pNullRow = new XFRow(); + pNullRow->SetStyleName(m_strDefRowStyle); + if( row>lastRow+2) + pNullRow->SetRepeated(row-lastRow-1); + XFCell *pCell = new XFCell(); + pCell->SetStyleName(m_strDefCellStyle); + pNullRow->AddCell(pCell); + pNullRow->ToXml(pStrm); + } + pRow->ToXml(pStrm); + lastRow = row; + } + } + + if( m_bSubTable ) + pStrm->EndElement( A2OUSTR("table:sub-table") ); + else + pStrm->EndElement( A2OUSTR("table:table") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xftable.hxx b/lotuswordpro/source/filter/xfilter/xftable.hxx new file mode 100644 index 000000000000..5dbd5d4c90fb --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftable.hxx @@ -0,0 +1,171 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Table object. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-24 create and implements. + ************************************************************************/ +#ifndef _XFTABLE_HXX +#define _XFTABLE_HXX + +#include "xfcontent.hxx" +#include "xfrow.hxx" +#include "xfcell.hxx" +#include "xfcontentcontainer.hxx" +#include <map> +#include <vector> + +class XFTable : public XFContent +{ +public: + XFTable(); + + XFTable(const XFTable& other); + + XFTable& operator=(const XFTable& other); + + virtual ~XFTable(); + +public: + void SetTableName(rtl::OUString name); + + void SetColumnStyle(sal_Int32 col, rtl::OUString style); + + void AddRow(XFRow *pRow); + + void AddHeaderRow(XFRow *pRow); + + void SetDefaultCellStyle(rtl::OUString style); + + void SetDefaultRowStyle(rtl::OUString style); + + void SetDefaultColStyle(rtl::OUString style); + +public: + void SetOwnerCell(XFCell *pCell); + + rtl::OUString GetTableName(); + + sal_Int32 GetRowCount(); + + XFRow* GetRow(sal_Int32 row); + + sal_Int32 GetColumnCount(); + + rtl::OUString GetColumnStyle(sal_Int32 col); + + sal_Bool IsSubTable(); + + void Normalize(); + + enumXFContent GetContentType(); + + virtual void ToXml(IXFStream *pStrm); + + void RemoveRow(sal_Int32 row); + +private: + rtl::OUString m_strName; + sal_Bool m_bSubTable; + XFCell *m_pOwnerCell; + XFContentContainer m_aHeaderRows; + std::map<sal_Int32,XFRow*> m_aRows; + std::map<sal_Int32,rtl::OUString> m_aColumns; + rtl::OUString m_strDefCellStyle; + rtl::OUString m_strDefRowStyle; + rtl::OUString m_strDefColStyle; +}; + +inline void XFTable::SetTableName(rtl::OUString name) +{ + m_strName = name; +} + +inline void XFTable::SetOwnerCell(XFCell *pCell) +{ + m_pOwnerCell = pCell; + m_bSubTable = (pCell!=NULL); +} + +inline sal_Bool XFTable::IsSubTable() +{ + return m_bSubTable; +} + + +inline void XFTable::SetDefaultCellStyle(rtl::OUString style) +{ + m_strDefCellStyle = style; +} + +inline void XFTable::SetDefaultRowStyle(rtl::OUString style) +{ + m_strDefRowStyle = style; +} + +inline void XFTable::SetDefaultColStyle(rtl::OUString style) +{ + m_strDefColStyle = style; +} + +inline void XFTable::RemoveRow(sal_Int32 row) +{ + m_aRows.erase(row); +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xftablestyle.cxx b/lotuswordpro/source/filter/xfilter/xftablestyle.cxx new file mode 100644 index 000000000000..6b5d20ea2501 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftablestyle.cxx @@ -0,0 +1,139 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Table style. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-24 create and implements. + ************************************************************************/ +#include "xftablestyle.hxx" +#include "xfbgimage.hxx" + +XFTableStyle::XFTableStyle() +{ + m_fWidth = 2; + m_eAlign = enumXFAlignStart; + m_pBGImage = NULL; +} + +XFTableStyle::~XFTableStyle() +{ + if( m_pBGImage ) + delete m_pBGImage; +} + +void XFTableStyle::SetBackImage(XFBGImage *pImage) +{ + if( m_pBGImage ) + delete m_pBGImage; + + m_pBGImage = pImage; +} + +enumXFStyle XFTableStyle::GetStyleFamily() +{ + return enumXFStyleTable; +} + +void XFTableStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pAttrList->AddAttribute( A2OUSTR("style:name"), GetStyleName() ); + if( GetParentStyleName().getLength() > 0 ) + pAttrList->AddAttribute(A2OUSTR("style:parent-style-name"),GetParentStyleName()); + pAttrList->AddAttribute( A2OUSTR("style:family"), A2OUSTR("table") ); + pStrm->StartElement( A2OUSTR("style:style") ); + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("style:width"), DoubleToOUString(m_fWidth) + A2OUSTR("cm") ); + //text align: + if( m_eAlign == enumXFAlignStart ) + { + pAttrList->AddAttribute(A2OUSTR("table:align"),A2OUSTR("left")); + } + else if( m_eAlign == enumXFAlignCenter ) + { + pAttrList->AddAttribute(A2OUSTR("table:align"),A2OUSTR("center")); + } + else if( m_eAlign == enumXFAlignEnd ) + { + pAttrList->AddAttribute(A2OUSTR("table:align"),A2OUSTR("right")); + } + else if( m_eAlign == enumXFALignMargins ) + { + pAttrList->AddAttribute(A2OUSTR("table:align"),A2OUSTR("margins")); + } + //background color: + if( m_aBackColor.IsValid() && !m_pBGImage ) + pAttrList->AddAttribute(A2OUSTR("fo:background-color"), m_aBackColor.ToString() ); + //shadow: + m_aShadow.ToXml(pStrm); + //margin: + m_aMargins.ToXml(pStrm); + //breaks: + m_aBreaks.ToXml(pStrm); + + pStrm->StartElement( A2OUSTR("style:properties") ); + if( m_pBGImage ) + m_pBGImage->ToXml(pStrm); + + pStrm->EndElement( A2OUSTR("style:properties") ); + + pStrm->EndElement( A2OUSTR("style:style") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xftablestyle.hxx b/lotuswordpro/source/filter/xfilter/xftablestyle.hxx new file mode 100644 index 000000000000..0614a9d94d20 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftablestyle.hxx @@ -0,0 +1,155 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Table style. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-24 create and implements. + ************************************************************************/ +#ifndef _XFTABLESTYLE_HXX +#define _XFTABLESTYLE_HXX + +#include "xfstyle.hxx" +#include "xfmargins.hxx" +#include "xfshadow.hxx" +#include "xfcolor.hxx" +#include "xfbreaks.hxx" + +class XFBGImage; +class XFTableStyle : public XFStyle +{ +public: + XFTableStyle(); + + virtual ~XFTableStyle(); + +public: + void SetWidth(double width); + + void SetAlign(enumXFAlignType eAlign, double offset = 0); + + void SetShadow(enumXFShadowPos pos, double offset = 0.18, XFColor color=XFColor(128,128,0) ); + + void SetMargins(double left=-1, double right=-1, double top=-1, double bottom=-1); + + void SetBackColor(XFColor& color); + + void SetBackImage(XFBGImage *pImage); + + void SetBreaks(enumXFBreaks breaks); + + virtual void ToXml(IXFStream *pStrm); + + virtual enumXFStyle GetStyleFamily(); + +private: + double m_fWidth; + XFColor m_aBackColor; + XFBGImage *m_pBGImage; + XFShadow m_aShadow; + XFMargins m_aMargins; + XFBreaks m_aBreaks; + enumXFAlignType m_eAlign; +}; + +inline void XFTableStyle::SetWidth(double width) +{ + m_fWidth = width; +} + +inline void XFTableStyle::SetAlign(enumXFAlignType eAlign, double offset) +{ + m_eAlign = eAlign; + if( m_eAlign == enumXFAlignStart ) + { + m_aMargins.SetLeft(offset); + m_aMargins.SetRight(0); + m_aMargins.SetTop(0); + m_aMargins.SetBottom(0); + } +} + +inline void XFTableStyle::SetShadow(enumXFShadowPos pos, double offset, XFColor color) +{ + m_aShadow.SetColor(color); + m_aShadow.SetOffset(offset); + m_aShadow.SetPosition(pos); +} + +inline void XFTableStyle::SetMargins(double left, double right, double top, double bottom) +{ + if( left != -1 ) + m_aMargins.SetLeft(left); + if( right != -1 ) + m_aMargins.SetRight(right); + if( top != -1 ) + m_aMargins.SetTop(top); + if( bottom != -1 ) + m_aMargins.SetBottom(bottom); +} + +inline void XFTableStyle::SetBackColor(XFColor& color) +{ + m_aBackColor = color; +} + +inline void XFTableStyle::SetBreaks(enumXFBreaks breaks) +{ + m_aBreaks.SetBreakType(breaks); +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xftabstop.hxx b/lotuswordpro/source/filter/xfilter/xftabstop.hxx new file mode 100644 index 000000000000..c5a03ddd11d9 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftabstop.hxx @@ -0,0 +1,84 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************** + * @file + * Tab stop object,<text:tab-stop/> + *************************************************************************/ +/************************************************************************** + * Change History + * 2004-01-11 create this file. + *************************************************************************/ +#ifndef _XFTABSTOP_HXX +#define _XFTABSTOP_HXX + +#include "xfglobal.hxx" +#include "xfcontent.hxx" + +class XFTabStop : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +inline void XFTabStop::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("text:tab-stop") ); + pStrm->EndElement( A2OUSTR("text:tab-stop") ); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xftabstyle.cxx b/lotuswordpro/source/filter/xfilter/xftabstyle.cxx new file mode 100644 index 000000000000..c2896df291fb --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftabstyle.cxx @@ -0,0 +1,102 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Tab style for paragraph.include tab offset and tab char properties. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-27 create this file. + ************************************************************************/ +#include "xftabstyle.hxx" + +XFTabStyle::XFTabStyle() +{ + m_eType = enumXFTabNone; + m_fLength = 0; +} + +void XFTabStyle::ToXml(IXFStream *pStrm) +{ + assert(m_fLength>0); + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pAttrList->AddAttribute( A2OUSTR("style:position"), DoubleToOUString(m_fLength) + A2OUSTR("cm") ); + switch(m_eType) + { + case enumXFTabLeft: + pAttrList->AddAttribute( A2OUSTR("style:type"), A2OUSTR("left") ); + break; + case enumXFTabCenter: + pAttrList->AddAttribute( A2OUSTR("style:type"), A2OUSTR("center") ); + break; + case enumXFTabRight: + pAttrList->AddAttribute( A2OUSTR("style:type"), A2OUSTR("right") ); + break; + case enumXFTabChar: + pAttrList->AddAttribute( A2OUSTR("style:type"), A2OUSTR("char") ); + break; + } + //delimiter: + if( m_eType == enumXFTabChar ) + pAttrList->AddAttribute( A2OUSTR("style:char"), m_strDelimiter ); + //leader char: + if( m_strLeader.getLength() ) + pAttrList->AddAttribute( A2OUSTR("style:leader-char"), m_strLeader ); + + pStrm->StartElement( A2OUSTR("style:tab-stop") ); + pStrm->EndElement( A2OUSTR("style:tab-stop") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xftabstyle.hxx b/lotuswordpro/source/filter/xfilter/xftabstyle.hxx new file mode 100644 index 000000000000..ea2774e20651 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftabstyle.hxx @@ -0,0 +1,122 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Tab style for paragraph.include tab offset and tab char properties. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-27 create this file. + ************************************************************************/ +#ifndef _XFTABSSTYLE_HXX +#define _XFTABSSTYLE_HXX + +#include "xfglobal.hxx" +#include "xfstyle.hxx" +#include <vector> + +class XFTabStyle : public XFStyle +{ +public: + XFTabStyle(); + +public: + void SetTabType(enumXFTab type); + + void SetLength(double len); + + void SetDelimiter(sal_Unicode delimiter); + + void SetLeaderChar(sal_Unicode leader); + + virtual void ToXml(IXFStream *pStrm); + +private: + enumXFTab m_eType; + double m_fLength; + rtl::OUString m_strDelimiter; + rtl::OUString m_strLeader; +}; + +inline void XFTabStyle::SetTabType(enumXFTab type) +{ + m_eType = type; +} + +inline void XFTabStyle::SetLength(double len) +{ + m_fLength = len; +} + +inline void XFTabStyle::SetDelimiter(sal_Unicode delimiter) +{ + sal_Unicode chs[2]; + chs[0] = delimiter; + chs[1] = 0; + + m_strDelimiter = rtl::OUString(chs); +} + +inline void XFTabStyle::SetLeaderChar(sal_Unicode leader) +{ + sal_Unicode chs[2]; + chs[0] = leader; + chs[1] = 0; + + m_strLeader = rtl::OUString(chs); +} + + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xftextboxstyle.cxx b/lotuswordpro/source/filter/xfilter/xftextboxstyle.cxx new file mode 100644 index 000000000000..0efa9264a214 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftextboxstyle.cxx @@ -0,0 +1,102 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "xftextboxstyle.hxx" +#include "xfcolumns.hxx" +#include "xfborders.hxx" +#include "xfshadow.hxx" +#include "xfbgimage.hxx" + +XFTextBoxStyle::XFTextBoxStyle() +{ +} + +XFTextBoxStyle::~XFTextBoxStyle() +{ +} + +enumXFStyle XFTextBoxStyle::GetStyleFamily() +{ + return enumXFStyleGraphics; +} + +void XFTextBoxStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("style:name"), GetStyleName() ); + if( GetParentStyleName().getLength() > 0 ) + pAttrList->AddAttribute(A2OUSTR("style:parent-style-name"),GetParentStyleName()); + pAttrList->AddAttribute( A2OUSTR("style:family"), A2OUSTR("graphics") ); + //parent style name ignore now. + pStrm->StartElement( A2OUSTR("style:style") ); + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("draw:stroke"), A2OUSTR("none") ); + pAttrList->AddAttribute( A2OUSTR("svg:stroke-color"), A2OUSTR("#000000") ); + pAttrList->AddAttribute( A2OUSTR("draw:fill"), A2OUSTR("none") ); + pAttrList->AddAttribute( A2OUSTR("draw:fill-color"), A2OUSTR("#ffffff") ); + pAttrList->AddAttribute( A2OUSTR("draw:auto-grow-height"), A2OUSTR("true") ); + pAttrList->AddAttribute( A2OUSTR("style:run-through"), A2OUSTR("foreground") ); + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("run-through") ); + pAttrList->AddAttribute( A2OUSTR("style:wrap"), A2OUSTR("run-through") ); + pAttrList->AddAttribute( A2OUSTR("style:number-wrapped-paragraphs"), A2OUSTR("no-limit") ); + pAttrList->AddAttribute( A2OUSTR("style:wrap-contour"), A2OUSTR("false") ); + + pStrm->StartElement( A2OUSTR("style:properties") ); + pStrm->EndElement( A2OUSTR("style:properties") ); + + pStrm->EndElement( A2OUSTR("style:style") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xftextboxstyle.hxx b/lotuswordpro/source/filter/xfilter/xftextboxstyle.hxx new file mode 100644 index 000000000000..ce1b8c6b47b4 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftextboxstyle.hxx @@ -0,0 +1,89 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _XFTEXTBOXSTYLE_HXX +#define _XFTEXTBOXSTYLE_HXX + +#include "xfglobal.hxx" +#include "xfstyle.hxx" +#include "xfmargins.hxx" +#include "xfcolor.hxx" +#include "xfpadding.hxx" + +class XFBorders; +class XFColumns; +class XFShadow; +class XFBGImage; + +/** +* @brief +* Style for all frame obejcts. +*/ +class XFTextBoxStyle : public XFStyle +{ +public: + XFTextBoxStyle(); + + virtual ~XFTextBoxStyle(); + +public: + + virtual enumXFStyle GetStyleFamily(); + + virtual void ToXml(IXFStream *pStrm); + +protected: +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xftextcontent.cxx b/lotuswordpro/source/filter/xfilter/xftextcontent.cxx new file mode 100644 index 000000000000..9f13cf101666 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftextcontent.cxx @@ -0,0 +1,125 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Text content, it's an adapter for string to IXFObject. + ************************************************************************/ +/************************************************************************* + * Change History + 2005-02-02 create and implemente. + ************************************************************************/ +#include "xftextcontent.hxx" +#include "ixfstream.hxx" + +XFTextContent::XFTextContent(rtl::OUString text):m_strText(text) +{ +} + +XFTextContent::~XFTextContent() +{ +} + +enumXFContent XFTextContent::GetContentType() +{ + return enumXFContentText; +} + +void XFTextContent::SetText(const rtl::OUString& text) +{ + m_strText = text; +} + +rtl::OUString XFTextContent::GetText() +{ + return m_strText; +} + +void XFTextContent::ToXml(IXFStream *pStrm) +{ +// pStrm->Characters(m_strText); + rtl::OUString sSpaceToken = rtl::OUString::createFromAscii(" "); + sSpaceToken += rtl::OUString::createFromAscii(" "); + rtl::OUString sSubString; + sal_Int32 nIndex = 0; + sal_Int32 nSize = m_strText.getLength(); + sal_Int32 i,j; + for (i=0; i<nSize;) + { + sSubString = m_strText.copy(i,nSize-i); + nIndex = sSubString.indexOf(sSpaceToken); + if (nIndex == -1) + { + pStrm->Characters(sSubString); + return; + } + else + { + if (nIndex != 0) + pStrm->Characters(sSubString.copy(0,nIndex)); + for (j=nIndex+1;j<nSize-i;j++) + { + if (sSubString[j] != sal_Char(' ')) + break; + } + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("text:c"), rtl::OUString::valueOf(j-nIndex) ); + pStrm->StartElement( A2OUSTR("text:s") ); + pStrm->EndElement( A2OUSTR("text:s") ); + + i+=j; + } + } +} diff --git a/lotuswordpro/source/filter/xfilter/xftextcontent.hxx b/lotuswordpro/source/filter/xfilter/xftextcontent.hxx new file mode 100644 index 000000000000..fc4d5e576bbe --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftextcontent.hxx @@ -0,0 +1,104 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Text content, it's an adapter for string to IXFObject. + ************************************************************************/ +/************************************************************************* + * Change History + 2005-02-02 create and implemente. + ************************************************************************/ +#ifndef _XFTEXTCONTENT_HXX +#define _XFTEXTCONTENT_HXX + +#include "xfglobal.hxx" +#include "xfcontent.hxx" + +class IXFStream; + +/** + * @brief + * Adapter for text to content. + */ +class XFTextContent : public XFContent +{ +public: + XFTextContent(){} + + XFTextContent(rtl::OUString text); + + virtual ~XFTextContent(); + +public: + /** + * @descr Set the text. + */ + void SetText(const rtl::OUString& text); + + /** + * @descr return the content. + * @return text content. + */ + rtl::OUString GetText(); + + virtual enumXFContent GetContentType(); + + virtual void ToXml(IXFStream *pStrm); + +private: + rtl::OUString m_strText; +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xftextheading.cxx b/lotuswordpro/source/filter/xfilter/xftextheading.cxx new file mode 100644 index 000000000000..f7b71d891e49 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftextheading.cxx @@ -0,0 +1,108 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Heading text for OOo. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-07 create this file. + * 2005-01-10 it works now. + ************************************************************************/ +#include "xftextheading.hxx" +#include "xftextcontent.hxx" + +XFTextHeading::XFTextHeading() +{ + m_pContent = NULL; + m_nLevel = 0; +} + +XFTextHeading::~XFTextHeading() +{ + if( m_pContent ) + delete m_pContent; +} + +enumXFContent XFTextHeading::GetContentType() +{ + return enumXFContentHeading; +} + +void XFTextHeading::SetLevel(sal_Int16 level) +{ + m_nLevel = level; +} + +void XFTextHeading::SetText(rtl::OUString text) +{ + m_pContent = new XFTextContent(text); +} + +void XFTextHeading::ToXml(IXFStream *pStrm) +{ + rtl::OUString style = GetStyleName(); + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + assert(m_nLevel>0); + pAttrList->Clear(); + if( style.getLength() ) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), style ); + pAttrList->AddAttribute( A2OUSTR("text:level"), Int16ToOUString(m_nLevel) ); + + pStrm->StartElement( A2OUSTR("text:h") ); + m_pContent->ToXml(pStrm); + pStrm->EndElement( A2OUSTR("text:h") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xftextheading.hxx b/lotuswordpro/source/filter/xfilter/xftextheading.hxx new file mode 100644 index 000000000000..91320100eb10 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftextheading.hxx @@ -0,0 +1,92 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Heading text for OOo. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-07 create this file. + * 2005-01-10 it works now. + ************************************************************************/ +#ifndef _XFTEXTHEADING_HXX +#define _XFTEXTHEADING_HXX + +#include "xfglobal.hxx" +#include "xfcontent.hxx" + +class XFTextContent; +/** + * @descr + * <text:h> object. It has a single property text:level. + * This object use the same style type with <text:p> + */ +class XFTextHeading : public XFContent +{ +public: + XFTextHeading(); + virtual ~XFTextHeading(); + + void SetLevel(sal_Int16 level); + void SetText(rtl::OUString text); + + virtual enumXFContent GetContentType(); + virtual void ToXml(IXFStream *pStrm); +private: + XFTextContent *m_pContent; + sal_Int16 m_nLevel; +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xftextspan.cxx b/lotuswordpro/source/filter/xfilter/xftextspan.cxx new file mode 100644 index 000000000000..27e7b0418eaf --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftextspan.cxx @@ -0,0 +1,191 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * An span of text with style. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#include "xftextspan.hxx" +#include "ixfstream.hxx" +#include "ixfattrlist.hxx" +#include "xftextcontent.hxx" + +XFTextSpan::XFTextSpan() +{ + +} + +XFTextSpan::XFTextSpan(rtl::OUString& text, + rtl::OUString& style + ) +{ + Add(text); + SetStyleName(style); +} + +XFTextSpan::~XFTextSpan() +{ + std::vector<IXFContent*>::iterator it; + for( it = m_aContents.begin(); it != m_aContents.end(); it++ ) + { + IXFContent *pContent = *it; + if( pContent ) + { + delete pContent; + } + } + m_aContents.clear(); +} + +enumXFContent XFTextSpan::GetContentType() +{ + return enumXFContentSpan; +} + +void XFTextSpan::SetText(rtl::OUString& text) +{ + m_aContents.clear(); + Add(text); +} + +rtl::OUString XFTextSpan::GetText() +{ + rtl::OUString text; + std::vector<IXFContent*>::iterator it; + + it = m_aContents.begin(); + if( it != m_aContents.end() ) + { + IXFContent *pContent = *it; + if( pContent->GetContentType() != enumXFContentText ) + { + assert(false); + } + XFTextContent *pText = (XFTextContent*)pContent; + if( pText ) + text = pText->GetText(); + } + + return text; +} + +void XFTextSpan::Add(IXFContent *pContent) +{ + m_aContents.push_back(pContent); +} + +void XFTextSpan::Add(rtl::OUString& text) +{ + IXFContent *pText = new XFTextContent(text); + Add(pText); +} + +void XFTextSpan::ToXml(IXFStream *pStrm) +{ + rtl::OUString style = GetStyleName(); + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + assert(pAttrList); + + pAttrList->Clear(); + if( style.getLength() ) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), GetStyleName() ); + pStrm->StartElement( A2OUSTR("text:span") ); + + std::vector<IXFContent*>::iterator it; + for( it= m_aContents.begin(); it!= m_aContents.end(); it++ ) + { + IXFContent *pContent = *it; + if( pContent ) + pContent->ToXml(pStrm); + } + + pStrm->EndElement( A2OUSTR("text:span") ); +} + +void XFTextSpanStart::ToXml(IXFStream *pStrm) +{ + rtl::OUString style = GetStyleName(); + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + assert(pAttrList); + + pAttrList->Clear(); + if( style.getLength() ) + pAttrList->AddAttribute( A2OUSTR("text:style-name"), GetStyleName() ); + pStrm->StartElement( A2OUSTR("text:span") ); + + std::vector<IXFContent*>::iterator it; + for( it= m_aContents.begin(); it!= m_aContents.end(); it++ ) + { + IXFContent *pContent = *it; + if( pContent ) + pContent->ToXml(pStrm); + } +} +void XFTextSpanEnd::ToXml(IXFStream *pStrm) +{ + std::vector<IXFContent*>::iterator it; + for( it= m_aContents.begin(); it!= m_aContents.end(); it++ ) + { + IXFContent *pContent = *it; + if( pContent ) + pContent->ToXml(pStrm); + } + pStrm->EndElement( A2OUSTR("text:span") ); +} diff --git a/lotuswordpro/source/filter/xfilter/xftextspan.hxx b/lotuswordpro/source/filter/xfilter/xftextspan.hxx new file mode 100644 index 000000000000..ab7c4d330ddd --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftextspan.hxx @@ -0,0 +1,102 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * An span of text with style. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#ifndef _XFTEXTSPAN_HXX +#define _XFTEXTSPAN_HXX + +#include "xfglobal.hxx" +#include "xfcontent.hxx" +#include <vector> + +class IXFStream; + +class XFTextSpan : public XFContent +{ +public: + XFTextSpan(); + XFTextSpan(rtl::OUString& text, rtl::OUString& style ); + + virtual ~XFTextSpan(); + + void SetText(rtl::OUString& text); + rtl::OUString GetText(); + void Add(IXFContent *pContent); + void Add(rtl::OUString& text); + + virtual enumXFContent GetContentType(); + virtual void ToXml(IXFStream *pStrm); +protected: + std::vector<IXFContent*> m_aContents; +}; + +class XFTextSpanStart : public XFTextSpan //for adding style of power field +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; +class XFTextSpanEnd : public XFTextSpan //for adding style of power field +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xftextstyle.cxx b/lotuswordpro/source/filter/xfilter/xftextstyle.cxx new file mode 100644 index 000000000000..d7d9b934c7e1 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftextstyle.cxx @@ -0,0 +1,139 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Style for <text:p> or <text:h> or <text:span> + * Now we have only font attributes. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-26 create this file. + ************************************************************************/ +#include "xftextstyle.hxx" +#include "ixfattrlist.hxx" +#include "ixfstream.hxx" +#include "xffont.hxx" +#include "xfutil.hxx" + +XFTextStyle::XFTextStyle() +{ + m_pFont = NULL; +} + +XFTextStyle::~XFTextStyle() +{ +} + +void XFTextStyle::SetFont(XFFont *font) +{ + m_pFont = font; +} + +sal_Bool XFTextStyle::Equal(IXFStyle *pStyle) +{ + if( !pStyle || pStyle->GetStyleFamily() != enumXFStyleText ) + { + return sal_False; + } + + XFTextStyle *pOther = (XFTextStyle*)pStyle; + if( !pOther ) + { + return sal_False; + } + + if( m_pFont ) + { + if( !pOther->m_pFont ) + return sal_False; + if( *m_pFont != *pOther->m_pFont ) + return sal_False; + } + else if( pOther->m_pFont ) + return sal_False; + + return sal_True; +} + +enumXFStyle XFTextStyle::GetStyleFamily() +{ + return enumXFStyleText; +} + +void XFTextStyle::ToXml(IXFStream *strm) +{ + IXFAttrList *pAttrList = strm->GetAttrList(); + rtl::OUString style = GetStyleName(); + + pAttrList->Clear(); + if( style.getLength() ) + pAttrList->AddAttribute(rtl::OUString::createFromAscii("style:name"),GetStyleName()); + if( GetParentStyleName().getLength() > 0 ) + pAttrList->AddAttribute(A2OUSTR("style:parent-style-name"),GetParentStyleName()); + + pAttrList->AddAttribute(rtl::OUString::createFromAscii("style:family"),A2OUSTR("text") ); + strm->StartElement(rtl::OUString::createFromAscii("style:style")); + + //Font properties: + pAttrList->Clear(); + //font name: + if( m_pFont ) + m_pFont->ToXml(strm); + + strm->StartElement(rtl::OUString::createFromAscii("style:properties")); + strm->EndElement(rtl::OUString::createFromAscii("style:properties")); + + strm->EndElement(rtl::OUString::createFromAscii("style:style")); +} diff --git a/lotuswordpro/source/filter/xfilter/xftextstyle.hxx b/lotuswordpro/source/filter/xfilter/xftextstyle.hxx new file mode 100644 index 000000000000..0bdb2d859cca --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftextstyle.hxx @@ -0,0 +1,101 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Style for <text:p> or <text:h> or <text:span> + * Now we have only font attributes. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-26 create this file. + * 2005-01-04 Change the static style id. + * 2005-01-20 Get rid of the static id. + ************************************************************************/ +#ifndef _XFTEXTSTYLE_HXX +#define _XFTEXTSTYLE_HXX + +#include "xfglobal.hxx" +#include "xfstyle.hxx" + +class IXFStream; +class XFFont; + +class XFTextStyle : public XFStyle +{ +public: + XFTextStyle(); + + virtual ~XFTextStyle(); + +public: + /** + * @descr: set the font for the text span. + */ + void SetFont(XFFont *font); + + XFFont* GetFont(){ return m_pFont; } + + + virtual enumXFStyle GetStyleFamily(); + + virtual sal_Bool Equal(IXFStyle *pStyle); + + virtual void ToXml(IXFStream *strm); + +private: + XFFont *m_pFont; +}; + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xftexttable.cxx b/lotuswordpro/source/filter/xfilter/xftexttable.cxx new file mode 100644 index 000000000000..833faff63eb7 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftexttable.cxx @@ -0,0 +1,142 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Text table object. It's the table used in writer. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-03-31 create and implements. + ************************************************************************/ +#include "xftexttable.hxx" + +XFTextTable::XFTextTable() +{ + +} + +void XFTextTable::SetColCount(sal_Int32 col) +{ + m_nColCount = col; +} + +void XFTextTable::SetRowCount(sal_Int32 row) +{ + m_nRowCount = row; +} + +void XFTextTable::SetCell(sal_Int32 row, sal_Int32 col, XFCell *pCell) +{ + if( row<0 || col<0 || !pCell ) + return; + + XFRow *pRow = GetRow(row); + if( !pRow ) + { + pRow = new XFRow(); + pRow->SetRow(row); + AddRow(pRow); + + pRow = GetRow(row); + } + if( !pRow ) + return; + pCell->SetCol(col); + + pRow->AddCell(pCell); +} + +virtual void XFTextTable::ToXml(IXFStream *pStrm) +{ + for( int i=0; i<m_nColCount; i++ ) + { + rtl::OUString strColStyle = GetColumnStyle(i); + if( strColStyle.getLength()>0 ) + SetColumnStyle(col, m_strDefColStyle); + } + + for( int i=0; i<m_nRowCount; i++ ) + { + XFRow *pRow = GetRow(i); + if( !pRow ) + { + pRow = new XFRow(); + pRow->SetRow(i); + pRow->SetStyleName(m_strDefRowStyle); + + XFCell *pCell = new XFCell(); + pCell->SetColumnSpaned(m_nColCount); + pRow->AddCell(pCell); + + SetRow(i, pRow); + } + else + { + for( int j=0; j<m_nColCount; j++ ) + { + XFCell *pCell = pRow->GetCell(j); + if( !pCell ) + { + pCell = new XFCell(); + pCell->SetCol(j); + pCell->SetStyleName(m_strDefCellStyle); + pRow->AddCell(pCell); + } + } + } + } + + XFTable::ToXml(pStrm); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xftexttable.hxx b/lotuswordpro/source/filter/xfilter/xftexttable.hxx new file mode 100644 index 000000000000..1b0745848883 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftexttable.hxx @@ -0,0 +1,87 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Text table object. It's the table used in writer. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-03-31 create and implements. + ************************************************************************/ +#ifndef _XFTEXTTABLE_HXX +#define _XFTEXTTABLE_HXX + +#include "xftable.hxx" + +class XFTextTable : public XFTable +{ +public: + XFTextTable(); + +private: + void SetRowCount(sal_Int32 row); + + void SetColCount(sal_Int32 col); + + rtl::OUString SetCell(sal_Int32 row, sal_Int32 col, XFCell *pCell); + + virtual void ToXml(IXFStream *pStrm); + +private: + sal_Int32 m_nColCount; + sal_Int32 m_nRowCount; +}; + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xftime.cxx b/lotuswordpro/source/filter/xfilter/xftime.cxx new file mode 100644 index 000000000000..9973584624d6 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftime.cxx @@ -0,0 +1,89 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Time field with time style. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-21 create this file. + ************************************************************************/ +#include "xftime.hxx" + +XFTime::XFTime() +{ + m_bFixed = 0; + rtl_zeroMemory(&m_aDateTime,sizeof(m_aDateTime)); +} + +XFTime::~XFTime() +{ +} + +void XFTime::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + if( GetStyleName().getLength() > 0 ) + pAttrList->AddAttribute( A2OUSTR("style:data-style-name"), GetStyleName() ); + pAttrList->AddAttribute( A2OUSTR("text:time-value"), DateTimeToOUString(m_aDateTime) ); + if( m_bFixed ) + pAttrList->AddAttribute( A2OUSTR("text:fixed"), A2OUSTR("true") ); + + pStrm->StartElement( A2OUSTR("text:time") ); + pStrm->Characters(m_strText); + pStrm->EndElement( A2OUSTR("text:time") ); +} diff --git a/lotuswordpro/source/filter/xfilter/xftime.hxx b/lotuswordpro/source/filter/xfilter/xftime.hxx new file mode 100644 index 000000000000..52f4b4be9506 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftime.hxx @@ -0,0 +1,108 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Time field with time style. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-21 create this file. + ************************************************************************/ +#ifndef _XFTIME_HXX +#define _XFTIME_HXX + +#include "xfglobal.hxx" +#include "xfcontent.hxx" + +class XFTime : public XFContent +{ +public: + XFTime(); + + virtual ~XFTime(); + +public: + void SetDate(XFDateTime& dt); + + void SetText(rtl::OUString& text); + + void SetFixed(sal_Bool fixed = sal_True); + + virtual void ToXml(IXFStream *pStrm); + +private: + sal_Bool m_bFixed; + + rtl::OUString m_strText; + + XFDateTime m_aDateTime; +}; + +inline void XFTime::SetDate(XFDateTime& dt) +{ + m_aDateTime = dt; +} + +inline void XFTime::SetText(rtl::OUString& text) +{ + m_strText = text; +} + +inline void XFTime::SetFixed(sal_Bool fixed) +{ + m_bFixed = fixed; +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xftimestyle.cxx b/lotuswordpro/source/filter/xfilter/xftimestyle.cxx new file mode 100644 index 000000000000..fdda5618c2d6 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftimestyle.cxx @@ -0,0 +1,152 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Time style. The TIme format for time field. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-20 create this file. + ************************************************************************/ + +#include "xftimestyle.hxx" + +XFTimePart::XFTimePart() +{ + m_nDecimalPos = 0; +} + +void XFTimePart::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + switch(m_ePart) + { + case enumXFDateHour: + pAttrList->Clear(); + if( m_bLongFmt ) + pAttrList->AddAttribute( A2OUSTR("number:style"), A2OUSTR("long") ); + pStrm->StartElement( A2OUSTR("number:hours") ); + pStrm->EndElement( A2OUSTR("number:hours") ); + break; + case enumXFDateMinute: + pAttrList->Clear(); + if( m_bLongFmt ) + pAttrList->AddAttribute( A2OUSTR("number:style"), A2OUSTR("long") ); + if( m_nDecimalPos>0 ) + pAttrList->AddAttribute( A2OUSTR("number:decimal-places"), Int32ToOUString(m_nDecimalPos) ); + + pStrm->StartElement( A2OUSTR("number:minutes") ); + pStrm->EndElement( A2OUSTR("number:minutes") ); + break; + case enumXFDateSecond: + pAttrList->Clear(); + if( m_bLongFmt ) + pAttrList->AddAttribute( A2OUSTR("number:style"), A2OUSTR("long") ); + pStrm->StartElement( A2OUSTR("number:seconds") ); + pStrm->EndElement( A2OUSTR("number:seconds") ); + break; + case enumXFDateText: + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("number:text") ); + pStrm->Characters( m_strText ); + pStrm->EndElement( A2OUSTR("number:text") ); + break; + } +} + +XFTimeStyle::XFTimeStyle() +{ + m_bFixed = sal_True; + m_bAmPm = sal_False; + m_bTruncate = sal_True; +} + +XFTimeStyle::~XFTimeStyle() +{ +} + +enumXFStyle XFTimeStyle::GetStyleFamily() +{ + return enumXFStyleTime; +} + + +void XFTimeStyle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + + pAttrList->Clear(); + pAttrList->AddAttribute( A2OUSTR("style:name"), GetStyleName() ); + if( GetParentStyleName().getLength() > 0 ) + pAttrList->AddAttribute(A2OUSTR("style:parent-style-name"),GetParentStyleName()); + pAttrList->AddAttribute( A2OUSTR("style:family"), A2OUSTR("data-style") ); + if (!m_bTruncate) + pAttrList->AddAttribute( A2OUSTR("number:truncate-on-overflow"), A2OUSTR("false") ); + pStrm->StartElement( A2OUSTR("number:time-style") ); + + std::vector<XFTimePart>::iterator it; + for( it = m_aParts.begin(); it != m_aParts.end(); it++ ) + { + (*it).ToXml(pStrm); + } + if( m_bAmPm ) + { + pAttrList->Clear(); + pStrm->StartElement( A2OUSTR("number:am-pm") ); + pStrm->EndElement( A2OUSTR("number:am-pm") ); + } + pStrm->EndElement( A2OUSTR("number:time-style") ); +}
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xftimestyle.hxx b/lotuswordpro/source/filter/xfilter/xftimestyle.hxx new file mode 100644 index 000000000000..fa58656db592 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftimestyle.hxx @@ -0,0 +1,205 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Time style. The TIme format for time field. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-20 create this file. + ************************************************************************/ +#ifndef _XFTIMESTYLE_HXX +#define _XFTIMESTYLE_HXX + +#include "xfglobal.hxx" +#include "xfstyle.hxx" +#include "ixfproperty.hxx" +#include <vector> + +class XFDateTimePart : public XFStyle +{ +public: + XFDateTimePart() + { + m_ePart = enumXFDateUnknown; + m_bLongFmt = sal_False; + } + + virtual ~XFDateTimePart(){} +public: + void SetPartType(enumXFDatePart ePart); + + void SetLongFmt(sal_Bool bLongFmt); + + void SetText(rtl::OUString& text); + +protected: + enumXFDatePart m_ePart; + sal_Bool m_bLongFmt; + rtl::OUString m_strText; +}; + +class XFTimePart : public XFDateTimePart +{ +public: + XFTimePart(); + + virtual ~XFTimePart(){} +public: + void SetDecimalPos(sal_Int32 pos); + + virtual void ToXml(IXFStream *pStrm); + +protected: + sal_Int32 m_nDecimalPos; +}; + +class XFTimeStyle : public XFStyle +{ +public: + XFTimeStyle(); + + virtual ~XFTimeStyle(); + +public: + + void AddHour( sal_Bool bLongFmt = sal_True ); + + void AddMinute( sal_Bool bLongFmt = sal_True ); + + void AddSecond( sal_Bool bLongFmt = sal_True, sal_Int16 nDecimalPos = 2); + + void SetAmPm(sal_Bool bAmPm); + + void AddText( rtl::OUString part ); + + virtual enumXFStyle GetStyleFamily(); + + virtual void ToXml(IXFStream *pStrm); + + void SetTruncate(sal_Bool bTrunc); + +private: + sal_Bool m_bFixed; + sal_Bool m_bAmPm; + std::vector<XFTimePart> m_aParts; + sal_Bool m_bTruncate; +}; + + +inline void XFDateTimePart::SetPartType(enumXFDatePart ePart) +{ + m_ePart = ePart; +} + +inline void XFDateTimePart::SetLongFmt(sal_Bool bLongFmt) +{ + m_bLongFmt = bLongFmt; +} + +inline void XFDateTimePart::SetText(rtl::OUString& text) +{ + m_strText = text; +} + +inline void XFTimePart::SetDecimalPos(sal_Int32 pos) +{ + m_nDecimalPos = pos; +} + +inline void XFTimeStyle::AddHour( sal_Bool bLongFmt ) +{ + XFTimePart part; + part.SetPartType(enumXFDateHour); + part.SetLongFmt(bLongFmt); + m_aParts.push_back(part); +} + +inline void XFTimeStyle::AddMinute( sal_Bool bLongFmt ) +{ + XFTimePart part; + part.SetPartType(enumXFDateMinute); + part.SetLongFmt(bLongFmt); + m_aParts.push_back(part); +} + +inline void XFTimeStyle::AddSecond( sal_Bool bLongFmt, sal_Int16 pos) +{ + XFTimePart part; + part.SetPartType(enumXFDateSecond); + part.SetLongFmt(bLongFmt); + part.SetDecimalPos(pos); + m_aParts.push_back(part); +} + +inline void XFTimeStyle::SetAmPm(sal_Bool bAmPm) +{ + m_bAmPm = bAmPm; +} + +inline void XFTimeStyle::AddText( rtl::OUString text ) +{ + XFTimePart part; + part.SetPartType(enumXFDateText); + part.SetText(text); + m_aParts.push_back(part); +} + +inline void XFTimeStyle::SetTruncate(sal_Bool bTrunc) +{ + m_bTruncate = bTrunc; +} + +#endif diff --git a/lotuswordpro/source/filter/xfilter/xftitle.hxx b/lotuswordpro/source/filter/xfilter/xftitle.hxx new file mode 100644 index 000000000000..e6ffbdf35c15 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xftitle.hxx @@ -0,0 +1,89 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Page number field. + ************************************************************************/ +/************************************************************************* + * Change History + * 2005-01-31 create this file. + ************************************************************************/ +#ifndef _XFTITLE_HXX +#define _XFTITLE_HXX + +#include "xfglobal.hxx" +#include "xfcontent.hxx" +#include "xfnumfmt.hxx" + +/** + * @brief + * Title field. + */ +class XFTitle : public XFContent +{ +public: + virtual void ToXml(IXFStream *pStrm); +}; + +inline void XFTitle::ToXml(IXFStream *pStrm) +{ + IXFAttrList *pAttrList = pStrm->GetAttrList(); + pAttrList->Clear(); + + pStrm->StartElement( A2OUSTR("text:title") ); + pStrm->EndElement( A2OUSTR("text:title") ); +} + +#endif
\ No newline at end of file diff --git a/lotuswordpro/source/filter/xfilter/xfutil.cxx b/lotuswordpro/source/filter/xfilter/xfutil.cxx new file mode 100644 index 000000000000..d1728ceae9c3 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfutil.cxx @@ -0,0 +1,562 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Util functions for xml filter. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + * 2005-01-24 add some enum tool funtion here. + ************************************************************************/ +#include <stdio.h> +#include "xfutil.hxx" +#include "xfparagraph.hxx" +#include "xfcontentcontainer.hxx" +#include <rtl/ustrbuf.hxx> +#include <sstream> + +rtl::OUString Int32ToOUString(sal_Int32 num) +{ + /*std::stringstream sstrm; + + sstrm<<(int)num; + return rtl::OUString::createFromAscii(sstrm.str().c_str()); + */ + return rtl::OUString::valueOf(num); +} + +rtl::OUString Int16ToOUString(sal_Int16 num) +{ + /*std::stringstream sstrm; + + sstrm<<(int)num; + return rtl::OUString::createFromAscii(sstrm.str().c_str()); + */ + sal_Int32 nNum = static_cast<sal_Int32>(num); + return rtl::OUString::valueOf(nNum); +} + +rtl::OUString FloatToOUString(float num, sal_Int32 precision) +{ + /*std::stringstream sstrm; + std::string strRet; + + sstrm.precision(precision); + sstrm<<num; + return rtl::OUString::createFromAscii(sstrm.str().c_str()); + */ + return rtl::OUString::valueOf(num); +} + +rtl::OUString DoubleToOUString(double num, sal_Int32 precision) +{ + /*std::stringstream sstrm; + std::string strRet; + + sstrm.precision(precision); + sstrm<<num; + return rtl::OUString::createFromAscii(sstrm.str().c_str()); + */ + return rtl::OUString::valueOf(num); +} + +rtl::OUString OEMToOUString(const std::string& str) +{ + return rtl::OUString(); +} + +rtl::OUString ColorToOUString( sal_uInt32 color) +{ + unsigned int c = color&0x00ffffff; + unsigned char r; + unsigned char g; + unsigned char b; + char buf[8]; + + unsigned int temp = c; + r = temp&0x000000ff; + + temp = c; + g = (temp&0x0000ff00)>>8; + + temp = c; + b = (temp&0x00ff0000)>>16; + + rtl_zeroMemory(buf,8); + sprintf(buf,"#%2x%2x%2x",r,g,b); + for( int i=0; i<6; i++ ) + { + if( buf[i] == ' ' ) + buf[i] = '0'; + } + return rtl::OUString::createFromAscii(buf); +} + +rtl::OUString DateTimeToOUString(XFDateTime& dt) +{ + rtl::OUStringBuffer buf; + buf.append(dt.nYear); + buf.append( A2OUSTR("-") ); + buf.append(dt.nMonth); + buf.append( A2OUSTR("-") ); + buf.append(dt.nDay); + buf.append( A2OUSTR("T") ); + buf.append(dt.nHour); + buf.append( A2OUSTR(":") ); + buf.append(dt.nMinute); + buf.append( A2OUSTR(":") ); + buf.append(dt.nSecond); + buf.append( A2OUSTR(".") ); + buf.append(dt.nMillSecond); + + return buf.makeStringAndClear(); +} + +rtl::OUString GetTableColName(sal_Int32 col) +{ + int remain; + char ch; + std::string strOut; + + if( col <= 26 ) + { + ch = 'A' + col -1; + strOut += ch; + return A2OUSTR(strOut.c_str()); + } + + while( col>26 ) + { + remain = col%26; + col = col/26; + ch = 'A' + remain -1; + strOut += ch; + } + + ch = 'A' + remain -1; + strOut += ch; + return A2OUSTR(strOut.c_str()); +} + +//tool functions: +rtl::OUString GetUnderlineName(enumXFUnderline type) +{ + switch(type) + { + case enumXFUnderlineNone: + return A2OUSTR("none"); + break; + case enumXFUnderlineSingle: + return A2OUSTR("single"); + break; + case enumXFUnderlineDouble: + return A2OUSTR("double"); + break; + case enumXFUnderlineDotted: + return A2OUSTR("dotted"); + break; + case enumXFUnderlineDash: + return A2OUSTR("dash"); + break; + case enumXFUnderlineLongDash: + return A2OUSTR("long-dash"); + break; + case enumXFUnderlineDotDash: + return A2OUSTR("dot-dash"); + break; + case enumXFUnderlineDotDotDash: + return A2OUSTR("dot-dot-dash"); + break; + case enumXFUnderlineWave: + return A2OUSTR("wave"); + break; + case enumXFUnderlineBold: + return A2OUSTR("bold"); + break; + case enumXFUnderlineBoldDotted: + return A2OUSTR("bold-dotted"); + break; + case enumXFUnderlineBoldDash: + return A2OUSTR("bold-dash"); + break; + case enumXFUnderlineBoldLongDash: + return A2OUSTR("bold-long-dash"); + break; + case enumXFUnderlineBoldDotDash: + return A2OUSTR("bold-dot-dash"); + break; + case enumXFUnderlineBoldDotDotDash: + return A2OUSTR("bold-dot-dot-dash"); + break; + case enumXFUnderlineBoldWave: + return A2OUSTR("bold-wave"); + break; + case enumXFUnderlineDoubleWave: + return A2OUSTR("double-wave"); + break; + case enumXFUnderlineSmallWave: + return A2OUSTR("samll-wave"); + break; + } + return A2OUSTR(""); +} + +rtl::OUString GetReliefName(enumXFRelief type) +{ + switch(type) + { + case enumXFReliefEngraved: + return A2OUSTR("engraved"); + break; + case enumXFReliefEmbossed: + return A2OUSTR("embossed"); + break; + } + return A2OUSTR(""); +} + +rtl::OUString GetCrossoutName(enumXFCrossout type) +{ + switch(type) + { + case enumXFCrossoutSignel: + return A2OUSTR("single-line"); + break; + case enumXFCrossoutDouble: + return A2OUSTR("double-line"); + break; + case enumXFCrossoutThick: + return A2OUSTR("thick-line"); + break; + case enumXFCrossoutSlash: + return A2OUSTR("slash"); + break; + case enumXFCrossoutX: + return A2OUSTR("X"); + break; + } + +} + +rtl::OUString GetTransformName(enumXFTransform type) +{ + switch(type) { + case enumXFTransformUpper: + return A2OUSTR("uppercase"); + break; + case enumXFTransformLower: + return A2OUSTR("lowercase"); + break; + case enumXFTransformCapitalize: + return A2OUSTR("capitalize"); + break; + case enumXFTransformSmallCaps: + return A2OUSTR("small-caps"); + break; + } + return A2OUSTR(""); +} + +rtl::OUString GetEmphasizeName(enumXFEmphasize type) +{ + switch(type) { + case enumXFEmphasizeDot: + return A2OUSTR("dot"); + break; + case enumXFEmphasizeCircle: + return A2OUSTR("circle"); + break; + case enumXFEmphasizeDisc: + return A2OUSTR("disc"); + break; + case enumXFEmphasizeAccent: + return A2OUSTR("accent"); + break; + } + return A2OUSTR(""); +} + +rtl::OUString GetTextDirName(enumXFTextDir dir) +{ + switch(dir) + { + case enumXFTextDirLR: + return A2OUSTR("lr"); + break; + case enumXFTextDirLR_TB: + return A2OUSTR("lr-tb"); + break; + case enumXFTextDirPage: + return A2OUSTR("page"); + break; + case enumXFTextDirRL: + return A2OUSTR("rl"); + break; + case enumXFTextDirRL_TB: + return A2OUSTR("rl-tb"); + break; + case enumXFTextDirTB: + return A2OUSTR("tb"); + break; + case enumXFTextDirTB_LR: + return A2OUSTR("tb-lr"); + break; + case enumXFTextDirTB_RL: + return A2OUSTR("tb-rl"); + break; + } + return A2OUSTR(""); +} + +rtl::OUString GetFrameXPos(enumXFFrameXPos pos) +{ + switch(pos) + { + case enumXFFrameXPosLeft: + return A2OUSTR("left"); + break; + case enumXFFrameXPosRight: + return A2OUSTR("right"); + break; + case enumXFFrameXPosCenter: + return A2OUSTR("center"); + break; + case enumXFFrameXPosFromLeft: + return A2OUSTR("from-left"); + break; + } + return A2OUSTR(""); +} + +rtl::OUString GetFrameXRel(enumXFFrameXRel rel) +{ + switch(rel) + { + case enumXFFrameXRelPage: + return A2OUSTR("page"); + break; + case enumXFFrameXRelPageContent: + return A2OUSTR("page-content"); + break; + case enumXFFrameXRelPageEndMargin: + return A2OUSTR("page-end-margin"); + break; + case enumXFFrameXRelPageStartMargin: + return A2OUSTR("page-start-margin"); + break; + case enumXFFrameXRelPara: + return A2OUSTR("paragraph"); + break; + case enumXFFrameXRelParaContent: + return A2OUSTR("paragraph-content"); + break; + case enumXFFrameXRelParaEndMargin: + return A2OUSTR("paragraph-end-margin"); + break; + case enumXFFrameXRelParaStartMargin: + return A2OUSTR("paragraph-start-margin"); + break; + case enumXFFrameXRelChar: + return A2OUSTR("char"); + break; + case enumXFFrameXRelFrame: + return A2OUSTR("frame"); + break; + case enumXFFrameXRelFrameContent: + return A2OUSTR("frame-content"); + break; + case enumXFFrameXRelFrameEndMargin: + return A2OUSTR("frame-end-margin"); + break; + case enumXFFrameXRelFrameStartMargin: + return A2OUSTR("frame-start-margin"); + break; + } +} + +rtl::OUString GetFrameYPos(enumXFFrameYPos pos) +{ + switch(pos) + { + case enumXFFrameYPosTop: + return A2OUSTR("top"); + case enumXFFrameYPosMiddle: + return A2OUSTR("middle"); + case enumXFFrameYPosBottom: + return A2OUSTR("bottom"); + case enumXFFrameYPosFromTop: + return A2OUSTR("from-top"); + case enumXFFrameYPosBelow: + return A2OUSTR("below"); + } + return A2OUSTR(""); +} + +rtl::OUString GetFrameYRel(enumXFFrameYRel rel) +{ + switch(rel) + { + case enumXFFrameYRelBaseLine: + return A2OUSTR("baseline"); + case enumXFFrameYRelChar: + return A2OUSTR("char"); + case enumXFFrameYRelFrame: + return A2OUSTR("frame"); + case enumXFFrameYRelFrameContent: + return A2OUSTR("frame-content"); + case enumXFFrameYRelLine: + return A2OUSTR("line"); + case enumXFFrameYRelPage: + return A2OUSTR("page"); + case enumXFFrameYRelPageContent: + return A2OUSTR("page-content"); + case enumXFFrameYRelPara: + return A2OUSTR("paragraph"); + case enumXFFrameYRelParaContent: + return A2OUSTR("paragraph-content"); + case enumXFFrameYRelText: + return A2OUSTR("text"); + } + return A2OUSTR(""); +} + +rtl::OUString GetAlignName(enumXFAlignType align) +{ + if( align == enumXFAlignStart ) + return A2OUSTR("start"); + else if( align == enumXFAlignCenter ) + return A2OUSTR("center"); + else if( align == enumXFAlignEnd ) + return A2OUSTR("end"); + else if( align == enumXFAlignJustify ) + return A2OUSTR("justify"); + else if( align == enumXFAlignBottom ) + return A2OUSTR("bottom"); + else if( align == enumXFAlignTop ) + return A2OUSTR("top"); + else if( align == enumXFAlignMiddle ) + return A2OUSTR("middle"); + else if( align == enumXFALignMargins ) + return A2OUSTR("margins"); + + return A2OUSTR(""); +} + +rtl::OUString GetDrawKind(enumXFDrawKind kind) +{ + if( kind == enumXFDrawKindFull ) + return A2OUSTR("full"); + else if( kind == enumXFDrawKindSection ) + return A2OUSTR("section"); + else if( kind == enumXFDrawKindCut ) + return A2OUSTR("cut"); + else //( kind == enumXFDrawKindArc ) + return A2OUSTR("arc"); +} + +rtl::OUString GetPageUsageName(enumXFPageUsage usage) +{ + switch(usage) + { + case enumXFPageUsageAll: + return A2OUSTR("all"); + case enumXFPageUsageLeft: + return A2OUSTR("left"); + case enumXFPageUsageRight: + return A2OUSTR("right"); + case enumXFPageUsageMirror: + return A2OUSTR("mirrored"); + } + return A2OUSTR(""); +} + +rtl::OUString GetValueType(enumXFValueType type) +{ + switch(type) + { + case enumXFValueTypeBoolean: + return A2OUSTR("boolean"); + case enumXFValueTypeCurrency: + return A2OUSTR("currency"); + case enumXFValueTypeDate: + return A2OUSTR("date"); + case enumXFValueTypeFloat: + return A2OUSTR("float"); + case enumXFValueTypePercentage: + return A2OUSTR("percentage"); + case enumXFValueTypeString: + return A2OUSTR("string"); + case enumXFValueTypeTime: + return A2OUSTR("time"); + } + return A2OUSTR(""); +} + +rtl::OUString GetColorMode(enumXFColorMode mode) +{ + switch(mode) + { + case enumXFColorStandard: + return A2OUSTR("standard"); + case enumXFColorGreyscale: + return A2OUSTR("greyscale"); + case enumXFColorWatermark: + return A2OUSTR("watermark"); + case enumXFColorMono: + return A2OUSTR("mono"); + } + return A2OUSTR(""); +} diff --git a/lotuswordpro/source/filter/xfilter/xfutil.hxx b/lotuswordpro/source/filter/xfilter/xfutil.hxx new file mode 100644 index 000000000000..d2228271b1b7 --- /dev/null +++ b/lotuswordpro/source/filter/xfilter/xfutil.hxx @@ -0,0 +1,121 @@ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: IBM Corporation + * + * Copyright: 2008 by IBM Corporation + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +/************************************************************************* + * @file + * Tool funtions for xml filter. + * Don't use any template for the ***TOOUString function list for easy. + ************************************************************************/ +/************************************************************************* + * Change History + * 2004-12-23 create this file. + ************************************************************************/ +#ifndef _XFUTIL_HXX +#define _XFUTIL_HXX + +#include "xfdefs.hxx" +#include <rtl/ustring.hxx> +#include <rtl/memory.h> +#include <string> + + +#define A2OUSTR(str) rtl::OUString::createFromAscii(str) + +rtl::OUString Int32ToOUString(sal_Int32 num); + +rtl::OUString Int16ToOUString(sal_Int16 num); + +rtl::OUString FloatToOUString(float num, sal_Int32 precision=6); + +rtl::OUString DoubleToOUString(double num, sal_Int32 precision=6); + +rtl::OUString OEMToOUString(const std::string& str); + +rtl::OUString ColorToOUString( sal_uInt32 color); + +rtl::OUString DateTimeToOUString(XFDateTime& dt); + +rtl::OUString GetTableColName(sal_Int32 col); + +rtl::OUString GetUnderlineName(enumXFUnderline type); + +rtl::OUString GetReliefName(enumXFRelief type); + +rtl::OUString GetCrossoutName(enumXFCrossout type); + +rtl::OUString GetTransformName(enumXFTransform type); + +rtl::OUString GetEmphasizeName(enumXFEmphasize type); + +rtl::OUString GetTextDirName(enumXFTextDir dir); + +rtl::OUString GetFrameXPos(enumXFFrameXPos pos); + +rtl::OUString GetFrameXRel(enumXFFrameXRel rel); + +rtl::OUString GetFrameYPos(enumXFFrameYPos pos); + +rtl::OUString GetFrameYRel(enumXFFrameYRel rel); + +rtl::OUString GetAlignName(enumXFAlignType align); + +rtl::OUString GetDrawKind(enumXFDrawKind kind); + +rtl::OUString GetPageUsageName(enumXFPageUsage usage); + +rtl::OUString GetValueType(enumXFValueType type); + +rtl::OUString GetColorMode(enumXFColorMode mode); + +#endif |