summaryrefslogtreecommitdiff
path: root/xmloff/source/text/txtparai.cxx
diff options
context:
space:
mode:
authorRüdiger Timm <rt@openoffice.org>2004-07-13 07:42:44 +0000
committerRüdiger Timm <rt@openoffice.org>2004-07-13 07:42:44 +0000
commit36125a5d8cc318d00a8376ca70a94ceeb7b342fd (patch)
tree145f03eb0ec53d02da779919fa9912e14090237b /xmloff/source/text/txtparai.cxx
parent65b5704bb199f5034e0f7e616df8c17f049033c5 (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.cxx346
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() );