Files
Slnkdwf/ATL90/source/SProxy/ContentParser.cpp
Jos Groot Lipman 0e37d774d2 Merge SLNKDWF64 branch
svn path=/Slnkdwf/trunk/; revision=23911
2015-01-21 12:09:31 +00:00

105 lines
2.0 KiB
C++

//
// ContentParser.cpp
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
#include "stdafx.h"
#include "ContentParser.h"
#include "Content.h"
#include "Attribute.h"
#include "ComplexTypeParser.h"
#include "Element.h"
#include "ComplexType.h"
// CContentParser parses the simpleContent tag and the complexContent tag
TAG_METHOD_IMPL(CContentParser, OnAnnotation)
{
TRACE_PARSE_ENTRY();
return SkipElement();
}
TAG_METHOD_IMPL(CContentParser, OnRestriction)
{
TRACE_PARSE_ENTRY();
CContent *pCurr = GetContent();
if (pCurr != NULL)
{
CComplexType * pElem = pCurr->AddType();
if (pElem != NULL)
{
pElem->SetElementType(XSD_RESTRICTION);
SetXSDElementInfo(pElem, pCurr, GetLocator());
CAutoPtr<CComplexTypeParser> p( new CComplexTypeParser(GetReader(), this, GetLevel(), pElem) );
if (p != NULL)
{
if (g_ParserList.AddHead(p) != NULL)
{
return p.Detach()->GetAttributes(pAttributes);
}
}
}
}
EmitErrorHr(E_OUTOFMEMORY);
return E_FAIL;
}
TAG_METHOD_IMPL(CContentParser, OnExtension)
{
TRACE_PARSE_ENTRY();
int nLine = 0;
int nCol = 0;
GetLocator()->getLineNumber(&nLine);
GetLocator()->getColumnNumber(&nCol);
CContent *pCurr = GetContent();
if (pCurr != NULL)
{
EmitFileError(IDS_SDL_BASE_EXTENSION,
(LPCWSTR) pCurr->GetParentDocument()->GetDocumentUri(),
nLine, nCol, 0);
}
return E_FAIL;
}
ATTR_METHOD_IMPL(CContentParser, OnMixed)
{
TRACE_PARSE_ENTRY();
CContent *pCurr = GetContent();
if (pCurr != NULL)
{
if (SUCCEEDED(pCurr->SetMixed(wszValue, cchValue)))
{
return S_OK;
}
EmitInvalidValue("mixed", wszValue);
}
EmitErrorHr(E_OUTOFMEMORY);
return E_FAIL;
}
ATTR_METHOD_IMPL(CContentParser, OnID)
{
TRACE_PARSE_ENTRY();
CContent *pCurr = GetContent();
if (pCurr != NULL)
{
return pCurr->SetID(wszValue, cchValue);
}
EmitErrorHr(E_OUTOFMEMORY);
return E_FAIL;
}