Ignore:
Timestamp:
Nov 18, 2013, 5:34:18 AM (6 years ago)
Author:
cameron
Message:

Changes to icxercesc files

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icXML/icXML-devel/src/icxercesc/internal/ValidationContextImpl.cpp

    r3153 r3564  
    2828#include <icxercesc/validators/DTD/DTDEntityDecl.hpp>
    2929#include <xercesc/validators/datatype/InvalidDatatypeValueException.hpp>
    30 #include <icxercesc/validators/schema/NamespaceScope.hpp>
    31 #include <icxercesc/internal/ElemStack.hpp>
    3230#include <icxercesc/internal/XMLScanner.hpp>
     31#include <icxmlc/XMLNamespaceResolver.hpp>
    3332
    3433XERCES_CPP_NAMESPACE_BEGIN
     
    3837// ---------------------------------------------------------------------------
    3938
     39ValidationContextImpl::ValidationContextImpl(MemoryManager* const manager)
     40: ValidationContext(manager)
     41, fIdRefList(new (fMemoryManager) RefHashTableOf<XMLRefInfo>(109, fMemoryManager))
     42, fEntityDeclPool(0)
     43, fToCheckIdRefList(true)
     44, fNamespaceResolver(0)
     45, fNamespaceContextId(0)
     46, fValidatingMemberType(0)
     47{
     48
     49}
     50
    4051ValidationContextImpl::~ValidationContextImpl()
    4152{
    42         if (fIdRefList)
    43                 delete fIdRefList;
    44 }
    45 
    46 ValidationContextImpl::ValidationContextImpl(MemoryManager* const manager)
    47 :ValidationContext(manager)
    48 ,fIdRefList(0)
    49 ,fEntityDeclPool(0)
    50 ,fToCheckIdRefList(true)
    51 ,fValidatingMemberType(0)
    52 ,fScanner(0)
    53 ,fNamespaceScope(0)
    54 {
    55         fIdRefList = new (fMemoryManager) RefHashTableOf<XMLRefInfo>(109, fMemoryManager);
     53    delete fIdRefList;
    5654}
    5755
     
    8987        if (idEntry)
    9088        {
    91                 if (idEntry->getDeclared())
     89        if (unlikely(idEntry->getDeclared()))
    9290                {
    93                         ThrowXMLwithMemMgr1(InvalidDatatypeValueException
    94                                         , XMLExcepts::VALUE_ID_Not_Unique
    95                                         , content
    96                                         , fMemoryManager);
     91                        ThrowXMLwithMemMgr1(InvalidDatatypeValueException, XMLExcepts::VALUE_ID_Not_Unique, content, fMemoryManager);
    9792                }
    9893        }
     
    184179/* QName
    185180 */
    186 bool ValidationContextImpl::isPrefixUnknown(XMLCh* prefix)
     181bool ValidationContextImpl::isPrefixUnknown(XMLCh * prefix)
    187182{
    188     DEBUG_GRAMMAR_MESSAGE("ValidationContextImpl::isPrefixUnknown("  << prefix << ")");
    189 
    190     bool unknown = false;
    191 
    192         if (XMLString::equals(prefix, XMLUni::fgXMLNSString))
    193         {
    194                 return true;
    195         }
    196         else if (!XMLString::equals(prefix, XMLUni::fgXMLString))
    197         {
    198         DEBUG_GRAMMAR_MESSAGE("fNamespaceScope=" << (fNamespaceScope != 0));
    199 
    200                 if (fNamespaceScope)
    201                 {
    202                         unknown = (fNamespaceScope->getNamespaceForPrefix(prefix) == fNamespaceScope->getEmptyNamespaceId());
    203                 }
    204                 else
    205                 {
    206                         unknown = !fScanner->isPrefixKnown(prefix);
    207                 }
    208         }
    209 
    210     DEBUG_GRAMMAR_MESSAGE("unknown="  << unknown);
    211 
    212     return unknown;
     183    // why is the xmlns namespace always unknown? look into the QNameDatatypeValidator specification.
     184    if (unlikely(XMLString::equals(prefix, XMLUni::fgXMLNSString)))
     185    {
     186        return true;
     187    }
     188    return !fNamespaceResolver->isPrefixVisible(prefix, *fNamespaceContextId);
    213189}
    214190
    215191const XMLCh* ValidationContextImpl::getURIForPrefix(XMLCh* prefix)
    216192{
    217         if (fNamespaceScope)
    218         {
    219                 unsigned int uriId = fNamespaceScope->getNamespaceForPrefix(prefix);
    220                 if (uriId != fNamespaceScope->getEmptyNamespaceId())
    221                 {
    222                         return fScanner->getURIText(uriId);
    223                 }
    224                 return XMLUni::fgZeroLenString;
    225         }
    226         else
    227         {
    228                 return fScanner->getURIForPrefix(prefix);
    229         }
    230 
     193    return fNamespaceResolver->getUriForPrefix(prefix, *fNamespaceContextId);
    231194}
    232195
Note: See TracChangeset for help on using the changeset viewer.