28 #include <osl/diagnose.h>
32 #include <com/sun/star/uri/UriReferenceFactory.hpp>
33 #include <com/sun/star/uri/XVndSunStarScriptUrl.hpp>
36 #include <unordered_map>
43 public std::unordered_map< NameKey_Impl, OUString,
44 NameHash_Impl, NameHash_Impl >
55 XMLTransformerOASISEventMap_Impl::key_type aKey;
56 XMLTransformerOASISEventMap_Impl::mapped_type
aData;
60 aKey.m_aLocalName = OUString::createFromAscii(pInit->
m_pOASISName);
62 OSL_ENSURE(
find( aKey ) ==
end(),
"duplicate event map entry" );
64 aData = OUString::createFromAscii(pInit->
m_pOOoName);
66 XMLTransformerOASISEventMap_Impl::value_type aVal( aKey, aData );
75 const OUString& rQName ) :
77 rImp.GetNamespaceMap().GetKeyByAttrName( rQName ),
XML_EVENT )
105 const OUString& rName,
109 XMLTransformerOASISEventMap_Impl::key_type aKey( nPrefix, rName );
112 XMLTransformerOASISEventMap_Impl::const_iterator aIter =
114 if( aIter != pMap2->end() )
115 return (*aIter).second;
118 XMLTransformerOASISEventMap_Impl::const_iterator aIter = rMap.find( aKey );
119 if( aIter == rMap.end() )
122 return (*aIter).second;
126 const OUString& rAttrValue,
127 OUString*
pName, OUString* pLocation )
129 Reference< css::uno::XComponentContext > xContext = ::comphelper::getProcessComponentContext();
131 Reference< css::uri::XUriReferenceFactory >
xFactory = css::uri::UriReferenceFactory::create(xContext);
133 Reference< css::uri::XVndSunStarScriptUrl > xUrl ( xFactory->parse( rAttrValue ), UNO_QUERY );
138 if ( xUrl.is() && xUrl->hasParameter( aLanguageKey ) )
140 OUString aLanguage = xUrl->getParameter( aLanguageKey );
142 if ( aLanguage.equalsIgnoreAsciiCase(
"basic") )
144 *pName = xUrl->getName();
151 if ( tmp.equalsIgnoreAsciiCase( doc ) )
167 const Reference< XAttributeList >& rAttrList )
169 SAL_INFO(
"xmloff.transform",
"XMLEventOASISTransformerContext::StartElement");
173 SAL_WARN_IF( pActions ==
nullptr,
"xmloff.transform",
"got no actions" );
175 Reference< XAttributeList > xAttrList( rAttrList );
177 sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->
getLength() : 0;
178 for( sal_Int16
i=0;
i < nAttrCount;
i++ )
180 const OUString& rAttrName = xAttrList->getNameByIndex(
i );
185 XMLTransformerActions::key_type aKey( nPrefix, aLocalName );
186 XMLTransformerActions::const_iterator aIter =
187 pActions->find( aKey );
188 if( aIter != pActions->end() )
190 if( !pMutableAttrList )
194 xAttrList = pMutableAttrList;
197 switch( (*aIter).second.m_nActionType )
201 OUString
aName, aLocation;
203 bool bNeedsTransform =
204 ParseURL( rAttrValue, &aName, &aLocation );
206 if ( bNeedsTransform )
241 bool bForm = pObjContext &&
251 OUString aAttrValue( rAttrValue );
252 sal_uInt16 nValPrefix =
253 static_cast<sal_uInt16
>((*aIter).second.m_nParam1);
255 aAttrValue, nValPrefix ) )
261 OUString
aName, aLocation;
262 bool bNeedsTransform =
263 ParseURL( rAttrValue, &aName, &aLocation );
265 if ( bNeedsTransform )
289 if( rAttrValue.getLength() > rApp.getLength()+1 &&
290 rAttrValue.copy(0,rApp.getLength()).
292 ':' == rAttrValue[rApp.getLength()] )
295 aAttrValue = rAttrValue.copy( rApp.getLength()+1 );
297 else if( rAttrValue.getLength() > rDoc.getLength()+1 &&
298 rAttrValue.copy(0,rDoc.getLength()).
300 ':' == rAttrValue[rDoc.getLength()] )
303 aAttrValue = rAttrValue.copy( rDoc.getLength()+1 );
305 if( !aAttrValue.isEmpty() )
308 if( !aLocation.isEmpty() )
313 pMutableAttrList->
AddAttribute( aAttrQName, aLocation );
318 pMutableAttrList->
AddAttribute( aAttrQName, aLocation );
326 SAL_WARN(
"xmloff.transform",
"unknown action" );
static XMLTransformerOASISEventMap_Impl * CreateFormEventMap()
static bool ParseURL(const OUString &rAttrValue, OUString *pName, OUString *pLocation)
XMLTransformerEventMapEntry const aFormTransformerEventMap[]
constexpr sal_uInt16 XML_NAMESPACE_SCRIPT
const char * m_pOASISName
virtual ~XMLEventOASISTransformerContext() override
sal_uInt16 GetKeyByAttrName(const OUString &rAttrName, OUString *pPrefix, OUString *pLocalName, OUString *pNamespace) const
sal_Int16 GetIndexByName(const OUString &rName) const
OSQLColumns::const_iterator find(const OSQLColumns::const_iterator &first, const OSQLColumns::const_iterator &last, std::u16string_view _rVal, const ::comphelper::UStringMixEqual &_rCase)
XMLEventOASISTransformerContext(XMLTransformerBase &rTransformer, const OUString &rQName)
constexpr sal_uInt16 XML_NAMESPACE_FORM
virtual sal_Int16 SAL_CALL getLength() override
constexpr OUStringLiteral aData
virtual void StartElement(const css::uno::Reference< css::xml::sax::XAttributeList > &xAttrList) override
void SetValueByIndex(sal_Int16 i, const OUString &rValue)
bool HasNamespace(sal_uInt16 nPrefix) const
void RemoveAttributeByIndex(sal_Int16 i)
void AddAttribute(const OUString &sName, const OUString &sValue)
XMLTransformerEventMapEntry const aTransformerEventMap[]
enumrange< T >::Iterator end(enumrange< T >)
virtual void StartElement(const css::uno::Reference< css::xml::sax::XAttributeList > &xAttrList) override
XMLTransformerBase & GetTransformer()
bool equalsIgnoreAsciiCase(std::u16string_view s1, std::u16string_view s2)
#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)
#define SAL_WARN(area, stream)
Reference< XSingleServiceFactory > xFactory
static void FlushEventMap(XMLTransformerOASISEventMap_Impl *p)
sal_uInt16 const m_nOASISPrefix
virtual OUString SAL_CALL getValueByIndex(sal_Int16 i) override
static XMLTransformerOASISEventMap_Impl * CreateEventMap()