QString QUsbHid::getSerialNumberString(bool* r) { return getIndexedString(device_desc.iSerialNumber,r); }
QString QUsbHid::getProductString(bool* r) { return getIndexedString(device_desc.iProduct,r); }
void QWbXmlReader::nextToken() { char ch; int fullTag; again: // Bail out if we already saw EOF previously. if ( d->sawEOF ) return; // Get the next character and check for EOF. if ( ! ( d->input->getChar(&ch) ) ) { d->tokenType = QWbXmlToken_EOF; d->sawEOF = true; return; } // Determine the kind of token that we have. switch (ch) { case WBXML_SWITCH_PAGE: { if ( d->tagMode ) d->tagPage = readByte() << 6; else d->attrPage = readByte() << 8; goto again; } // Not reached. case WBXML_END: { // End of current tag or attribute context. if ( d->tagMode ) { d->tokenType = QWbXmlToken_EndTag; } else if ( d->hasContent ) { d->tokenType = QWbXmlToken_EndAttrs; d->tagMode = true; } else { d->tokenType = QWbXmlToken_EndTag; d->tagMode = true; } } break; case WBXML_ENTITY: { // Unicode character entity. d->tokenType = QWbXmlToken_String; d->tokenValue = QString( QChar( (ushort)readInt() ) ); } break; case WBXML_STR_I: { // Inline string value. d->tokenType = QWbXmlToken_String; d->tokenValue = readString(); } break; case WBXML_EXT_I_0: case WBXML_EXT_I_1: case WBXML_EXT_I_2: { // Inline string extension token - not used at present. readString(); goto again; } // Not reached. case WBXML_PI: { // Processing instruction, which is followed by attributes. d->tokenType = QWbXmlToken_PI; d->tagMode = false; d->hasContent = false; } break; case WBXML_EXT_T_0: case WBXML_EXT_T_1: case WBXML_EXT_T_2: { // Integer-based extension token - not used at present. readInt(); goto again; } // Not reached. case WBXML_STR_T: { // Reference into the string table. d->tokenType = QWbXmlToken_String; d->tokenValue = getIndexedString( readInt() ); } break; case WBXML_EXT_0: case WBXML_EXT_1: case WBXML_EXT_2: { // Byte-based extension token - not used at present. goto again; } // Not reached. case WBXML_OPAQUE: { // Opaque binary data - read and resolve it. QByteArray opaque; int len = readInt(); while ( len > 0 && !(d->sawEOF) ) { if ( ! d->input->getChar(&ch) ) { d->sawEOF = true; } else { opaque.resize( opaque.size() + 1 ); opaque[opaque.size() - 1] = ch; } --len; } d->tokenType = QWbXmlToken_String; d->tokenValue = resolveOpaque( d->currentAttr, opaque ); } break; default: { if ( d->tagMode ) { // Handle tag names. if ( (ch & WBXML_TAG_MASK) == WBXML_LITERAL ) { d->tokenValue = getIndexedString( readInt() ); } else { fullTag = (ch & WBXML_TAG_MASK) | d->tagPage; if ( d->tags.contains( fullTag ) ) { d->tokenValue = d->tags[fullTag]; } else { d->tokenValue = "x-tag-" + QString::number( fullTag ); } } d->tokenType = QWbXmlToken_Tag; if ( ( ch & WBXML_HAS_ATTRS ) != 0 ) { d->tagMode = false; } if ( ( ch & WBXML_HAS_CONTENT ) != 0 ) { d->hasContent = true; } else { d->hasContent = false; } } else { // Handle attribute names. if ( ch == WBXML_LITERAL ) { d->tokenType = QWbXmlToken_AttrStart; d->tokenValue = getIndexedString( readInt() ); } else { fullTag = ( ch & 0xFF ) | d->attrPage; if ( d->attrs.contains( fullTag ) ) { d->tokenValue = d->attrs[fullTag]; } else { d->tokenValue = "x-attr-" + QString::number( fullTag ); } if ( ( ch & 0x80 ) == 0 ) d->tokenType = QWbXmlToken_AttrStart; else d->tokenType = QWbXmlToken_String; } } } break; } }
QString QUsbHid::getManufacturerString(bool* r) { return getIndexedString(device_desc.iManufacturer,r); }
/*! Parse the WBXML data from the specified "input" device. */ bool QWbXmlReader::parse( QIODevice& input ) { // The parse process is pointless if there is no content handler. if ( ! d->contentHandler ) return false; // Initialize the token parsing state. d->input = &input; d->tokenType = QWbXmlToken_Tag; d->tokenValue = QString(); d->tagPage = 0; d->attrPage = 0; d->tagMode = true; d->hasContent = false; d->codec = 0; d->sawEOF = false; // Start the document. if ( ! d->contentHandler->startDocument() ) return false; // Parse the header information. readByte(); // Skip the version number. int publicid = readInt(); int publicindex = -1; if ( publicid == 0 ) publicindex = readInt(); int charset = readInt(); if ( charset <= 0 ) charset = 106; // Default to UTF-8. d->codec = QTextCodec::codecForMib( charset ); if ( !(d->codec) ) d->codec = QTextCodec::codecForMib( 106 ); // Load the string table. int len = readInt(); if ( len > 0 ) { d->stringTable.resize( (uint)len ); if ( input.read( d->stringTable.data(), (uint)len ) != len ) { return false; } else if ( d->stringTable.data()[len - 1] != 0x00 ) { return false; } } // Notify the lexical handler of the document type's publicid. if ( d->lexicalHandler ) { QString id; if ( publicid == 0 ) id = getIndexedString( publicindex ); else if ( publicid >= 2 && publicid < (int)num_builtin_publicids ) id = builtin_publicids[publicid]; if ( !id.isEmpty() ) { if ( ! d->lexicalHandler->startDTD ( QString(), id, QString() ) ) { return false; } if ( ! d->lexicalHandler->endDTD() ) { return false; } } } // Parse the top-level document element body. nextToken(); parseElementBody(); // End the document. return d->contentHandler->endDocument(); }