diff options
author | Oliver Specht <os@openoffice.org> | 2007-06-06 05:33:22 +0000 |
---|---|---|
committer | Oliver Specht <os@openoffice.org> | 2007-06-06 05:33:22 +0000 |
commit | 814d8d0ee26f8e6b587325b8220da25cf98eba5a (patch) | |
tree | b52dad03c0f6e2e75e0f90413f37c465545a1cb7 /writerfilter | |
parent | 2a01dcfca243f7a26b0327fc2d4bdd26c3bec71b (diff) |
footnote import improved
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 32 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 50 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.hxx | 23 |
3 files changed, 83 insertions, 22 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index f1df7c7e2d81..7d7ee12c8c91 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -4,9 +4,9 @@ * * $RCSfile: DomainMapper.cxx,v $ * - * $Revision: 1.56 $ + * $Revision: 1.57 $ * - * last change: $Author: fridrich_strba $ $Date: 2007-05-30 12:11:05 $ + * last change: $Author: os $ $Date: 2007-06-06 06:33:22 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -1540,7 +1540,15 @@ void DomainMapper::attribute(doctok::Id nName, doctok::Value & val) } } break; - + case NS_rtf::LN_FRD : //footnote reference descriptor, if nIntValue > 0 then automatic, custom otherwise + //ignored + break; + case NS_rtf::LN_FONT: //font of footnote symbol + m_pImpl->SetFootnoteFontId( nIntValue ); + break; + case NS_rtf::LN_CHAR: //footnote symbol character + m_pImpl->SetFootnoteSymbol( sal_Unicode(nIntValue)); + break; case NS_ooxml::LN_CT_Underline_val: handleUnderlineType(nIntValue, m_pImpl->GetTopContext()); break; @@ -2143,9 +2151,10 @@ void DomainMapper::sprm( doctok::Sprm& sprm_, PropertyMapPtr rContext, SprmType case 0xEA08: /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */ break; // sprmCChs - case 0x6A09: + case 0x6A09: // sprmCSymbol /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */ - break; // sprmCSymbol + resolveSprmProps(sprm_); //resolves LN_FONT and LN_CHAR + break; case 0x080A: /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */ break; // sprmCFOle2 @@ -3328,16 +3337,17 @@ void DomainMapper::endCharacterGroup() -----------------------------------------------------------------------*/ void DomainMapper::text(const sal_uInt8 * data_, size_t len) { + //TODO: Determine the right text encoding (FIB?) + ::rtl::OUString sText( (const sal_Char*) data_, len, RTL_TEXTENCODING_MS_1252 ); try { bool bContinue = true; - //TODO: Determine the right text encoding (FIB?) - ::rtl::OUString sText( (const sal_Char*) data_, len, RTL_TEXTENCODING_MS_1252 ); if(len == 1) { bContinue = false; switch(*data_) { + case 0x02: break; //footnote character case 0x0c: break; //page break case 0x07: m_pImpl->getTableManager().text(data_, len); @@ -3387,6 +3397,10 @@ void DomainMapper::text(const sal_uInt8 * data_, size_t len) -----------------------------------------------------------------------*/ void DomainMapper::utext(const sal_uInt8 * data_, size_t len) { + OUString sText; + OUStringBuffer aBuffer = OUStringBuffer(len); + aBuffer.append( (const sal_Unicode *) data_, len); + sText = aBuffer.makeStringAndClear(); try { m_pImpl->getTableManager().utext(data_, len); @@ -3396,10 +3410,6 @@ void DomainMapper::utext(const sal_uInt8 * data_, size_t len) else { PropertyMapPtr pContext = m_pImpl->GetTopContext(); - OUString sText; - OUStringBuffer aBuffer = OUStringBuffer(len); - aBuffer.append( (const sal_Unicode *) data_, len); - sText = aBuffer.makeStringAndClear(); //--> debug //sal_uInt32 nSize = pContext->size(); //<-- diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 704b7e1fd367..a6ecf4e1046c 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -4,9 +4,9 @@ * * $RCSfile: DomainMapper_Impl.cxx,v $ * - * $Revision: 1.15 $ + * $Revision: 1.16 $ * - * last change: $Author: fridrich_strba $ $Date: 2007-05-30 10:43:21 $ + * last change: $Author: os $ $Date: 2007-06-06 06:33:22 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -54,6 +54,7 @@ #include <com/sun/star/text/FilenameDisplayFormat.hpp> #include <com/sun/star/text/UserDataPart.hpp> #include <com/sun/star/text/SetVariableType.hpp> +#include <com/sun/star/text/XFootnote.hpp> #include <com/sun/star/text/XLineNumberingProperties.hpp> #include <com/sun/star/util/XNumberFormatsSupplier.hpp> #include <com/sun/star/util/XNumberFormats.hpp> @@ -360,7 +361,9 @@ DomainMapper_Impl::DomainMapper_Impl( m_nCurrentTabStopIndex( 0 ), m_sCurrentParaStyleId(), m_bInStyleSheetImport( false ), - m_bLineNumberingSet( false ) + m_bLineNumberingSet( false ), + m_cFootnoteSymbol( 0 ), + m_nFootnoteFontId( -1 ) { GetBodyText(); uno::Reference< text::XTextAppendAndConvert > xBodyTextAppendAndConvert = uno::Reference< text::XTextAppendAndConvert >( m_xBodyText, uno::UNO_QUERY ); @@ -489,6 +492,15 @@ PropertyMapPtr DomainMapper_Impl::GetTopContextOfType(ContextType eId) return pRet; } +/*-- 24.05.2007 15:54:51--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Reference< text::XTextAppendAndConvert > DomainMapper_Impl::GetTopTextAppendAndConvert() +{ + OSL_ENSURE(!m_aTextAppendStack.empty(), "text append stack is empty" ); + return m_aTextAppendStack.top(); +} + /*-- 17.07.2006 08:47:04--------------------------------------------------- -----------------------------------------------------------------------*/ @@ -684,14 +696,17 @@ void DomainMapper_Impl::appendTextPortion( const ::rtl::OUString& rString, Prope /*-- 02.11.2006 12:08:33--------------------------------------------------- -----------------------------------------------------------------------*/ -void DomainMapper_Impl::appendTextContent( const uno::Reference< text::XTextContent > xContent) +void DomainMapper_Impl::appendTextContent( + const uno::Reference< text::XTextContent > xContent, + const uno::Sequence< beans::PropertyValue > xPropertyValues + ) { uno::Reference< text::XTextAppendAndConvert > xTextAppendAndConvert = m_aTextAppendStack.top(); if(xTextAppendAndConvert.is() && ! m_TableManager.isIgnore()) { try { - xTextAppendAndConvert->appendTextContent( xContent ); + xTextAppendAndConvert->appendTextContent( xContent, xPropertyValues ); } catch(const lang::IllegalArgumentException& ) { @@ -864,12 +879,31 @@ void DomainMapper_Impl::PushFootOrEndnote( bool bIsFootnote ) bIsFootnote ? ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.Footnote") ) : ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.Endnote") )), uno::UNO_QUERY_THROW ); - appendTextContent( uno::Reference< text::XTextContent >( xFootnoteText, uno::UNO_QUERY_THROW ) ); + if( m_cFootnoteSymbol != 0) + { + uno::Reference< text::XFootnote > xFootnote( xFootnoteText, uno::UNO_QUERY_THROW ); + xFootnote->setLabel( ::rtl::OUString( m_cFootnoteSymbol ) ); + } + FontTablePtr pFontTable = GetFontTable(); + uno::Sequence< beans::PropertyValue > aFontProperties; + if( pFontTable && m_nFootnoteFontId >= 0 && pFontTable->size() > (size_t)m_nFootnoteFontId ) + { + const FontEntry* pFontEntry = pFontTable->getFontEntry(sal_uInt32(m_nFootnoteFontId)); + PropertyMapPtr aFontProps( new PropertyMap ); + aFontProps->Insert(PROP_CHAR_FONT_NAME, uno::makeAny( pFontEntry->sFontName )); + aFontProps->Insert(PROP_CHAR_FONT_CHAR_SET, uno::makeAny( (sal_Int16)pFontEntry->nTextEncoding )); + aFontProps->Insert(PROP_CHAR_FONT_PITCH, uno::makeAny( pFontEntry->nPitchRequest )); + aFontProperties = aFontProps->GetPropertyValues(); + } + appendTextContent( uno::Reference< text::XTextContent >( xFootnoteText, uno::UNO_QUERY_THROW ), aFontProperties ); m_aTextAppendStack.push(uno::Reference< text::XTextAppendAndConvert >( xFootnoteText, uno::UNO_QUERY_THROW )); } catch( uno::Exception& ) { } + //reset footnote properties + m_nFootnoteFontId = -1; + m_cFootnoteSymbol = 0; } /*-- 24.05.2007 14:22:29--------------------------------------------------- @@ -2669,7 +2703,7 @@ void DomainMapper_Impl::PopFieldContext() if( !xToInsert.is() ) xToInsert = uno::Reference< text::XTextContent >(pContext->GetTextField(), uno::UNO_QUERY); if( xToInsert.is() ) - xTextAppendAndConvert->appendTextContent( xToInsert ); + xTextAppendAndConvert->appendTextContent( xToInsert, uno::Sequence< beans::PropertyValue >() ); else if(pContext->GetHyperlinkURL().getLength()) { PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier(); @@ -2730,7 +2764,7 @@ void DomainMapper_Impl::ImportGraphic(doctok::Reference< doctok::Properties >:: //create the graphic ref->resolve( *GetGraphicImport(bIsShape) ); //insert it into the document at the current cursor position - appendTextContent( m_pGraphicImport->GetGraphicObject() ); + appendTextContent( m_pGraphicImport->GetGraphicObject(), uno::Sequence< beans::PropertyValue >() ); m_pGraphicImport.reset(); } diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index 85ccc97f49ac..d4eb16b15408 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -4,9 +4,9 @@ * * $RCSfile: DomainMapper_Impl.hxx,v $ * - * $Revision: 1.14 $ + * $Revision: 1.15 $ * - * last change: $Author: fridrich_strba $ $Date: 2007-05-30 11:28:00 $ + * last change: $Author: os $ $Date: 2007-06-06 06:33:22 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -228,6 +228,9 @@ private: bool m_bInStyleSheetImport; bool m_bLineNumberingSet; +// bool m_bIsFootnoteSymbol; + sal_Unicode m_cFootnoteSymbol; // 0 == invalid + sal_Int32 m_nFootnoteFontId; // negative values are invalid ids void GetCurrentLocale(::com::sun::star::lang::Locale& rLocale); void SetNumberFormat( const ::rtl::OUString& rCommand, @@ -261,7 +264,8 @@ public: void finishParagraph( PropertyMapPtr pPropertyMap ); void appendTextPortion( const ::rtl::OUString& rString, PropertyMapPtr pPropertyMap ); - void appendTextContent( const ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > ); + void appendTextContent( const ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent >, + const uno::Sequence< beans::PropertyValue > ); ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > appendTextSectionAfter( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange >& xBefore ); @@ -277,6 +281,9 @@ public: return m_pTopContext; } PropertyMapPtr GetTopContextOfType(ContextType eId); + + ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextAppendAndConvert > GetTopTextAppendAndConvert(); + FontTablePtr GetFontTable() { if(!m_pFontTable) @@ -349,6 +356,16 @@ public: void SetLineNumbering( sal_Int32 nLnnMod, sal_Int32 nLnc, sal_Int32 ndxaLnn ); bool IsLineNumberingSet() const {return m_bLineNumberingSet;} + +// bool IsFootnoteSymbol() const { return m_bIsFootnoteSymbol;} +// void SetFootnoteSymbol() { m_bIsFootnoteSymbol = true;} +// void ResetFootnoteSymbol() { m_bIsFootnoteSymbol = false;} + sal_Unicode GetFootnoteSymbol() const { return m_cFootnoteSymbol;} + void SetFootnoteSymbol(sal_Unicode cSet) { m_cFootnoteSymbol = cSet;} + + sal_Int32 GetFootnoteFontId() const { return m_nFootnoteFontId;} + void SetFootnoteFontId(sal_Int32 nSet) { m_nFootnoteFontId = nSet;} + DeletableTabStop m_aCurrentTabStop; }; |