22#include <rtl/ustring.hxx>
23#include <rtl/ustrbuf.hxx>
126 nKey =
Add_( rPrefix, rName, nKey );
144 NameSpaceHash::const_iterator aIter =
aNameHash.find( rPrefix );
145 if( aIter ==
aNameHash.end() || (*aIter).second.sName != rName )
146 nKey =
Add_( rPrefix, rName, nKey );
155 NameSpaceHash::const_iterator aIter =
aNameHash.find(rPrefix);
156 return (aIter !=
aNameHash.end()) ? (*aIter).second.nKey : USHRT_MAX;
163 [&rName](
const NameSpaceHash::value_type& rEntry) { return rEntry.second.sName == rName; });
166 nKey = (*aIter).second.nKey;
189 const OUString &
prefix( (*aIter).second.sPrefix );
197 const OUString& rLocalName,
206 SAL_WARN(
"xmloff.core",
"unknown namespace, probable missing xmlns: declaration");
215 OUStringBuffer sQName;
217 if (!rLocalName.isEmpty())
219 sQName.append (
':' );
220 sQName.append ( rLocalName );
222 return sQName.makeStringAndClear();
231 QNameCache::const_iterator aQCacheIter;
237 return (*aQCacheIter).second;
244 const OUString &
prefix( (*aIter).second.sPrefix );
245 OUStringBuffer sQName(
prefix.getLength() + 1 + rLocalName.getLength());
249 sQName.append(
':' );
251 sQName.append ( rLocalName );
254 OUString sString(sQName.makeStringAndClear());
259 return sQName.makeStringAndClear();
273 const OUString& rAttrValue,
274 OUString *pLocalName)
const
286 OUString *pLocalName,
287 OUString *pNamespace,
292 NameSpaceHash::const_iterator it;
303 *pLocalName = rEntry.
sName;
308 *pNamespace = aMapIter !=
maKeyToNamespaceMap.end() ? (*aMapIter).second.sName : OUString();
313 OUString sEntryPrefix, sEntryName;
315 sal_Int32 nColonPos = rQName.indexOf(
':' );
316 if( -1 == nColonPos )
324 sEntryPrefix = rQName.copy( 0, nColonPos );
325 sEntryName = rQName.copy( nColonPos + 1 );
330 SAL_INFO(
"xmloff",
"invalid attribute name with multiple ':'");
336 *pPrefix = sEntryPrefix;
338 *pLocalName = sEntryName;
340 NameSpaceHash::const_iterator aIter =
aNameHash.find( sEntryPrefix );
344 nKey = (*aIter).second.nKey;
346 *pNamespace = (*aIter).second.sName;
348 else if ( sEntryPrefix ==
sXMLNS )
351 else if( nColonPos == -1 )
396 const OUString& rName, sal_uInt16 nKey )
404 Add_( rPrefix, rName, nKey );
427 NameSpaceHash::const_iterator aIter =
aNameHash.find(rPrefix);
428 return (aIter !=
aNameHash.end()) ? (*aIter).second.nKey : USHRT_MAX;
431 const OUString& rAttrName,
432 OUString *pLocalName)
const
439 OUString *pLocalName,
440 OUString *pNamespace )
const
462 bool bSuccess =
false;
463 const OUString& sURIPrefix =
GetXMLToken( XML_URI_W3_PREFIX );
464 if( rName.startsWith( sURIPrefix ) )
466 const OUString& sURISuffix =
GetXMLToken( XML_URI_XFORMS_SUFFIX );
467 sal_Int32 nCompareFrom = rName.getLength() - sURISuffix.getLength();
468 if( rName.subView( nCompareFrom ) == sURISuffix )
483 if(
IsXMLToken( rName, ::xmloff::token::XML_N_SVG ) )
485 rName =
GetXMLToken( ::xmloff::token::XML_N_SVG_COMPAT );
488 else if(
IsXMLToken( rName, ::xmloff::token::XML_N_FO ) )
490 rName =
GetXMLToken( ::xmloff::token::XML_N_FO_COMPAT );
493 else if(
IsXMLToken( rName, ::xmloff::token::XML_N_SMIL ) ||
494 IsXMLToken( rName, ::xmloff::token::XML_N_SMIL_OLD ) )
496 rName =
GetXMLToken( ::xmloff::token::XML_N_SMIL_COMPAT );
506 sal_Int32 nNameLen = rName.getLength();
508 const OUString& rOasisURN =
GetXMLToken( XML_URN_OASIS_NAMES_TC );
509 if( !rName.startsWith( rOasisURN ) )
513 sal_Int32
nPos = rOasisURN.getLength();
514 if(
nPos >= nNameLen || rName[
nPos] !=
':' )
518 sal_Int32 nTCIdStart =
nPos+1;
519 sal_Int32 nTCIdEnd = rName.indexOf(
':', nTCIdStart );
525 std::u16string_view sTmp( rName.subView(
nPos ) );
531 nPos += rXMLNS.getLength();
532 if(
nPos >= nNameLen || rName[
nPos] !=
':' )
536 nPos = rName.indexOf(
':',
nPos+1 );
541 sal_Int32 nVersionStart =
nPos+1;
542 if( nVersionStart+2 >= nNameLen ||
543 -1 != rName.indexOf(
':', nVersionStart ) )
547 if( rName[nVersionStart] !=
'1' || rName[nVersionStart+1] !=
'.' )
552 rName = rName.subView( 0, nTCIdStart ) +
554 rName.subView( nTCIdEnd, nVersionStart-nTCIdEnd ) +
OUString GetQNameByKey(sal_uInt16 nKey, const OUString &rLocalName, bool bCache=true) const
const OUString & GetNameByKey(sal_uInt16 nKey) const
sal_uInt16 GetFirstKey() const
void AddAtIndex(const OUString &rPrefix, const OUString &rName, sal_uInt16 nKey)
const OUString & GetPrefixByIndex(sal_uInt16 nIdx) const
SvXMLNamespaceMap & operator=(const SvXMLNamespaceMap &rCmp)
sal_uInt16 GetKeyByPrefix(const OUString &rPrefix) const
sal_uInt16 GetKeyByAttrName(const OUString &rAttrName, OUString *pPrefix, OUString *pLocalName, OUString *pNamespace) const
static bool NormalizeOasisURN(OUString &rName)
static bool NormalizeW3URI(OUString &rName)
OUString GetAttrNameByKey(sal_uInt16 nKey) const
KeyToNameSpaceMap maKeyToNamespaceMap
sal_uInt16 GetKeyByAttrValueQName(const OUString &rAttrName, OUString *pLocalName) const
sal_uInt16 AddIfKnown(const OUString &rPrefix, const OUString &rName)
sal_uInt16 GetNextKey(sal_uInt16 nOldKey) const
sal_uInt16 GetIndexByPrefix(const OUString &rPrefix) const
sal_uInt16 GetNextIndex(sal_uInt16 nOldIdx) const
bool operator==(const SvXMLNamespaceMap &rCmp) const
SAL_DLLPRIVATE sal_uInt16 Add_(const OUString &rPrefix, const OUString &rName, sal_uInt16 nKey)
sal_uInt16 GetFirstIndex() const
sal_uInt16 Add(const OUString &rPrefix, const OUString &rName, sal_uInt16 nKey=XML_NAMESPACE_UNKNOWN)
OUString GetAttrNameByIndex(sal_uInt16 nIdx) const
sal_uInt16 GetKeyByQName(const OUString &rQName, OUString *pPrefix, OUString *pLocalName, OUString *pNamespace, QNameMode eMode) const
const OUString & GetNameByIndex(sal_uInt16 nIdx) const
static bool NormalizeURI(OUString &rName)
static sal_uInt16 GetIndexByKey(sal_uInt16 nKey)
sal_uInt16 GetKeyByName(const OUString &rName) const
const OUString & GetPrefixByKey(sal_uInt16 nKey) const
#define SAL_WARN(area, stream)
#define SAL_INFO(area, stream)
constexpr OUStringLiteral first
const sal_uInt16 XML_NAMESPACE_UNKNOWN_FLAG
::std::pair< sal_uInt16, OUString > QNamePair
const sal_uInt16 XML_NAMESPACE_NONE
const sal_uInt16 XML_NAMESPACE_UNKNOWN
const sal_uInt16 XML_NAMESPACE_XMLNS
constexpr bool starts_with(std::basic_string_view< charT, traits > sv, std::basic_string_view< charT, traits > x) noexcept
Handling of tokens in XML:
bool IsXMLToken(std::u16string_view rString, enum XMLTokenEnum eToken)
compare eToken to the string
const OUString & GetXMLToken(enum XMLTokenEnum eToken)
return the OUString representation for eToken
constexpr sal_uInt16 XML_NAMESPACE_XML