Ejemplo n.º 1
0
STDMETHODIMP ASDTDModel::parse(bool *pSuccess)
{
    if (pSuccess == NULL) return E_POINTER;

    if (m_textDoc == NULL)
    {
        TRACE("\nASDTDModel::parse - m_textDoc == NULL\n\n");
        return E_FAIL;
    }

    *pSuccess = VARIANT_FALSE;

    {
        for (int i = 0; i < m_elementDeclarations->m_items.GetSize(); i++)
        {
            m_elementDeclarations->m_items[i]->Release();
        }
        m_elementDeclarations->m_items.RemoveAll();
    }

    ASSERT(0);
#if 0
    CComObject<CDTDParser>* parser;
    CComObject<CDTDParser>::CreateInstance(&parser);
    if (parser)
    {
        parser->AddRef();

        //parser->m_url = url;

        m_textDoc->get_data(&parser->m_textData);
        parser->m_errorHandler = m_errorHandler;

        try
        {
            parser->Parse();

            *pSuccess = VARIANT_TRUE;
        }
        catch(WCHAR* msg)
        {
            WCHAR emsg[1024];
            swprintf(emsg, L"%s\noffset: %d\nline: %d", msg, parser->m_fpos, parser->m_line+1);
            TRACE(L"DTD Error parsing: %s\n", emsg);
            ::MessageBox(NULL, _bstr_t(emsg), "DTD", MB_OK);
        }

#if 0
        int i;

        for (i = 0; i < parser->m_elementList.GetSize(); i++)
        {
            CElement* pElement = parser->m_elementList[i];

            CComObject<CDTDElement>* pDTDElement;
            CComObject<CDTDElement>::CreateInstance(&pDTDElement);
            pDTDElement->AddRef();

            pDTDElement->m_name = pElement->m_name;
            pDTDElement->m_ns = pElement->m_ns;
            pDTDElement->m_contentType = pElement->m_contentType;
            pDTDElement->m_isPCDataOnly = pElement->m_isPCDataOnly;

            m_elementDeclarations->m_items.Add(pDTDElement);

            CAttlist* pAttlist = parser->GetAttlistByName(pElement->m_ns, pElement->m_name);
            if (pAttlist)
            {
                for (int i = 0; i < pAttlist->m_attributes.GetSize(); i++)
                {
                    CAttribute* pAtt = pAttlist->m_attributes[i];

                    CComObject<CDTDAttribute>* pDTDAttribute;
                    CComObject<CDTDAttribute>::CreateInstance(&pDTDAttribute);
                    pDTDAttribute->AddRef();

                    pDTDAttribute->m_name = pAtt->m_name;
                    for (int en = 0; en < pAtt->m_enums.GetSize(); en++)
                    {
                        pDTDAttribute->m_enums.Add(pAtt->m_enums[en]);
                    }

                    pDTDElement->m_attributeDecls->m_items.Add(pDTDAttribute);
                }
            }
        }

        for (i = 0; i < parser->m_elementList.GetSize(); i++)
        {
            CElement* pElement = parser->m_elementList[i];

            CComObject<CDTDElement>* pDTDElement = (CComObject<CDTDElement>*)m_elementDeclarations->m_items[i];

            if (pElement->m_pCPChoiceSeq)
            {
                pDTDElement->m_asCM = BuildCM(pElement->m_pCPChoiceSeq);
                ASSERT(pDTDElement->m_asCM != NULL);
            }
        }
#endif

        parser->Release();
    }
#endif

    return S_OK;
}