summaryrefslogtreecommitdiff
path: root/xmloff/source/text/txtparai.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'xmloff/source/text/txtparai.cxx')
-rw-r--r--xmloff/source/text/txtparai.cxx256
1 files changed, 125 insertions, 131 deletions
diff --git a/xmloff/source/text/txtparai.cxx b/xmloff/source/text/txtparai.cxx
index 6fb213f43642..dda2c3d49030 100644
--- a/xmloff/source/text/txtparai.cxx
+++ b/xmloff/source/text/txtparai.cxx
@@ -190,6 +190,11 @@ public:
const OUString& rLocalName,
XMLHints_Impl& rHnts,
const Reference<xml::sax::XAttributeList> & xAttrList);
+
+ static sal_Bool FindName(
+ SvXMLImport& rImport,
+ const Reference<xml::sax::XAttributeList> & xAttrList,
+ OUString& rName);
};
TYPEINIT1( XMLStartReferenceContext_Impl, SvXMLImportContext );
@@ -203,11 +208,8 @@ XMLStartReferenceContext_Impl::XMLStartReferenceContext_Impl(
SvXMLImportContext(rImport, nPrefix, rLocalName)
{
OUString sName;
- OUString dummy;
- // borrow FindName from XMLTextMarkImportContext, where bookmarks
- // and point references are handled.
- if (XMLTextMarkImportContext::FindName(GetImport(), xAttrList, sName, dummy))
+ if (FindName(GetImport(), xAttrList, sName))
{
XMLHint_Impl* pHint = new XMLReferenceHint_Impl(
sName, rImport.GetTextImport()->GetCursor()->getStart() );
@@ -219,6 +221,33 @@ XMLStartReferenceContext_Impl::XMLStartReferenceContext_Impl(
}
}
+sal_Bool XMLStartReferenceContext_Impl::FindName(
+ SvXMLImport& rImport,
+ const Reference<xml::sax::XAttributeList> & xAttrList,
+ OUString& rName)
+{
+ sal_Bool bNameOK( sal_False );
+
+ // find name attribute first
+ const sal_Int16 nLength( xAttrList->getLength() );
+ for (sal_Int16 nAttr = 0; nAttr < nLength; nAttr++)
+ {
+ OUString sLocalName;
+ const sal_uInt16 nPrefix = rImport.GetNamespaceMap().
+ GetKeyByAttrName( xAttrList->getNameByIndex(nAttr),
+ &sLocalName );
+
+ if ( (XML_NAMESPACE_TEXT == nPrefix) &&
+ IsXMLToken(sLocalName, XML_NAME) )
+ {
+ rName = xAttrList->getValueByIndex(nAttr);
+ bNameOK = sal_True;
+ }
+ }
+
+ return bNameOK;
+}
+
// ---------------------------------------------------------------------
/** import end of reference (<text:reference-end>) */
@@ -247,10 +276,9 @@ XMLEndReferenceContext_Impl::XMLEndReferenceContext_Impl(
SvXMLImportContext(rImport, nPrefix, rLocalName)
{
OUString sName;
- OUString dummy;
- // borrow from XMLTextMarkImportContext
- if (XMLTextMarkImportContext::FindName(GetImport(), xAttrList, sName, dummy))
+ // borrow from XMLStartReferenceContext_Impl
+ if (XMLStartReferenceContext_Impl::FindName(GetImport(), xAttrList, sName))
{
// search for reference start
sal_uInt16 nCount = rHints.Count();
@@ -511,9 +539,44 @@ void XMLImpRubyBaseContext_Impl::Characters( const OUString& rChars )
// ---------------------------------------------------------------------
+class XMLImpRubyContext_Impl : public SvXMLImportContext
+{
+ XMLHints_Impl& rHints;
+
+ sal_Bool& rIgnoreLeadingSpace;
+
+ Reference < XTextRange > m_xStart;
+ OUString m_sStyleName;
+ OUString m_sTextStyleName;
+ OUString m_sText;
+
+public:
+
+ TYPEINFO();
+
+ XMLImpRubyContext_Impl(
+ SvXMLImport& rImport,
+ sal_uInt16 nPrfx,
+ const OUString& rLName,
+ const Reference< xml::sax::XAttributeList > & xAttrList,
+ XMLHints_Impl& rHnts,
+ sal_Bool& rIgnLeadSpace );
+
+ virtual ~XMLImpRubyContext_Impl();
+
+ virtual SvXMLImportContext *CreateChildContext(
+ sal_uInt16 nPrefix, const OUString& rLocalName,
+ const Reference< xml::sax::XAttributeList > & xAttrList );
+
+ void SetTextStyleName( const OUString& s ) { m_sTextStyleName = s; }
+ void AppendText( const OUString& s ) { m_sText += s; }
+};
+
+// ---------------------------------------------------------------------
+
class XMLImpRubyTextContext_Impl : public SvXMLImportContext
{
- XMLRubyHint_Impl *pHint;
+ XMLImpRubyContext_Impl & m_rRubyContext;
public:
@@ -524,7 +587,7 @@ public:
sal_uInt16 nPrfx,
const OUString& rLName,
const Reference< xml::sax::XAttributeList > & xAttrList,
- XMLRubyHint_Impl *pHint );
+ XMLImpRubyContext_Impl & rParent );
virtual ~XMLImpRubyTextContext_Impl();
@@ -538,9 +601,9 @@ XMLImpRubyTextContext_Impl::XMLImpRubyTextContext_Impl(
sal_uInt16 nPrfx,
const OUString& rLName,
const Reference< xml::sax::XAttributeList > & xAttrList,
- XMLRubyHint_Impl *pHt ) :
- SvXMLImportContext( rImport, nPrfx, rLName ),
- pHint( pHt )
+ XMLImpRubyContext_Impl & rParent )
+ : SvXMLImportContext( rImport, nPrfx, rLName )
+ , m_rRubyContext( rParent )
{
sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
for( sal_Int16 i=0; i < nAttrCount; i++ )
@@ -555,7 +618,7 @@ XMLImpRubyTextContext_Impl::XMLImpRubyTextContext_Impl(
if( XML_NAMESPACE_TEXT == nPrefix &&
IsXMLToken( aLocalName, XML_STYLE_NAME ) )
{
- pHint->SetTextStyleName( rValue );
+ m_rRubyContext.SetTextStyleName( rValue );
break;
}
}
@@ -567,37 +630,11 @@ XMLImpRubyTextContext_Impl::~XMLImpRubyTextContext_Impl()
void XMLImpRubyTextContext_Impl::Characters( const OUString& rChars )
{
- pHint->AppendText( rChars );
+ m_rRubyContext.AppendText( rChars );
}
// ---------------------------------------------------------------------
-class XMLImpRubyContext_Impl : public SvXMLImportContext
-{
- XMLHints_Impl& rHints;
- XMLRubyHint_Impl *pHint;
-
- sal_Bool& rIgnoreLeadingSpace;
-
-public:
-
- TYPEINFO();
-
- XMLImpRubyContext_Impl(
- SvXMLImport& rImport,
- sal_uInt16 nPrfx,
- const OUString& rLName,
- const Reference< xml::sax::XAttributeList > & xAttrList,
- XMLHints_Impl& rHnts,
- sal_Bool& rIgnLeadSpace );
-
- virtual ~XMLImpRubyContext_Impl();
-
- virtual SvXMLImportContext *CreateChildContext(
- sal_uInt16 nPrefix, const OUString& rLocalName,
- const Reference< xml::sax::XAttributeList > & xAttrList );
-};
-
TYPEINIT1( XMLImpRubyContext_Impl, SvXMLImportContext );
XMLImpRubyContext_Impl::XMLImpRubyContext_Impl(
@@ -609,9 +646,8 @@ XMLImpRubyContext_Impl::XMLImpRubyContext_Impl(
sal_Bool& rIgnLeadSpace ) :
SvXMLImportContext( rImport, nPrfx, rLName ),
rHints( rHnts ),
- pHint( new XMLRubyHint_Impl(
- GetImport().GetTextImport()->GetCursorAsRange()->getStart() ) ),
rIgnoreLeadingSpace( rIgnLeadSpace )
+ , m_xStart( GetImport().GetTextImport()->GetCursorAsRange()->getStart() )
{
sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
for( sal_Int16 i=0; i < nAttrCount; i++ )
@@ -626,18 +662,22 @@ XMLImpRubyContext_Impl::XMLImpRubyContext_Impl(
if( XML_NAMESPACE_TEXT == nPrefix &&
IsXMLToken( aLocalName, XML_STYLE_NAME ) )
{
- pHint->SetStyleName( rValue );
+ m_sStyleName = rValue;
break;
}
}
- rHints.Insert( pHint, rHints.Count() );
}
XMLImpRubyContext_Impl::~XMLImpRubyContext_Impl()
{
- if( pHint )
- pHint->SetEnd( GetImport().GetTextImport()
- ->GetCursorAsRange()->getStart() );
+ const UniReference < XMLTextImportHelper > xTextImport(
+ GetImport().GetTextImport());
+ const Reference < XTextCursor > xAttrCursor(
+ xTextImport->GetText()->createTextCursorByRange( m_xStart ));
+ xAttrCursor->gotoRange(xTextImport->GetCursorAsRange()->getStart(),
+ sal_True);
+ xTextImport->SetRuby( GetImport(), xAttrCursor,
+ m_sStyleName, m_sTextStyleName, m_sText );
}
SvXMLImportContext *XMLImpRubyContext_Impl::CreateChildContext(
@@ -657,7 +697,7 @@ SvXMLImportContext *XMLImpRubyContext_Impl::CreateChildContext(
pContext = new XMLImpRubyTextContext_Impl( GetImport(), nPrefix,
rLocalName,
xAttrList,
- pHint );
+ *this );
else
pContext = new SvXMLImportContext(
GetImport(), nPrefix, rLocalName );
@@ -672,7 +712,6 @@ SvXMLImportContext *XMLImpRubyContext_Impl::CreateChildContext(
// ---------------------------------------------------------------------
/** for text:meta and text:meta-field
-//FIXME not tested
*/
class XMLMetaImportContextBase : public SvXMLImportContext
{
@@ -691,19 +730,21 @@ public:
XMLMetaImportContextBase(
SvXMLImport& i_rImport,
- sal_uInt16 i_nPrefix,
+ const sal_uInt16 i_nPrefix,
const OUString& i_rLocalName,
- const Reference< xml::sax::XAttributeList > & i_xAttrList,
XMLHints_Impl& i_rHints,
sal_Bool & i_rIgnoreLeadingSpace );
virtual ~XMLMetaImportContextBase();
+ virtual void StartElement(
+ const Reference<xml::sax::XAttributeList> & i_xAttrList);
+
virtual void EndElement();
virtual SvXMLImportContext *CreateChildContext(
sal_uInt16 i_nPrefix, const OUString& i_rLocalName,
- const Reference< xml::sax::XAttributeList > & i_xAttrList );
+ const Reference< xml::sax::XAttributeList > & i_xAttrList);
virtual void Characters( const OUString& i_rChars );
@@ -718,33 +759,36 @@ TYPEINIT1( XMLMetaImportContextBase, SvXMLImportContext );
XMLMetaImportContextBase::XMLMetaImportContextBase(
SvXMLImport& i_rImport,
- sal_uInt16 i_nPrefix,
+ const sal_uInt16 i_nPrefix,
const OUString& i_rLocalName,
- const Reference< xml::sax::XAttributeList > & i_xAttrList,
XMLHints_Impl& i_rHints,
sal_Bool & i_rIgnoreLeadingSpace )
: SvXMLImportContext( i_rImport, i_nPrefix, i_rLocalName )
, m_rHints( i_rHints )
, m_rIgnoreLeadingSpace( i_rIgnoreLeadingSpace )
- , m_xStart()
+ , m_xStart( GetImport().GetTextImport()->GetCursorAsRange()->getStart() )
+{
+}
+
+XMLMetaImportContextBase::~XMLMetaImportContextBase()
+{
+}
+
+void XMLMetaImportContextBase::StartElement(
+ const Reference<xml::sax::XAttributeList> & i_xAttrList)
{
const sal_Int16 nAttrCount(i_xAttrList.is() ? i_xAttrList->getLength() : 0);
- for ( sal_Int16 i=0; i < nAttrCount; i++ )
+ for ( sal_Int16 i = 0; i < nAttrCount; ++i )
{
const OUString& rAttrName( i_xAttrList->getNameByIndex( i ) );
const OUString& rValue( i_xAttrList->getValueByIndex( i ) );
OUString sLocalName;
- sal_uInt16 nPrefix =
+ const sal_uInt16 nPrefix(
GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
- &sLocalName );
+ &sLocalName ));
ProcessAttribute(nPrefix, sLocalName, rValue);
}
- m_xStart = GetImport().GetTextImport()->GetCursorAsRange()->getStart();
-}
-
-XMLMetaImportContextBase::~XMLMetaImportContextBase()
-{
}
void XMLMetaImportContextBase::EndElement()
@@ -764,41 +808,15 @@ void XMLMetaImportContextBase::EndElement()
const Reference<XTextRange> xInsertionRange(xInsertionCursor, UNO_QUERY);
InsertMeta(xInsertionRange);
-//FIXME
-#if 0
- Reference<XMultiServiceFactory> xFactory(rImport.GetModel(), UNO_QUERY);
- if ( xFactory.is() )
- {
- Reference<XInterface> xIfc = xFactory->createInstance(sServiceName);
-
- // xml:id for RDF metadata
- rImport.SetXmlId(xIfc, i_rXmlId);
-
- // cast to XTextContent and attach to document
- Reference<XTextContent> xTextContent(xIfc, UNO_QUERY);
- if (xTextContent.is())
- {
- try
- {
- rImport.GetTextImport()->GetText()->insertTextContent(
- xInsertionRange, xTextContent, sal_True);
- }
- catch (com::sun::star::lang::IllegalArgumentException &)
- {
- OSL_ENSURE(false, "XMLMetaImportContext::EndElement: iae");
- }
- }
- }
-#endif
}
SvXMLImportContext * XMLMetaImportContextBase::CreateChildContext(
sal_uInt16 i_nPrefix, const OUString& i_rLocalName,
const Reference< xml::sax::XAttributeList > & i_xAttrList )
{
- const SvXMLTokenMap& rTokenMap =
- GetImport().GetTextImport()->GetTextPElemTokenMap();
- sal_uInt16 nToken = rTokenMap.Get( i_nPrefix, i_rLocalName );
+ const SvXMLTokenMap& rTokenMap(
+ GetImport().GetTextImport()->GetTextPElemTokenMap() );
+ const sal_uInt16 nToken( rTokenMap.Get( i_nPrefix, i_rLocalName ) );
return XMLImpSpanContext_Impl::CreateChildContext( GetImport(), i_nPrefix,
i_rLocalName, i_xAttrList, nToken, m_rHints, m_rIgnoreLeadingSpace );
@@ -812,8 +830,7 @@ void XMLMetaImportContextBase::Characters( const OUString& i_rChars )
void XMLMetaImportContextBase::ProcessAttribute(sal_uInt16 const i_nPrefix,
OUString const & i_rLocalName, OUString const & i_rValue)
{
- if ( (XML_NAMESPACE_XML == i_nPrefix) &&
- IsXMLToken(i_rLocalName, XML_ID) )
+ if ( (XML_NAMESPACE_XML == i_nPrefix) && IsXMLToken(i_rLocalName, XML_ID) )
{
m_XmlId = i_rValue;
}
@@ -822,9 +839,7 @@ void XMLMetaImportContextBase::ProcessAttribute(sal_uInt16 const i_nPrefix,
// ---------------------------------------------------------------------
-/** text:meta
-//FIXME not tested
- */
+/** text:meta */
class XMLMetaImportContext : public XMLMetaImportContextBase
{
// RDFa
@@ -839,9 +854,8 @@ public:
XMLMetaImportContext(
SvXMLImport& i_rImport,
- sal_uInt16 i_nPrefix,
+ const sal_uInt16 i_nPrefix,
const OUString& i_rLocalName,
- const Reference< xml::sax::XAttributeList > & i_xAttrList,
XMLHints_Impl& i_rHints,
sal_Bool & i_rIgnoreLeadingSpace );
@@ -855,13 +869,12 @@ TYPEINIT1( XMLMetaImportContext, XMLMetaImportContextBase );
XMLMetaImportContext::XMLMetaImportContext(
SvXMLImport& i_rImport,
- sal_uInt16 i_nPrefix,
+ const sal_uInt16 i_nPrefix,
const OUString& i_rLocalName,
- const Reference< xml::sax::XAttributeList > & i_xAttrList,
XMLHints_Impl& i_rHints,
sal_Bool & i_rIgnoreLeadingSpace )
: XMLMetaImportContextBase( i_rImport, i_nPrefix, i_rLocalName,
- i_xAttrList, i_rHints, i_rIgnoreLeadingSpace )
+ i_rHints, i_rIgnoreLeadingSpace )
, m_bHaveAbout(false)
{
}
@@ -929,9 +942,7 @@ void XMLMetaImportContext::InsertMeta(
// ---------------------------------------------------------------------
-/** text:meta-field
-//FIXME not tested
- */
+/** text:meta-field */
class XMLMetaFieldImportContext : public XMLMetaImportContextBase
{
OUString m_DataStyleName;
@@ -941,9 +952,8 @@ public:
XMLMetaFieldImportContext(
SvXMLImport& i_rImport,
- sal_uInt16 i_nPrefix,
+ const sal_uInt16 i_nPrefix,
const OUString& i_rLocalName,
- const Reference< xml::sax::XAttributeList > & i_xAttrList,
XMLHints_Impl& i_rHints,
sal_Bool & i_rIgnoreLeadingSpace );
@@ -957,21 +967,20 @@ TYPEINIT1( XMLMetaFieldImportContext, XMLMetaImportContextBase );
XMLMetaFieldImportContext::XMLMetaFieldImportContext(
SvXMLImport& i_rImport,
- sal_uInt16 i_nPrefix,
+ const sal_uInt16 i_nPrefix,
const OUString& i_rLocalName,
- const Reference< xml::sax::XAttributeList > & i_xAttrList,
XMLHints_Impl& i_rHints,
sal_Bool & i_rIgnoreLeadingSpace )
: XMLMetaImportContextBase( i_rImport, i_nPrefix, i_rLocalName,
- i_xAttrList, i_rHints, i_rIgnoreLeadingSpace )
+ i_rHints, i_rIgnoreLeadingSpace )
{
}
void XMLMetaFieldImportContext::ProcessAttribute(sal_uInt16 const i_nPrefix,
OUString const & i_rLocalName, OUString const & i_rValue)
{
- if( XML_NAMESPACE_STYLE == i_nPrefix &&
- IsXMLToken( i_rLocalName, XML_DATA_STYLE_NAME ) )
+ if ( XML_NAMESPACE_STYLE == i_nPrefix &&
+ IsXMLToken( i_rLocalName, XML_DATA_STYLE_NAME ) )
{
m_DataStyleName = i_rValue;
}
@@ -1811,18 +1820,15 @@ SvXMLImportContext *XMLImpSpanContext_Impl::CreateChildContext(
sal_False);
break;
-// FIXME: should test before enabling...
-#if 0
case XML_TOK_TEXT_META:
pContext = new XMLMetaImportContext(rImport, nPrefix, rLocalName,
- xAttrList, rHints, rIgnoreLeadingSpace );
+ rHints, rIgnoreLeadingSpace );
break;
case XML_TOK_TEXT_META_FIELD:
pContext = new XMLMetaFieldImportContext(rImport, nPrefix, rLocalName,
- xAttrList, rHints, rIgnoreLeadingSpace );
+ rHints, rIgnoreLeadingSpace );
break;
-#endif
default:
// none of the above? then it's probably a text field!
@@ -2190,17 +2196,6 @@ XMLParaContext::~XMLParaContext()
pHHint->GetEventsContext() );
}
break;
- case XML_HINT_RUBY:
- {
- const XMLRubyHint_Impl *pRHint =
- (const XMLRubyHint_Impl *)pHint;
- xTxtImport->SetRuby( GetImport(),
- xAttrCursor,
- pRHint->GetStyleName(),
- pRHint->GetTextStyleName(),
- pRHint->GetText() );
- }
- break;
case XML_HINT_INDEX_MARK:
{
Reference<beans::XPropertySet> xMark(
@@ -2341,7 +2336,6 @@ XMLNumberedParaContext::XMLNumberedParaContext(
m_xNumRules()
{
::rtl::OUString StyleName;
- bool ContinuteNumbering(false);
const SvXMLTokenMap& rTokenMap(
i_rImport.GetTextImport()->GetTextNumberedParagraphAttrTokenMap() );
@@ -2378,8 +2372,8 @@ XMLNumberedParaContext::XMLNumberedParaContext(
StyleName = rValue;
break;
case XML_TOK_TEXT_NUMBERED_PARAGRAPH_CONTINUE_NUMBERING:
- ContinuteNumbering = IsXMLToken(rValue, XML_TRUE);
-// ??? what in Fred's name is this supposed to do?
+ // this attribute is deprecated
+// ContinuteNumbering = IsXMLToken(rValue, XML_TRUE);
break;
case XML_TOK_TEXT_NUMBERED_PARAGRAPH_START_VALUE:
{