From: Bj?rn H?h. <hoe...@us...> - 2004-04-17 22:38:25
|
Update of /cvsroot/ieqabar/ieqabar/src/library In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31808/library Modified Files: IEDocument.cxx IEDocument.hxx IEQA.cxx OpenSP.cxx OpenSP.hxx Log Message: improved structure for library interfaces Index: IEDocument.cxx =================================================================== RCS file: /cvsroot/ieqabar/ieqabar/src/library/IEDocument.cxx,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- IEDocument.cxx 20 Mar 2004 00:28:36 -0000 1.1 +++ IEDocument.cxx 17 Apr 2004 22:38:04 -0000 1.2 @@ -15,6 +15,8 @@ m_Location = location; m_SourceCode = NULL; m_SourceCodeLen = 0; + + m_isXHTML = (XmlDecl() || XHTMLNamespace()); } IEDocument::~IEDocument() @@ -26,6 +28,10 @@ m_pDispatch.Release(); } +BOOL IEDocument::IsXHTML() +{ + return m_isXHTML; +} BSTR IEDocument::DocumentCharset() { Index: IEQA.cxx =================================================================== RCS file: /cvsroot/ieqabar/ieqabar/src/library/IEQA.cxx,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- IEQA.cxx 25 Mar 2004 13:51:37 -0000 1.2 +++ IEQA.cxx 17 Apr 2004 22:38:04 -0000 1.3 @@ -18,88 +18,150 @@ m_htmlCatalog = htmlCat; m_xmlCatalog = xmlCat; + + m_htmlVersion = NULL; + + m_orep = NULL; + m_trep = NULL; + + // todo: check whether new succeeded? + m_osp = new OpenSPReporter(m_htmlCatalog, m_xmlCatalog); + + // todo: check whether new succeeded? + m_tidy = new TidyReporter(); + + m_doc = NULL; + m_when = 0; } IEQA::~IEQA() { + if (m_osp) + delete m_osp; + + if (m_tidy) + delete m_tidy; + + if (m_trep) + delete m_trep; + + if (m_orep) + delete m_orep; } -BOOL IEQA::processDocument(LPWSTR location, IDispatch *pDispatch, FILE* file, LPCSTR stylesheet) +LPWSTR IEQA::htmlVersion() { - assert( location != NULL ); - assert( pDispatch != NULL ); - // todo: check file? + return m_htmlVersion; +} - BOOL success = FALSE; - LARGE_INTEGER liFreq, liBefore, liAfter; +BOOL IEQA::hasErrors() +{ + if (!m_orep) + return FALSE; - QueryPerformanceFrequency(&liFreq); - QueryPerformanceCounter(&liBefore); + for (INT i = 0; i < m_orep->m_messages.GetSize(); ++i) + if (m_orep->m_messages[i]->m_severity > 1) + return TRUE; + return FALSE; +} + +BOOL IEQA::writeXML(FILE* file, LPCSTR stylesheet) +{ + BOOL success; + + // todo: check file? + + // todo: check if new succeeded? XmlWriter* w = new XmlWriter(file); if (stylesheet) w->XmlStyleSheet(stylesheet); w->StartElement("Document"); - w->AddAttribute("when", (UINT)time(NULL)); + w->AddAttribute("when", m_when); - IEDocument doc(location, pDispatch); - BSTR bstrDoctype = doc.DocTypeDecl(); + LinesList lines; + m_trep->LinesToList(&lines); + m_orep->LinesToList(&lines); + + m_doc->ToXmlWriter(w, &lines, 1, 1); + m_tidy->doctypeToXmlWriter(w); + + m_orep->ToXmlWriter(w); + m_trep->ToXmlWriter(w); + + w->EndElement(); /* Document */ + w->EndDocument(); + + if (w->Success()) + success = TRUE; + + delete w; + + return success; +} + +BOOL IEQA::processDocument(LPWSTR location, IDispatch *pDispatch) +{ + assert( location != NULL ); + assert( pDispatch != NULL ); + + // memorize when document was processed + m_when = (UINT)time(NULL); + + if (m_doc) + delete m_doc; + + if (m_trep) + delete m_trep; + + if (m_orep) + delete m_orep; + + // todo: check if new succeeded? + m_trep = new TidyReport(); + + // todo: check if new succeeded? + m_orep = new OpenSPReport(); + + // todo: check if new succeeded? + m_doc = new IEDocument(location, pDispatch); + + BSTR bstrDoctype = m_doc->DocTypeDecl(); UINT nSourceCodeLen = 0; - LPCSTR sourceCode = doc.SourceCode(&nSourceCodeLen); + LPCSTR sourceCode = m_doc->SourceCode(&nSourceCodeLen); DocumentType* doctype = NULL; // try to recognize the document type declaration doctype = LookupDoctypeFromDecl(bstrDoctype); - if (!doctype && (doc.XmlDecl() || doc.XHTMLNamespace())) + if (!doctype && m_doc->IsXHTML()) { // fall back to XHTML 1.0 Transitional doctype = LookupDoctypeFromVers(X10T); + m_htmlVersion = L"XHTML"; } else if (!doctype) { // fall back to HTML 4.01 Transitional doctype = LookupDoctypeFromVers(H41T); + m_htmlVersion = L"HTML"; + } + else + { + m_htmlVersion = doctype->name; } assert( doctype != NULL ); - TidyReporter tidy; - OpenSPReporter openSP(m_htmlCatalog, m_xmlCatalog); - - TidyReport tidyReport; - OpenSPReport openSPreport; UINT offset = 0; UINT length = 0; // ... - tidy.parseForDoctype(sourceCode, &offset, &length); - tidy.processDocument(sourceCode, &tidyReport); - openSP.processDocument(sourceCode, nSourceCodeLen, offset, length, doctype, &openSPreport); - - LinesList lines; - tidyReport.LinesToList(&lines); - openSPreport.LinesToList(&lines); - - doc.ToXmlWriter(w, &lines, 1, 1); - tidy.doctypeToXmlWriter(w); - - openSPreport.ToXmlWriter(w); - tidyReport.ToXmlWriter(w); - - QueryPerformanceCounter(&liAfter); - w->Element("took", GetDuration(liBefore, liAfter, liFreq)); - - w->EndElement(); /* Document */ - w->EndDocument(); - - if (w->Success()) - success = TRUE; - - delete w; - - return success; + m_tidy->parseForDoctype(sourceCode, &offset, &length); + m_tidy->processDocument(sourceCode, m_trep); + m_osp->processDocument(sourceCode, nSourceCodeLen, offset, length, doctype, m_orep); -} \ No newline at end of file + return TRUE; +} Index: OpenSP.hxx =================================================================== RCS file: /cvsroot/ieqabar/ieqabar/src/library/OpenSP.hxx,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- OpenSP.hxx 20 Mar 2004 00:28:36 -0000 1.1 +++ OpenSP.hxx 17 Apr 2004 22:38:04 -0000 1.2 @@ -38,7 +38,6 @@ OpenSPReport* processDocument(LPCSTR oldDoc, UINT oldDocSize, UINT offset, UINT oldDeclSize, DocumentType* newDecl, OpenSPReport* r); private: - ParserEventGeneratorKit m_kit; OpenSPReport* m_report; LPCSTR m_tempFileName; Index: OpenSP.cxx =================================================================== RCS file: /cvsroot/ieqabar/ieqabar/src/library/OpenSP.cxx,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- OpenSP.cxx 25 Mar 2004 13:44:41 -0000 1.4 +++ OpenSP.cxx 17 Apr 2004 22:38:04 -0000 1.5 @@ -51,6 +51,7 @@ ) { CAtlTemporaryFile tempFile; + ParserEventGeneratorKit pegKit; LPSTR newDoc; LPSTR newDecl; UINT newDocSize; @@ -94,10 +95,10 @@ // additional warnings for uncommon SGML constructs if (m_minTag) - m_kit.setOption(ParserEventGeneratorKit::enableWarning, "min-tag"); + pegKit.setOption(ParserEventGeneratorKit::enableWarning, "min-tag"); // register the proper catalog - m_kit.setOption(ParserEventGeneratorKit::addCatalog, m_htmlCatalog); + pegKit.setOption(ParserEventGeneratorKit::addCatalog, m_htmlCatalog); } else /* IsXHTML */ { @@ -125,10 +126,10 @@ newDeclSize = sprintf(newDecl, format, (LPCSTR)publid, (LPCSTR)systid); // XML specific warnings (todo: that should be errors?) - m_kit.setOption(ParserEventGeneratorKit::enableWarning, "xml"); + pegKit.setOption(ParserEventGeneratorKit::enableWarning, "xml"); // register the proper catalog - m_kit.setOption(ParserEventGeneratorKit::addCatalog, m_xmlCatalog); + pegKit.setOption(ParserEventGeneratorKit::addCatalog, m_xmlCatalog); } // determine size of new document string @@ -184,7 +185,7 @@ m_report = r; // create a new event generator - EventGenerator *egp = m_kit.makeEventGenerator(1, (char*const*)&m_tempFileName); + EventGenerator *egp = pegKit.makeEventGenerator(1, (char*const*)&m_tempFileName); // do not output messages to stdout egp->inhibitMessages(true); Index: IEDocument.hxx =================================================================== RCS file: /cvsroot/ieqabar/ieqabar/src/library/IEDocument.hxx,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- IEDocument.hxx 20 Mar 2004 00:28:36 -0000 1.1 +++ IEDocument.hxx 17 Apr 2004 22:38:04 -0000 1.2 @@ -23,12 +23,14 @@ BSTR DocumentCharset(); BOOL XmlDecl(); BOOL ToXmlWriter(XmlWriter* w, LinesList *lines, UINT nLinesBefore, UINT nLinesAfter); + BOOL IsXHTML(); private: CComPtr<IDispatch> m_pDispatch; LPCSTR m_SourceCode; LPCWSTR m_Location; UINT m_SourceCodeLen; + BOOL m_isXHTML; }; #endif /* __IEDOCUMENT_HXX__ */ |