void XMLDocumentParser::parseProcessingInstruction() { exitText(); // ### handle exceptions int exception = 0; RefPtr<ProcessingInstruction> pi = document()->createProcessingInstruction( m_stream.processingInstructionTarget(), m_stream.processingInstructionData(), exception); if (exception) return; pi->setCreatedByParser(true); m_currentNode->parserAddChild(pi.get()); if (m_view && !pi->attached()) pi->attach(); pi->finishParsingChildren(); if (pi->isCSS()) m_sawCSS = true; #if ENABLE(XSLT) m_sawXSLTransform = !m_sawFirstElement && pi->isXSL(); if (m_sawXSLTransform && !document()->transformSourceDocument()) stopParsing(); #endif }
void Window::finished() { _button->setText("Начать"); disconnect(_button, SIGNAL(clicked()), this, SLOT(stopParsing())); connect(_button, SIGNAL(clicked()), this, SLOT(startParsing())); }
void Window::startParsing() { if(_text->text().isEmpty()) return; _edit->setPlainText(""); _button->setText("Отменить"); disconnect(_button, SIGNAL(clicked()), this, SLOT(startParsing())); connect(_button, SIGNAL(clicked()), this, SLOT(stopParsing())); auto list = _text->text().split(" ", QString::SkipEmptyParts); for(int i = 0; i < _tasks.size(); i++) { _threads[i]->deleteLater(); _tasks[i]->deleteLater(); } _tasks.clear(); _threads.clear(); for(int i = 0; i < list.size(); i++) { int index = list[i].toInt(); log(index, "Начало"); _threads.append(new QThread()); _tasks.append(new Task(index, qMakePair(_to->date().month(), _to->date().year()), qMakePair(_from->date().month(), _from->date().year()))); connect(_threads.back(), SIGNAL(started()), _tasks.back(), SLOT(start())); connect(_tasks.back(), SIGNAL(finished()), _threads.back(), SLOT(quit())); connect(_tasks.back(), SIGNAL(finished()), this, SLOT(finished())); connect(_tasks.back(), SIGNAL(log(int,QString)), this, SLOT(log(int,QString))); _tasks.back()->moveToThread(_threads.back()); } for(int i = 0; i < list.size(); i++) { _threads[i]->start(); } }
void XMLTokenizer::handleError(ErrorType type, const char* m, int lineNumber, int columnNumber) { if (type == fatal || (m_errorCount < maxErrors && m_lastErrorLine != lineNumber && m_lastErrorColumn != columnNumber)) { switch (type) { case warning: m_errorMessages += String::format("warning on line %d at column %d: %s", lineNumber, columnNumber, m); break; case fatal: case nonFatal: m_errorMessages += String::format("error on line %d at column %d: %s", lineNumber, columnNumber, m); } m_lastErrorLine = lineNumber; m_lastErrorColumn = columnNumber; ++m_errorCount; } if (type != warning) m_sawError = true; if (type == fatal) stopParsing(); }
void XMLDocumentParser::parseStartElement() { if (!m_sawFirstElement && m_parsingFragment) { // skip dummy element for fragments m_sawFirstElement = true; return; } exitText(); String localName = m_stream.name(); String uri = m_stream.namespaceUri(); String prefix = prefixFromQName(m_stream.qualifiedName().toString()); if (m_parsingFragment && uri.isNull()) { Q_ASSERT(prefix.isNull()); uri = m_defaultNamespaceURI; } QualifiedName qName(prefix, localName, uri); RefPtr<Element> newElement = document()->createElement(qName, true); if (!newElement) { stopParsing(); return; } #if ENABLE(XHTMLMP) if (!m_sawFirstElement && isXHTMLMPDocument()) { // As per 7.1 section of OMA-WAP-XHTMLMP-V1_1-20061020-A.pdf, // we should make sure that the root element MUST be 'html' and // ensure the name of the default namespace on the root elment 'html' // MUST be 'http://www.w3.org/1999/xhtml' if (localName != HTMLNames::htmlTag.localName()) { handleError(fatal, "XHTMLMP document expects 'html' as root element.", lineNumber(), columnNumber()); return; } if (uri.isNull()) { m_defaultNamespaceURI = HTMLNames::xhtmlNamespaceURI; uri = m_defaultNamespaceURI; m_stream.addExtraNamespaceDeclaration(QXmlStreamNamespaceDeclaration(prefix, HTMLNames::xhtmlNamespaceURI)); } } #endif bool isFirstElement = !m_sawFirstElement; m_sawFirstElement = true; ExceptionCode ec = 0; handleElementNamespaces(newElement.get(), m_stream.namespaceDeclarations(), ec, m_scriptingPermission); if (ec) { stopParsing(); return; } handleElementAttributes(newElement.get(), m_stream.attributes(), ec, m_scriptingPermission); if (ec) { stopParsing(); return; } ScriptElement* scriptElement = toScriptElement(newElement.get()); if (scriptElement) m_scriptStartPosition = textPositionOneBased(); m_currentNode->deprecatedParserAddChild(newElement.get()); pushCurrentNode(newElement.get()); if (m_view && !newElement->attached()) newElement->attach(); #if ENABLE(OFFLINE_WEB_APPLICATIONS) if (newElement->hasTagName(HTMLNames::htmlTag)) static_cast<HTMLHtmlElement*>(newElement.get())->insertedByParser(); #endif if (isFirstElement && document()->frame()) document()->frame()->loader()->dispatchDocumentElementAvailable(); }
void XMLDocumentParser::parseStartElement() { if (!m_sawFirstElement && m_parsingFragment) { // skip dummy element for fragments m_sawFirstElement = true; return; } exitText(); String localName = m_stream.name(); String uri = m_stream.namespaceUri(); String prefix = prefixFromQName(m_stream.qualifiedName().toString()); if (m_parsingFragment && uri.isNull()) { Q_ASSERT(prefix.isNull()); uri = m_defaultNamespaceURI; } QualifiedName qName(prefix, localName, uri); RefPtr<Element> newElement = document()->createElement(qName, true); if (!newElement) { stopParsing(); return; } bool isFirstElement = !m_sawFirstElement; m_sawFirstElement = true; Vector<Attribute, 8> prefixedAttributes; ExceptionCode ec = 0; handleNamespaceAttributes(prefixedAttributes, m_stream.namespaceDeclarations(), ec); if (ec) { newElement->parserSetAttributes(prefixedAttributes, m_scriptingPermission); stopParsing(); return; } handleElementAttributes(prefixedAttributes, m_stream.attributes(), ec); newElement->parserSetAttributes(prefixedAttributes, m_scriptingPermission); if (ec) { stopParsing(); return; } ScriptElement* scriptElement = toScriptElement(newElement.get()); if (scriptElement) m_scriptStartPosition = textPosition(); m_currentNode->parserAppendChild(newElement.get()); pushCurrentNode(newElement.get()); if (m_view && !newElement->attached()) newElement->attach(); if (newElement->hasTagName(HTMLNames::htmlTag)) static_cast<HTMLHtmlElement*>(newElement.get())->insertedByParser(); if (isFirstElement && document()->frame()) document()->frame()->loader()->dispatchDocumentElementAvailable(); }