summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorOliver Specht <os@openoffice.org>2007-06-06 05:33:22 +0000
committerOliver Specht <os@openoffice.org>2007-06-06 05:33:22 +0000
commit814d8d0ee26f8e6b587325b8220da25cf98eba5a (patch)
treeb52dad03c0f6e2e75e0f90413f37c465545a1cb7 /writerfilter
parent2a01dcfca243f7a26b0327fc2d4bdd26c3bec71b (diff)
footnote import improved
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx32
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx50
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx23
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;
};