21 #include <com/sun/star/beans/XPropertySetInfo.hpp>
22 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
23 #include <com/sun/star/uno/XComponentContext.hpp>
24 #include <rtl/ustrbuf.hxx>
50 using namespace ::
osl;
62 XML_ETACTION_DOCUMENT,
67 XML_ETACTION_STYLE_RENAME,
71 XML_ETACTION_TAB_STOP,
72 XML_ETACTION_FORM_CONTROL,
73 XML_ETACTION_FORM_PROPERTY,
74 XML_ETACTION_CONFIG_ITEM,
75 XML_ETACTION_TRACKED_CHANGES,
77 XML_ETACTION_CHART_PLOT_AREA
82 #define ENTRY3( n, l, a, p1, p2, p3 ) \
83 { XML_NAMESPACE_##n, XML_##l, a, p1, p2, p3 }
84 #define ENTRY3QNQ( n, l, a, n1, l1, p2, n3, l3 ) \
85 ENTRY3( n, l, a, XMLTransformerActionInit::QNameParam( n1, l1 ), \
86 p2, XMLTransformerActionInit::QNameParam( n3, l3 ) )
88 #define ENTRY2( n, l, a, p1, p2 ) \
89 ENTRY3( n, l, a, p1, p2, 0 )
90 #define ENTRY2QN( n, l, a, n1, l1, p2 ) \
91 ENTRY2( n, l, a, XMLTransformerActionInit::QNameParam( n1, l1 ), p2 )
93 #define ENTRY1( n, l, a, p1 ) \
94 ENTRY3( n, l, a, p1, 0, 0 )
95 #define ENTRY1Q( n, l, a, p1, t1 ) \
96 ENTRY1( n, l, a, XMLTransformerActionInit::QNameParam( p1, t1 ) )
98 #define ENTRY0( n, l, a ) \
99 ENTRY3( n, l, a, 0, 0, 0 )
105 return static_cast< sal_Int32
>(f) | (static_cast< sal_Int32 >(s) << 16);
112 ENTRY0(
OFFICE, DOCUMENT_CONTENT, XML_ETACTION_DOCUMENT ),
206 ENTRY1(
TEXT, LIST_LEVEL_STYLE_NUMBER, XML_ETACTION_STYLE,
208 ENTRY1(
TEXT, LIST_LEVEL_STYLE_BULLET, XML_ETACTION_STYLE,
210 ENTRY1(
TEXT, LIST_LEVEL_STYLE_IMAGE, XML_ETACTION_STYLE,
212 ENTRY1(
TEXT, OUTLINE_LEVEL_STYLE, XML_ETACTION_STYLE,
225 ENTRY1(
DRAW, STROKE_DASH, XML_ETACTION_STYLE,
241 ENTRY1(
TEXT, NOTES_CONFIGURATION, XML_ETACTION_NOTES,
263 ENTRY0( PRESENTATION, EVENT_LISTENER, XML_ETACTION_EVENT ),
314 ENTRY0(
CHART, PLOT_AREA, XML_ETACTION_CHART_PLOT_AREA ),
316 ENTRY0( CONFIG, CONFIG_ITEM, XML_ETACTION_CONFIG_ITEM ),
317 ENTRY1Q(
TEXT, TRACKED_CHANGES, XML_ETACTION_TRACKED_CHANGES,
319 ENTRY1Q(
TABLE, TRACKED_CHANGES, XML_ETACTION_TRACKED_CHANGES,
418 ENTRY0(
FORM, TEXTAREA, XML_ETACTION_FORM_CONTROL ),
419 ENTRY0(
FORM, FIXED_TEXT, XML_ETACTION_FORM_CONTROL ),
420 ENTRY0(
FORM, FILE, XML_ETACTION_FORM_CONTROL ),
421 ENTRY0(
FORM, PASSWORD, XML_ETACTION_FORM_CONTROL ),
422 ENTRY0(
FORM, FORMATTED_TEXT, XML_ETACTION_FORM_CONTROL ),
426 ENTRY0(
FORM, RADIO, XML_ETACTION_FORM_CONTROL ),
431 ENTRY0(
FORM, IMAGE_FRAME, XML_ETACTION_FORM_CONTROL ),
432 ENTRY0(
FORM, GRID, XML_ETACTION_FORM_CONTROL ),
433 ENTRY0(
FORM, VALUE_RANGE, XML_ETACTION_FORM_CONTROL ),
434 ENTRY0(
FORM, GENERIC_CONTROL, XML_ETACTION_FORM_CONTROL ),
438 ENTRY1(
FORM, LIST_PROPERTY, XML_ETACTION_FORM_PROPERTY,
1155 OUString m_aElemQName;
1159 const OUString& rQName );
1161 virtual void StartElement(
const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList )
override;
1167 XMLTableTransformerContext_Impl::XMLTableTransformerContext_Impl(
1169 const OUString& rQName ) :
1171 m_aElemQName( rQName )
1175 void XMLTableTransformerContext_Impl::StartElement(
1176 const Reference< XAttributeList >& rAttrList )
1178 Reference< XAttributeList > xAttrList( rAttrList );
1182 sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->
getLength() : 0;
1183 for( sal_Int16 i=0;
i < nAttrCount;
i++ )
1185 const OUString& rAttrName = xAttrList->getNameByIndex( i );
1186 OUString aLocalName;
1187 sal_uInt16 nPrefix =
1188 GetTransformer().GetNamespaceMap().GetKeyByAttrName( rAttrName,
1194 const OUString&
rValue = xAttrList->getValueByIndex( i );
1197 m_aElemQName = GetTransformer().GetNamespaceMap().GetQNameByKey(
1200 if ( !pMutableAttrList )
1204 xAttrList = pMutableAttrList;
1213 const OUString& rValue = xAttrList->getValueByIndex( i );
1214 OUString aAttrValue( rValue );
1217 if ( !pMutableAttrList )
1221 xAttrList = pMutableAttrList;
1228 if ( !pMutableAttrList )
1232 xAttrList = pMutableAttrList;
1239 GetTransformer().GetDocHandler()->startElement( m_aElemQName, xAttrList );
1242 void XMLTableTransformerContext_Impl::EndElement()
1244 GetTransformer().GetDocHandler()->endElement( m_aElemQName );
1255 const OUString& rQName );
1257 virtual void StartElement(
const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList )
override;
1260 const OUString& rLocalName,
1261 const OUString& rQName,
1262 const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList )
override;
1268 XMLBodyOASISTransformerContext_Impl::XMLBodyOASISTransformerContext_Impl(
1270 const OUString& rQName ) :
1272 m_bFirstChild( false )
1276 void XMLBodyOASISTransformerContext_Impl::StartElement(
1277 const Reference< XAttributeList >& )
1282 const OUString& rLocalName,
1283 const OUString& rQName,
1284 const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList )
1288 m_bFirstChild =
true;
1295 void XMLBodyOASISTransformerContext_Impl::EndElement()
1309 const OUString& rQName );
1311 virtual void StartElement(
const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList )
override;
1316 XMLTabStopOASISTContext_Impl::XMLTabStopOASISTContext_Impl(
1318 const OUString& rQName ) :
1323 void XMLTabStopOASISTContext_Impl::StartElement(
1324 const Reference< XAttributeList >& rAttrList )
1328 SAL_WARN_IF(
nullptr == pActions,
"xmloff.transform",
"got no actions" );
1331 sal_Int16 nLeaderText = -1;
1332 Reference< XAttributeList > xAttrList( rAttrList );
1334 sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->
getLength() : 0;
1335 for( sal_Int16 i=0;
i < nAttrCount;
i++ )
1337 const OUString& rAttrName = xAttrList->getNameByIndex( i );
1338 OUString aLocalName;
1339 sal_uInt16 nPrefix =
1340 GetTransformer().GetNamespaceMap().GetKeyByAttrName( rAttrName,
1342 XMLTransformerActions::key_type aKey( nPrefix, aLocalName );
1343 XMLTransformerActions::const_iterator aIter =
1344 pActions->find( aKey );
1345 if( aIter != pActions->end() )
1347 if( !pMutableAttrList )
1351 xAttrList = pMutableAttrList;
1354 switch( (*aIter).second.m_nActionType )
1360 cStyleLeaderChar =
' ';
1362 cStyleLeaderChar =
'.';
1364 cStyleLeaderChar = 0;
1372 OUString aNewAttrQName(
1373 GetTransformer().GetNamespaceMap().GetQNameByKey(
1374 (*aIter).second.GetQNamePrefixFromParam1(),
1376 (*aIter).second.GetQNameTokenFromParam1()) ) );
1382 if( rAttrValue.getLength() > 1 )
1384 OUString aAttrValue( rAttrValue.copy( 0, 1 ) );
1392 OUString aAttrValue( rAttrValue );
1399 SAL_WARN(
"xmloff.transform",
"unknown action" );
1405 if( cStyleLeaderChar &&
' ' != cStyleLeaderChar )
1407 if( nLeaderText != -1 )
1409 OUString aNewAttrQName(
1410 GetTransformer().GetNamespaceMap().GetQNameByKey(
1414 OUString( cStyleLeaderChar ) );
1419 if( nLeaderText != -1 )
1431 bool m_bIsRedlineProtectionKey;
1437 const OUString& rQName );
1439 virtual void StartElement(
const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList )
override;
1442 virtual void Characters(
const OUString& rChars )
override;
1447 XMLConfigItemTContext_Impl::XMLConfigItemTContext_Impl(
1449 const OUString& rQName ) :
1451 m_bIsRedlineProtectionKey( false ),
1452 m_bIsCursorX( false ),
1453 m_bIsCursorY( false )
1457 void XMLConfigItemTContext_Impl::StartElement(
1458 const Reference< XAttributeList >& rAttrList )
1460 sal_Int16 nAttrCount = rAttrList.is() ? rAttrList->getLength() : 0;
1461 for( sal_Int16 i=0;
i < nAttrCount;
i++ )
1463 const OUString& rAttrName = rAttrList->getNameByIndex( i );
1464 OUString aLocalName;
1465 sal_uInt16 nPrefix =
1466 GetTransformer().GetNamespaceMap().GetKeyByAttrName( rAttrName,
1472 const OUString& rValue = rAttrList->getValueByIndex( i );
1473 if( rValue ==
"RedlineProtectionKey" )
1474 m_bIsRedlineProtectionKey =
true;
1475 else if( rValue ==
"CursorPositionX" )
1476 m_bIsCursorX =
true;
1477 else if( rValue ==
"CursorPositionY" )
1478 m_bIsCursorY =
true;
1488 void XMLConfigItemTContext_Impl::Characters(
const OUString& rChars )
1490 OUString sChars(rChars);
1491 if (m_bIsRedlineProtectionKey)
1493 else if (m_bIsCursorX || m_bIsCursorY)
1495 sal_Int32
nPos = rChars.toInt32();
1496 if (m_bIsCursorX && nPos > 255)
1498 else if (m_bIsCursorY && nPos > 31999)
1501 sChars = OUString::number(nPos);
1507 void XMLConfigItemTContext_Impl::EndElement()
1510 if( m_bIsRedlineProtectionKey )
1513 GetTransformer().GetPropertySet();
1516 OUString aPropName(
"RedlineProtectionKey");
1517 Reference< XPropertySetInfo > xPropSetInfo(
1518 rPropSet->getPropertySetInfo() );
1519 if( xPropSetInfo.is() &&
1520 xPropSetInfo->hasPropertyByName( aPropName ) )
1522 Sequence < sal_Int8 > aKey;
1524 rPropSet->setPropertyValue( aPropName,
makeAny( aKey ) );
1535 OUString
const m_aAttrQName;
1540 const OUString& rQName,
1544 virtual void StartElement(
const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList )
override;
1549 XMLTrackedChangesOASISTContext_Impl::XMLTrackedChangesOASISTContext_Impl(
1551 const OUString& rQName,
1555 m_aAttrQName( rImp.GetNamespaceMap().GetQNameByKey( nPrefix,
1560 void XMLTrackedChangesOASISTContext_Impl::StartElement(
1561 const Reference< XAttributeList >& rAttrList )
1563 Reference< XAttributeList > xAttrList( rAttrList );
1565 GetTransformer().GetPropertySet();
1568 OUString aPropName(
"RedlineProtectionKey");
1569 Reference< XPropertySetInfo > xPropSetInfo(
1570 rPropSet->getPropertySetInfo() );
1571 if( xPropSetInfo.is() &&
1572 xPropSetInfo->hasPropertyByName( aPropName ) )
1574 Any aAny = rPropSet->getPropertyValue( aPropName);
1575 Sequence < sal_Int8 > aKey;
1577 if( aKey.hasElements() )
1583 xAttrList = pMutableAttrList;
1585 aBuffer.makeStringAndClear() );
1594 const OUString& rQName,
1599 case XML_ETACTION_META:
1601 case XML_ETACTION_DOCUMENT:
1603 case XML_ETACTION_BODY:
1604 return new XMLBodyOASISTransformerContext_Impl( *
this, rQName );
1605 case XML_ETACTION_NOTES:
1607 static_cast< XMLTokenEnum>( rAction.
m_nParam1 ), bPersistent );
1608 case XML_ETACTION_TABLE:
1609 return new XMLTableTransformerContext_Impl( *
this, rQName );
1610 case XML_ETACTION_STYLE:
1612 case XML_ETACTION_STYLE_RENAME:
1616 case XML_ETACTION_FRAME:
1618 case XML_ETACTION_EVENT:
1620 case XML_ETACTION_DLG:
1622 case XML_ETACTION_TAB_STOP:
1623 return new XMLTabStopOASISTContext_Impl( *
this, rQName );
1624 case XML_ETACTION_FORM_CONTROL:
1631 case XML_ETACTION_FORM_PROPERTY:
1633 static_cast< XMLTokenEnum >( rAction.
m_nParam1 ) );
1634 case XML_ETACTION_CHART:
1636 case XML_ETACTION_CONFIG_ITEM:
1637 return new XMLConfigItemTContext_Impl( *
this, rQName );
1638 case XML_ETACTION_TRACKED_CHANGES:
1639 return new XMLTrackedChangesOASISTContext_Impl( *
this, rQName,
1642 case XML_ETACTION_CHART_PLOT_AREA:
1645 SAL_WARN(
"xmloff.transform",
"no user defined context found!" );
1811 aAlphabeticalIndexMarkActionTable ) );
1837 ->Add( aDrawAreaPolygonActionTable );
1873 OUString aMacroName;
1874 sal_uInt16 nPrefix =
1883 m_pEventMap(
nullptr ),
1884 m_pFormEventMap(
nullptr )
1948 class theOasis2OOoTransformerUnoTunnelId :
public rtl::Static< UnoTunnelIdInit, theOasis2OOoTransformerUnoTunnelId> {};
1953 return theOasis2OOoTransformerUnoTunnelId::get().getSeq();
1959 if( isUnoTunnelId<Oasis2OOoTransformer>(rId) )
1961 return reinterpret_cast< sal_Int64
>( this );
1964 return sal_Int64(0);
1970 return "com.sun.star.comp.Oasis2OOoTransformer";
1985 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
1987 css::uno::XComponentContext* , css::uno::Sequence<css::uno::Any>
const&)
1989 SAL_INFO(
"xmloff.transform",
"Creating Oasis2OOoTransformer");
XMLTransformerActionInit const aAnnotationActionTable[]
XMLTransformerActionInit const aXLinkActionTable[]
XMLTransformerActionInit const aDataPilotLevelActionTable[]
XMLTokenEnum const aTokenMap[]
XMLTransformerActionInit const aActionTable[]
constexpr sal_uInt16 XML_NAMESPACE_OFFICE
#define ENTRY3QNQ(n, l, a, n1, l1, p2, n3, l3)
XMLTransformerActionInit const aFormPropActionTable[]
XMLTransformerActionInit const aFootnoteSepActionTable[]
static XMLTransformerOASISEventMap_Impl * CreateFormEventMap()
constexpr sal_uInt16 XML_NAMESPACE_CHART
constexpr sal_uInt16 XML_NAMESPACE_DR3D
constexpr sal_uInt16 XML_NAMESPACE_SCRIPT
XMLTransformerActionInit const aTableStyleRefActionTable[]
constexpr sal_uInt16 XML_NAMESPACE_OOO
XMLTransformerActionInit const aConfigItemSetActionTable[]
bool IsXMLToken(std::u16string_view rString, enum XMLTokenEnum eToken)
compare eToken to the string
constexpr sal_uInt16 XML_NAMESPACE_DLG
XMLTransformerActionInit const aScriptActionTable[]
XMLTransformerActionInit const aTextValueTypeActionTable[]
constexpr sal_uInt16 XML_NAMESPACE_NUMBER
XMLTransformerActionInit const aFrameActionTable[]
sal_uInt16 GetKeyByAttrName(const OUString &rAttrName, OUString *pPrefix, OUString *pLocalName, OUString *pNamespace) const
XMLTransformerActionInit const aEventActionTable[]
XMLTransformerActionInit const aMasterPageActionTable[]
css::uno::Any const & rValue
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * xmloff_Oasis2OOoTransformer_get_implementation(css::uno::XComponentContext *, css::uno::Sequence< css::uno::Any > const &)
XMLTransformerActionInit const aStyleActionTable[]
#define ENTRY2QN(n, l, a, n1, l1, p2)
static constexpr sal_Int32 RENAME_ENTRY(XMLTokenEnum f, XMLTokenEnum s)
XMLUserDefinedTransformerAction
XMLTransformerActionInit const aFormulaActionTable[]
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
XMLTransformerActionInit const aMasterPageRefActionTable[]
constexpr sal_uInt16 XML_NAMESPACE_FORM
XMLTransformerActionInit const aDDEConvModeActionTable[]
XMLTransformerActionInit const aFormControlActionTable[]
XMLTransformerActionInit const aSourceServiceActionTable[]
static XMLTransformerActions * CreateTransformerActions(sal_uInt16 nType)
XMLTransformerActionInit const aParaStyleRefActionTable[]
XMLTransformerActionInit const aShapeActionTable[]
XMLTransformerActionInit const aAlphabeticalIndexMarkActionTable[]
virtual sal_Int16 SAL_CALL getLength() override
static void encode(OUStringBuffer &aStrBuffer, const css::uno::Sequence< sal_Int8 > &aPass)
XMLTransformerActionInit const aParaActionTable[]
XMLTransformerActionInit const aFormColumnActionTable[]
constexpr sal_uInt16 XML_NAMESPACE_DRAW
XMLTransformerActionInit const aNotesActionTable[]
XMLTokenEnum
The enumeration of all XML tokens.
#define MAP(name, prefix, token, type, context, version)
constexpr sal_uInt16 XML_NAMESPACE_CONFIG
XMLTransformerActionInit const aChangeInfoActionTable[]
XMLTransformerActionInit const aLineNumberingActionTable[]
constexpr sal_uInt16 XML_NAMESPACE_SVG
XMLTransformerActionInit const aDataPilotMemberActionTable[]
bool HasQName(sal_uInt16 nPrefix,::xmloff::token::XMLTokenEnum eToken) const
XMLTransformerActionInit const aDDEConnectionDeclActionTable[]
constexpr sal_uInt16 XML_NAMESPACE_FO
XMLTransformerActionInit const aTableValueTypeActionTable[]
void SetValueByIndex(sal_Int16 i, const OUString &rValue)
constexpr sal_uInt16 XML_NAMESPACE_TEXT
XMLTransformerActionInit const aDropCapActionTable[]
static void decode(css::uno::Sequence< sal_Int8 > &aPass, const OUString &sBuffer)
XMLTransformerActionInit const aDateTimeActionTable[]
void RemoveAttributeByIndex(sal_Int16 i)
void AddAttribute(const OUString &sName, const OUString &sValue)
void RenameAttributeByIndex(sal_Int16 i, const OUString &rNewName)
XMLTransformerActionInit const aFontFaceActionTable[]
XMLTransformerActionInit const aListStyleRefActionTable[]
virtual void EndElement()
virtual void Characters(const OUString &rChars)
virtual void StartElement(const css::uno::Reference< css::xml::sax::XAttributeList > &xAttrList) override
XMLTransformerActionInit const aIndexEntryTabStopActionTable[]
XMLTransformerActionInit const aBackgroundImageActionTable[]
XMLTransformerActionInit const aMapStyleRefActionTable[]
virtual void StartElement(const css::uno::Reference< css::xml::sax::XAttributeList > &xAttrList)
#define ENTRY1Q(n, l, a, p1, t1)
constexpr sal_uInt16 XML_NAMESPACE_PRESENTATION
XMLTransformerActionInit const aChartActionTable[]
std::unique_ptr< char[]> aBuffer
XMLTransformerActionInit const aDlgActionTable[]
constexpr sal_uInt16 XML_NAMESPACE_TABLE
#define ENTRY1(n, l, a, p1)
::ucbhelper::Content m_aContent
#define SAL_WARN_IF(condition, area, stream)
const OUString & GetXMLToken(enum XMLTokenEnum eToken)
return the OUString representation for eToken
Handling of tokens in XML:
#define SAL_INFO(area, stream)
static OUString GetEventName(sal_uInt16 nPrefix, const OUString &rName, XMLTransformerOASISEventMap_Impl &rMap, XMLTransformerOASISEventMap_Impl *pMap2)
sal_uInt16 Add(const OUString &rPrefix, const OUString &rName, sal_uInt16 nKey=XML_NAMESPACE_UNKNOWN)
XMLTransformerActionInit const aColumnsActionTable[]
XMLTransformerActionInit const aConnectorActionTable[]
#define SAL_WARN(area, stream)
#define ENTRY2(n, l, a, p1, p2)
constexpr sal_uInt16 XML_NAMESPACE_META
static void FlushEventMap(XMLTransformerOASISEventMap_Impl *p)
XMLTransformerActionInit const aFormActionTable[]
virtual OUString SAL_CALL getValueByIndex(sal_Int16 i) override
XMLTransformerActionInit const aTabStopActionTable[]
XMLTransformerActionInit const aDrawAreaPolygonActionTable[]
XMLTransformerActionInit const aTextStyleRefActionTable[]
constexpr sal_uInt16 XML_NAMESPACE_STYLE
static XMLTransformerOASISEventMap_Impl * CreateEventMap()
virtual rtl::Reference< XMLTransformerContext > CreateChildContext(sal_uInt16 nPrefix, const OUString &rLocalName, const OUString &rQName, const css::uno::Reference< css::xml::sax::XAttributeList > &xAttrList)
XMLTransformerActionInit const aContentValidationActionTable[]
XMLTransformerActionInit const aAnimationActionTable[]
css::uno::Any SAL_CALL makeAny(const SharedUNOComponent< INTERFACE, COMPONENT > &value)