XmlElement* XmlDocument::parseDocumentElement (String::CharPointerType textToParse, const bool onlyReadOuterDocumentElement) { input = textToParse; errorOccurred = false; outOfData = false; needToLoadDTD = true; if (textToParse.isEmpty()) { lastError = "not enough input"; } else if (! parseHeader()) { lastError = "malformed header"; } else if (! parseDTD()) { lastError = "malformed DTD"; } else { lastError.clear(); ScopedPointer<XmlElement> result (readNextElement (! onlyReadOuterDocumentElement)); if (! errorOccurred) return result.release(); } return nullptr; }
XPathValidator::XPathValidator(QObject *parent, bool variables, QSharedPointer<ac::CorpusReader> corpusReader) : QValidator(parent), d_variables(variables), d_corpusReader(corpusReader) { parseDTD(); }
XPathValidator::XPathValidator(QSharedPointer<DactMacrosModel> macrosModel, QObject *parent, bool variables, QSharedPointer<ac::CorpusReader> corpusReader) : QValidator(parent), d_variables(variables), d_macrosModel(macrosModel), d_corpusReader(corpusReader) { parseDTD(); }
void ZLXMLReaderInternal::setupEntities() { const std::vector<std::string> &dtds = myReader.externalDTDs(); for (std::vector<std::string>::const_iterator it = dtds.begin(); it != dtds.end(); ++it) { myDTDStreamLocks.insert(ZLFile(*it).inputStream()); parseDTD(myParser, *it); } std::map<std::string,std::string> entityMap; myReader.collectExternalEntities(entityMap); if (!entityMap.empty()) { parseExtraDTDEntities(myParser, entityMap); } }
void ZLXMLReaderInternal::init(const char *encoding) { if (myInitialized) { XML_ParserReset(myParser, encoding); } myInitialized = true; XML_UseForeignDTD(myParser, XML_TRUE); const std::vector<std::string> &dtds = myReader.externalDTDs(); for (std::vector<std::string>::const_iterator it = dtds.begin(); it != dtds.end(); ++it) { myDTDStreamLocks.insert(ZLFile(*it).inputStream()); parseDTD(myParser, *it); } XML_SetUserData(myParser, &myReader); if (encoding != 0) { XML_SetEncoding(myParser, encoding); } XML_SetStartElementHandler(myParser, fStartElementHandler); XML_SetEndElementHandler(myParser, fEndElementHandler); XML_SetCharacterDataHandler(myParser, fCharacterDataHandler); XML_SetUnknownEncodingHandler(myParser, fUnknownEncodingHandler, 0); }
bool DTD::parseDTD() { return parseDTD(m_dtdURL); }
bool DTD::parseDTD(const KURL &url) { QString fileName = QString::null; if (!KIO::NetAccess::download(url, fileName)) { KMessageBox::error(0, i18n("<qt>Cannot download the DTD from <b>%1</b>.</qt>").arg(url.prettyURL(0, KURL::StripFileProtocol))); return false; } QFile file(fileName); if (file.open(IO_ReadOnly)) { QTextStream fileStream(&file); fileStream.setEncoding(QTextStream::UnicodeUTF8); QString entireDTD = fileStream.read(); file.close(); removeComments(entireDTD); QString line; QStringList lines = QStringList::split("\n",entireDTD); QStringList::Iterator it = lines.begin(); while (it != lines.end()) { line = *it; if (line.startsWith("<")) { while (!line.endsWith(">") && it != lines.end()) { ++it; line += " \\end" + *it; } } else if (line.startsWith("%")) { while (!line.endsWith(";") && it != lines.end()) { ++it; line += *it; } } line = line.stripWhiteSpace(); line = line.simplifyWhiteSpace(); //kdDebug(24000) << "Parsed line is: " << line << endl; if ( line.startsWith("<!ENTITY") && line.endsWith(">")) { parseDTDEntity(line); } else if (line.startsWith("<!ELEMENT") && line.endsWith(">")) { parseDTDElement(line); } else if (line.startsWith("<!ATTLIST") && line.endsWith(">")) { parseDTDAttlist(line); } else if (line.startsWith("%") && line.endsWith(";")) { line.remove(0,1); line.truncate(line.length()-1); KURL entityURL = url; entityURL.setPath(url.directory()+ "/" + line + ".ent"); parseDTD(entityURL); } else { kdDebug(24000) << QString("Unknown tag: [%1]").arg(line) << endl; } if (it != lines.end()) ++it; } } }