22 #include <rtl/ustring.hxx>
23 #include <rtl/ustrbuf.hxx>
87 NameSpaceMap::const_iterator aIter =
aNameMap.find ( nKey );
95 pEntry->sName = rName;
97 pEntry->sPrefix = rPrefix;
117 nKey =
Add_( rPrefix, rName, nKey );
135 NameSpaceHash::const_iterator aIter =
aNameHash.find( rPrefix );
136 if( aIter ==
aNameHash.end() || (*aIter).second->sName != rName )
137 nKey =
Add_( rPrefix, rName, nKey );
146 NameSpaceHash::const_iterator aIter =
aNameHash.find(rPrefix);
154 [&rName](
const NameSpaceHash::value_type& rEntry) {
return rEntry.second->sName == rName; });
157 nKey = (*aIter).second->nKey;
164 NameSpaceMap::const_iterator aIter =
aNameMap.find (nKey);
165 return (aIter !=
aNameMap.end()) ? (*aIter).second->sPrefix :
sEmpty;
170 NameSpaceMap::const_iterator aIter =
aNameMap.find (nKey);
171 return (aIter !=
aNameMap.end()) ? (*aIter).second->sName :
sEmpty;
176 NameSpaceMap::const_iterator aIter =
aNameMap.find ( nKey );
180 const OUString & prefix( (*aIter).second->sPrefix );
181 if (prefix.isEmpty())
184 return sXMLNS +
":" + prefix;
188 const OUString& rLocalName,
197 SAL_WARN(
"xmloff.core",
"unknown namespace, probable missing xmlns: declaration");
206 OUStringBuffer sQName;
208 if (!rLocalName.isEmpty())
210 sQName.append (
':' );
211 sQName.append ( rLocalName );
213 return sQName.makeStringAndClear();
222 QNameCache::const_iterator aQCacheIter;
228 return (*aQCacheIter).second;
231 NameSpaceMap::const_iterator aIter =
aNameMap.find ( nKey );
235 const OUString & prefix( (*aIter).second->sPrefix );
236 OUStringBuffer sQName(prefix.getLength() + 1 + rLocalName.getLength());
237 if (!prefix.isEmpty())
239 sQName.append( prefix );
240 sQName.append(
':' );
242 sQName.append ( rLocalName );
245 OUString sString(sQName.makeStringAndClear());
250 return sQName.makeStringAndClear();
264 const OUString& rAttrValue,
265 OUString *pLocalName)
const
277 OUString *pLocalName,
278 OUString *pNamespace,
283 NameSpaceHash::const_iterator it;
294 *pLocalName = rEntry.
sName;
298 NameSpaceMap::const_iterator aMapIter =
aNameMap.find (nKey);
299 *pNamespace = aMapIter !=
aNameMap.end() ? (*aMapIter).second->sName : OUString();
304 OUString sEntryPrefix, sEntryName;
306 sal_Int32 nColonPos = rQName.indexOf(
':' );
307 if( -1 == nColonPos )
315 sEntryPrefix = rQName.copy( 0, nColonPos );
316 sEntryName = rQName.copy( nColonPos + 1 );
321 SAL_INFO(
"xmloff",
"invalid attribute name with multiple ':'");
327 *pPrefix = sEntryPrefix;
329 *pLocalName = sEntryName;
331 NameSpaceHash::const_iterator aIter =
aNameHash.find( sEntryPrefix );
335 nKey = (*aIter).second->nKey;
337 *pNamespace = (*aIter).second->sName;
339 else if ( sEntryPrefix ==
sXMLNS )
342 else if( nColonPos == -1 )
351 xEntry->sPrefix = std::move(sEntryPrefix);
352 xEntry->sName = std::move(sEntryName);
353 xEntry->nKey = std::move(nKey);
354 aNameCache.emplace(rQName, std::move(xEntry));
368 NameSpaceMap::const_iterator aIter =
aNameMap.find ( nLastKey );
386 NameSpaceMap::const_iterator aIter =
aNameMap.find ( nOldIdx );
391 const OUString& rName, sal_uInt16 nKey )
399 Add_( rPrefix, rName, nKey );
410 NameSpaceMap::const_iterator aIter =
aNameMap.find (nIdx);
411 return (aIter !=
aNameMap.end()) ? (*aIter).second->sPrefix :
sEmpty;
416 NameSpaceMap::const_iterator aIter =
aNameMap.find (nIdx);
417 return (aIter !=
aNameMap.end()) ? (*aIter).second->sName :
sEmpty;
422 NameSpaceHash::const_iterator aIter =
aNameHash.find(rPrefix);
426 const OUString& rAttrName,
427 OUString *pLocalName)
const
434 OUString *pLocalName,
435 OUString *pNamespace )
const
457 bool bSuccess =
false;
458 const OUString& sURIPrefix =
GetXMLToken( XML_URI_W3_PREFIX );
459 if( rName.startsWith( sURIPrefix ) )
461 const OUString& sURISuffix =
GetXMLToken( XML_URI_XFORMS_SUFFIX );
462 sal_Int32 nCompareFrom = rName.getLength() - sURISuffix.getLength();
463 if( rName.subView( nCompareFrom ) == sURISuffix )
501 sal_Int32 nNameLen = rName.getLength();
503 const OUString& rOasisURN =
GetXMLToken( XML_URN_OASIS_NAMES_TC );
504 if( !rName.startsWith( rOasisURN ) )
508 sal_Int32
nPos = rOasisURN.getLength();
509 if( nPos >= nNameLen || rName[nPos] !=
':' )
513 sal_Int32 nTCIdStart = nPos+1;
514 sal_Int32 nTCIdEnd = rName.indexOf(
':', nTCIdStart );
520 OUString sTmp( rName.copy( nPos ) );
522 if( !sTmp.startsWith( rXMLNS ) )
526 nPos += rXMLNS.getLength();
527 if( nPos >= nNameLen || rName[nPos] !=
':' )
531 nPos = rName.indexOf(
':', nPos+1 );
536 sal_Int32 nVersionStart = nPos+1;
537 if( nVersionStart+2 >= nNameLen ||
538 -1 != rName.indexOf(
':', nVersionStart ) )
542 if( rName[nVersionStart] !=
'1' || rName[nVersionStart+1] !=
'.' )
547 rName = rName.subView( 0, nTCIdStart ) +
549 rName.subView( nTCIdEnd, nVersionStart-nTCIdEnd ) +
sal_uInt16 GetKeyByPrefix(const OUString &rPrefix) const
SAL_DLLPRIVATE sal_uInt16 Add_(const OUString &rPrefix, const OUString &rName, sal_uInt16 nKey)
static sal_uInt16 GetIndexByKey(sal_uInt16 nKey)
sal_uInt16 GetFirstKey() const
OUString GetAttrNameByKey(sal_uInt16 nKey) const
bool IsXMLToken(std::u16string_view rString, enum XMLTokenEnum eToken)
compare eToken to the string
sal_uInt16 GetKeyByAttrName(const OUString &rAttrName, OUString *pPrefix, OUString *pLocalName, OUString *pNamespace) const
const sal_uInt16 XML_NAMESPACE_UNKNOWN
const sal_uInt16 XML_NAMESPACE_XMLNS
bool operator==(const SvXMLNamespaceMap &rCmp) const
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
sal_uInt16 GetKeyByAttrValueQName(const OUString &rAttrName, OUString *pLocalName) const
constexpr sal_uInt16 XML_NAMESPACE_XML
SvXMLNamespaceMap & operator=(const SvXMLNamespaceMap &rCmp)
sal_uInt16 GetIndexByPrefix(const OUString &rPrefix) const
static bool NormalizeURI(OUString &rName)
static bool NormalizeW3URI(OUString &rName)
const sal_uInt16 XML_NAMESPACE_UNKNOWN_FLAG
OUString GetAttrNameByIndex(sal_uInt16 nIdx) const
sal_uInt16 GetNextKey(sal_uInt16 nOldKey) const
const sal_uInt16 XML_NAMESPACE_NONE
OUString GetQNameByKey(sal_uInt16 nKey, const OUString &rLocalName, bool bCache=true) const
sal_uInt16 AddIfKnown(const OUString &rPrefix, const OUString &rName)
const OUString & GetNameByKey(sal_uInt16 nKey) const
static bool NormalizeOasisURN(OUString &rName)
const OUString & GetXMLToken(enum XMLTokenEnum eToken)
return the OUString representation for eToken
const o3tl::enumarray< SvxAdjust, unsigned short > aSvxToUnoAdjust USHRT_MAX
Handling of tokens in XML:
#define SAL_INFO(area, stream)
sal_uInt16 Add(const OUString &rPrefix, const OUString &rName, sal_uInt16 nKey=XML_NAMESPACE_UNKNOWN)
sal_uInt16 GetKeyByName(const OUString &rName) const
#define SAL_WARN(area, stream)
void AddAtIndex(const OUString &rPrefix, const OUString &rName, sal_uInt16 nKey)
const OUString & GetPrefixByIndex(sal_uInt16 nIdx) const
const OUString & GetNameByIndex(sal_uInt16 nIdx) const
::std::pair< sal_uInt16, OUString > QNamePair
const OUString & GetPrefixByKey(sal_uInt16 nKey) const
sal_uInt16 GetFirstIndex() const
sal_uInt16 GetKeyByQName(const OUString &rQName, OUString *pPrefix, OUString *pLocalName, OUString *pNamespace, QNameMode eMode) const
sal_uInt16 GetNextIndex(sal_uInt16 nOldIdx) const