diff options
author | Rüdiger Timm <rt@openoffice.org> | 2004-07-13 07:42:44 +0000 |
---|---|---|
committer | Rüdiger Timm <rt@openoffice.org> | 2004-07-13 07:42:44 +0000 |
commit | 36125a5d8cc318d00a8376ca70a94ceeb7b342fd (patch) | |
tree | 145f03eb0ec53d02da779919fa9912e14090237b /xmloff/source/text/txtparai.cxx | |
parent | 65b5704bb199f5034e0f7e616df8c17f049033c5 (diff) |
INTEGRATION: CWS oasis (1.38.130); FILE MERGED
2004/05/28 16:38:04 mib 1.38.130.4: - #i20153#: Events
2004/05/18 06:48:19 mib 1.38.130.3: - #i20153#: added <draw:frame>
2004/05/07 12:00:08 mib 1.38.130.2: - #i20153#: encode/decode style names (ooo2oasis missing)
2004/03/31 14:23:49 mib 1.38.130.1: First steps of OASIS file format
Diffstat (limited to 'xmloff/source/text/txtparai.cxx')
-rw-r--r-- | xmloff/source/text/txtparai.cxx | 346 |
1 files changed, 291 insertions, 55 deletions
diff --git a/xmloff/source/text/txtparai.cxx b/xmloff/source/text/txtparai.cxx index 029c10f2c07c..b364701f221d 100644 --- a/xmloff/source/text/txtparai.cxx +++ b/xmloff/source/text/txtparai.cxx @@ -2,9 +2,9 @@ * * $RCSfile: txtparai.cxx,v $ * - * $Revision: 1.40 $ + * $Revision: 1.41 $ * - * last change: $Author: hjs $ $Date: 2004-06-28 13:54:52 $ + * last change: $Author: rt $ $Date: 2004-07-13 08:42:44 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -148,13 +148,6 @@ #endif // OD 2004-04-21 #i26791# -#ifndef _XMLOFF_TXTPARAIMPHINT_HXX -#include <txtparaimphint.hxx> -#endif -typedef XMLHint_Impl *XMLHint_ImplPtr; -SV_DECL_PTRARR_DEL( XMLHints_Impl, XMLHint_ImplPtr, 5, 5 ) -SV_IMPL_PTRARR( XMLHints_Impl, XMLHint_ImplPtr ) -// OD 2004-04-21 #i26791# #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ #include <com/sun/star/beans/XPropertySet.hpp> #endif @@ -167,6 +160,253 @@ using namespace ::com::sun::star::drawing; using namespace ::com::sun::star::beans; using namespace ::xmloff::token; + +// --------------------------------------------------------------------- + +#define XML_HINT_STYLE 1 +#define XML_HINT_REFERENCE 2 +#define XML_HINT_HYPERLINK 3 +#define XML_HINT_RUBY 4 +#define XML_HINT_INDEX_MARK 5 +#define XML_HINT_TEXT_FRAME 6 + + +class XMLHint_Impl +{ + Reference < XTextRange > xStart; + Reference < XTextRange > xEnd; + + sal_uInt8 nType; + +public: + + XMLHint_Impl( sal_uInt8 nTyp, + const Reference < XTextRange > & rS, + const Reference < XTextRange > & rE ) : + nType( nTyp ), + xStart( rS ), + xEnd( rE ) + { + } + + XMLHint_Impl( sal_uInt8 nTyp, + const Reference < XTextRange > & rS ) : + nType( nTyp ), + xStart( rS ) + { + } + + virtual ~XMLHint_Impl() {} + + const Reference < XTextRange > & GetStart() const { return xStart; } + const Reference < XTextRange > & GetEnd() const { return xEnd; } + void SetEnd( const Reference < XTextRange > & rPos ) { xEnd = rPos; } + + // We don't use virtual methods to differ between the sub classes, + // because this seems to be to expensive if compared to inline methods. + sal_uInt8 GetType() const { return nType; } + sal_Bool IsStyle() { return XML_HINT_STYLE==nType; } + sal_Bool IsReference() { return XML_HINT_REFERENCE==nType; } + sal_Bool IsHyperlink() { return XML_HINT_HYPERLINK==nType; } + sal_Bool IsIndexMark() { return XML_HINT_INDEX_MARK==nType; } +}; + +class XMLStyleHint_Impl : public XMLHint_Impl +{ + OUString sStyleName; + +public: + + XMLStyleHint_Impl( const OUString& rStyleName, + const Reference < XTextRange > & rPos ) : + XMLHint_Impl( XML_HINT_STYLE, rPos, rPos ), + sStyleName( rStyleName ) + { + } + virtual ~XMLStyleHint_Impl() {} + + const OUString& GetStyleName() const { return sStyleName; } +}; + +class XMLReferenceHint_Impl : public XMLHint_Impl +{ + OUString sRefName; + +public: + + XMLReferenceHint_Impl( const OUString& rRefName, + const Reference < XTextRange > & rPos ) : + XMLHint_Impl( XML_HINT_REFERENCE, rPos, rPos ), + sRefName( rRefName ) + { + } + + virtual ~XMLReferenceHint_Impl() {} + + const OUString& GetRefName() const { return sRefName; } +}; + +class XMLHyperlinkHint_Impl : public XMLHint_Impl +{ + OUString sHRef; + OUString sName; + OUString sTargetFrameName; + OUString sStyleName; + OUString sVisitedStyleName; + XMLEventsImportContext* pEvents; + +public: + + XMLHyperlinkHint_Impl( const Reference < XTextRange > & rPos ) : + XMLHint_Impl( XML_HINT_HYPERLINK, rPos, rPos ), + pEvents( NULL ) + { + } + + virtual ~XMLHyperlinkHint_Impl() + { + if (NULL != pEvents) + pEvents->ReleaseRef(); + } + + void SetHRef( const OUString& s ) { sHRef = s; } + const OUString& GetHRef() const { return sHRef; } + void SetName( const OUString& s ) { sName = s; } + const OUString& GetName() const { return sName; } + void SetTargetFrameName( const OUString& s ) { sTargetFrameName = s; } + const OUString& GetTargetFrameName() const { return sTargetFrameName; } + void SetStyleName( const OUString& s ) { sStyleName = s; } + const OUString& GetStyleName() const { return sStyleName; } + void SetVisitedStyleName( const OUString& s ) { sVisitedStyleName = s; } + const OUString& GetVisitedStyleName() const { return sVisitedStyleName; } + XMLEventsImportContext* GetEventsContext() const; + void SetEventsContext( XMLEventsImportContext* pCtxt ); +}; + +void XMLHyperlinkHint_Impl::SetEventsContext( XMLEventsImportContext* pCtxt ) +{ + pEvents = pCtxt; + if (pEvents != NULL) + pEvents->AddRef(); +} + +XMLEventsImportContext* XMLHyperlinkHint_Impl::GetEventsContext() const +{ + return pEvents; +} + + +class XMLIndexMarkHint_Impl : public XMLHint_Impl +{ + const Reference<beans::XPropertySet> xIndexMarkPropSet; + + const OUString sID; + +public: + + XMLIndexMarkHint_Impl( const Reference < beans::XPropertySet > & rPropSet, + const Reference < XTextRange > & rPos ) : + XMLHint_Impl( XML_HINT_INDEX_MARK, rPos, rPos ), + xIndexMarkPropSet( rPropSet ), + sID() + { + } + + XMLIndexMarkHint_Impl( const Reference < beans::XPropertySet > & rPropSet, + const Reference < XTextRange > & rPos, + OUString sIDString) : + XMLHint_Impl( XML_HINT_INDEX_MARK, rPos, rPos ), + xIndexMarkPropSet( rPropSet ), + sID(sIDString) + { + } + + virtual ~XMLIndexMarkHint_Impl() {} + + const Reference<beans::XPropertySet> & GetMark() const + { return xIndexMarkPropSet; } + const OUString& GetID() const { return sID; } +}; + +class XMLRubyHint_Impl : public XMLHint_Impl +{ + OUString sStyleName; + OUString sTextStyleName; + OUString sText; + +public: + + XMLRubyHint_Impl( const Reference < XTextRange > & rPos ) : + XMLHint_Impl( XML_HINT_RUBY, rPos, rPos ) + { + } + + virtual ~XMLRubyHint_Impl() {} + + void SetStyleName( const OUString& s ) { sStyleName = s; } + const OUString& GetStyleName() const { return sStyleName; } + void SetTextStyleName( const OUString& s ) { sTextStyleName = s; } + const OUString& GetTextStyleName() const { return sTextStyleName; } + void AppendText( const OUString& s ) { sText += s; } + const OUString& GetText() const { return sText; } +}; + +class XMLTextFrameHint_Impl : public XMLHint_Impl +{ + SvXMLImportContextRef xContext; + +public: + + XMLTextFrameHint_Impl( SvXMLImportContext *pContext, + const Reference < XTextRange > & rPos ) : + XMLHint_Impl( XML_HINT_TEXT_FRAME, rPos, rPos ), + xContext( pContext ) + { + } + +// XMLTextFrameHint_Impl( const Reference < XTextRange > & rPos ) : +// XMLHint_Impl( XML_HINT_TEXT_FRAME, rPos, rPos ), +// eAnchorType( TextContentAnchorType_AS_CHARACTER ) +// { +// } + + virtual ~XMLTextFrameHint_Impl() {} + + Reference < XTextContent > GetTextContent() const + { + Reference <XTextContent > xTxt; + SvXMLImportContext *pContext = &xContext; + if( pContext->ISA( XMLTextFrameContext ) ) + xTxt = PTR_CAST( XMLTextFrameContext, pContext )->GetTextContent(); + else if( pContext->ISA( XMLTextFrameHyperlinkContext ) ) + xTxt = PTR_CAST( XMLTextFrameHyperlinkContext, pContext ) + ->GetTextContent(); + + return xTxt; + } + + sal_Bool IsBoundAtChar() const + { + sal_Bool bRet = sal_False; + SvXMLImportContext *pContext = &xContext; + if( pContext->ISA( XMLTextFrameContext ) ) + bRet = TextContentAnchorType_AT_CHARACTER == + PTR_CAST( XMLTextFrameContext, pContext ) + ->GetAnchorType(); + else if( pContext->ISA( XMLTextFrameHyperlinkContext ) ) + bRet = TextContentAnchorType_AT_CHARACTER == + PTR_CAST( XMLTextFrameHyperlinkContext, pContext ) + ->GetAnchorType(); + return bRet; + } +}; + +typedef XMLHint_Impl *XMLHint_ImplPtr; +SV_DECL_PTRARR_DEL( XMLHints_Impl, XMLHint_ImplPtr, 5, 5 ) +SV_IMPL_PTRARR( XMLHints_Impl, XMLHint_ImplPtr ) + +// --------------------------------------------------------------------- + class XMLImpCharContext_Impl : public SvXMLImportContext { public: @@ -507,7 +747,7 @@ SvXMLImportContext *XMLImpHyperlinkContext_Impl::CreateChildContext( const Reference< xml::sax::XAttributeList > & xAttrList ) { if ( (nPrefix == XML_NAMESPACE_OFFICE) && - IsXMLToken(rLocalName, XML_EVENTS) ) + IsXMLToken(rLocalName, XML_EVENT_LISTENERS) ) { XMLEventsImportContext* pCtxt = new XMLEventsImportContext( GetImport(), nPrefix, rLocalName); @@ -1370,7 +1610,6 @@ SvXMLImportContext *XMLImpSpanContext_Impl::CreateChildContext( ) { SvXMLImportContext *pContext = 0; - sal_Bool bInsertTextFrame = sal_False; sal_uInt16 nTextFrameType = 0; sal_Bool bObjectOLE = sal_False; @@ -1445,8 +1684,7 @@ SvXMLImportContext *XMLImpSpanContext_Impl::CreateChildContext( rIgnoreLeadingSpace ); break; - case XML_TOK_TEXT_ENDNOTE: - case XML_TOK_TEXT_FOOTNOTE: + case XML_TOK_TEXT_NOTE: #ifndef SVX_LIGHT if (rImport.GetTextImport()->IsInFrame()) { @@ -1488,51 +1726,37 @@ SvXMLImportContext *XMLImpSpanContext_Impl::CreateChildContext( rHints, xAttrList ); break; - case XML_TOK_TEXT_TEXTBOX: - bInsertTextFrame = sal_True; - nTextFrameType = XML_TEXT_FRAME_TEXTBOX; - break; - - case XML_TOK_TEXT_IMAGE: - bInsertTextFrame = sal_True; - nTextFrameType = XML_TEXT_FRAME_GRAPHIC; - break; - case XML_TOK_TEXT_APPLET: - bInsertTextFrame = sal_True; - nTextFrameType = XML_TEXT_FRAME_APPLET; - break; - case XML_TOK_TEXT_FLOATING_FRAME: - bInsertTextFrame = sal_True; - nTextFrameType = XML_TEXT_FRAME_FLOATING_FRAME; - break; - case XML_TOK_TEXT_PLUGIN: - bInsertTextFrame = sal_True; - nTextFrameType = XML_TEXT_FRAME_PLUGIN; - break; - - case XML_TOK_TEXT_OBJECT_OLE: - bInsertTextFrame = sal_True; - nTextFrameType = XML_TEXT_FRAME_OBJECT_OLE; - break; - case XML_TOK_TEXT_OBJECT: - bInsertTextFrame = sal_True; - nTextFrameType = XML_TEXT_FRAME_OBJECT; + case XML_TOK_TEXT_FRAME: + { + Reference < XTextRange > xAnchorPos = + rImport.GetTextImport()->GetCursor()->getStart(); + XMLTextFrameContext *pTextFrameContext = + new XMLTextFrameContext( rImport, nPrefix, + rLocalName, xAttrList, + TextContentAnchorType_AS_CHARACTER ); + if( TextContentAnchorType_AT_CHARACTER == + pTextFrameContext->GetAnchorType() && + pTextFrameContext->GetTextContent().is() ) + { + rHints.Insert( new XMLTextFrameHint_Impl( + pTextFrameContext, xAnchorPos ), + rHints.Count() ); + } + pContext = pTextFrameContext; + rIgnoreLeadingSpace = sal_False; + } break; - case XML_TOK_DRAW_A: { Reference < XTextRange > xAnchorPos = rImport.GetTextImport()->GetCursor()->getStart(); - XMLTextFrameHint_Impl *pHint = - new XMLTextFrameHint_Impl( xAnchorPos ); - XMLTextFrameHyperlinkContext *pLinkContext = + pContext = new XMLTextFrameHyperlinkContext( rImport, nPrefix, rLocalName, xAttrList, - TextContentAnchorType_AS_CHARACTER, - // OD 2004-04-20 #i26791# - pHint ); + TextContentAnchorType_AS_CHARACTER ); + XMLTextFrameHint_Impl *pHint = + new XMLTextFrameHint_Impl( pContext, xAnchorPos); rHints.Insert( pHint, rHints.Count() ); - pContext = pLinkContext; } break; @@ -1697,7 +1921,7 @@ XMLParaContext::XMLParaContext( const SvXMLTokenMap& rTokenMap = GetImport().GetTextImport()->GetTextPAttrTokenMap(); - OUString aCondStyleName; + OUString aCondStyleName, sClassNames; sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; for( sal_Int16 i=0; i < nAttrCount; i++ ) @@ -1714,6 +1938,9 @@ XMLParaContext::XMLParaContext( case XML_TOK_TEXT_P_STYLE_NAME: sStyleName = rValue; break; + case XML_TOK_TEXT_P_CLASS_NAMES: + sClassNames = rValue; + break; case XML_TOK_TEXT_P_COND_STYLE_NAME: aCondStyleName = rValue; break; @@ -1733,6 +1960,11 @@ XMLParaContext::XMLParaContext( if( aCondStyleName.getLength() ) sStyleName = aCondStyleName; + else if( sClassNames.getLength() ) + { + sal_Int32 nDummy = 0; + sStyleName = sClassNames.getToken( 0, ' ', nDummy ); + } } XMLParaContext::~XMLParaContext() @@ -1754,7 +1986,8 @@ XMLParaContext::~XMLParaContext() xTxtImport->FindOutlineStyleName( sStyleName, nOutlineLevel ); // set style and hard attributes at the previous paragraph - sStyleName = xTxtImport->SetStyleAndAttrs( xAttrCursor, sStyleName, sal_True ); + sStyleName = xTxtImport->SetStyleAndAttrs( GetImport(), xAttrCursor, + sStyleName, sal_True ); if( bHeading ) xTxtImport->SetOutlineStyle( nOutlineLevel, sStyleName ); @@ -1773,7 +2006,8 @@ XMLParaContext::~XMLParaContext() const OUString& rStyleName = ((XMLStyleHint_Impl *)pHint)->GetStyleName(); if( rStyleName.getLength() ) - xTxtImport->SetStyleAndAttrs( xAttrCursor, rStyleName, + xTxtImport->SetStyleAndAttrs( GetImport(), + xAttrCursor, rStyleName, sal_False ); } break; @@ -1805,7 +2039,8 @@ XMLParaContext::~XMLParaContext() { const XMLHyperlinkHint_Impl *pHHint = (const XMLHyperlinkHint_Impl *)pHint; - xTxtImport->SetHyperlink( xAttrCursor, + xTxtImport->SetHyperlink( GetImport(), + xAttrCursor, pHHint->GetHRef(), pHHint->GetName(), pHHint->GetTargetFrameName(), @@ -1818,7 +2053,8 @@ XMLParaContext::~XMLParaContext() { const XMLRubyHint_Impl *pRHint = (const XMLRubyHint_Impl *)pHint; - xTxtImport->SetRuby( xAttrCursor, + xTxtImport->SetRuby( GetImport(), + xAttrCursor, pRHint->GetStyleName(), pRHint->GetTextStyleName(), pRHint->GetText() ); |