示例#1
0
FormattedMessage FormattedMessage::parse(const QTextDocument *document)
{
	FormattedMessage result;

	QString text;

	QTextBlock block = document->firstBlock();
	bool firstParagraph = true;
	while (block.isValid())
	{
		bool firstFragment = true;
		for (QTextBlock::iterator it = block.begin(); !it.atEnd(); ++it)
		{
			QTextFragment fragment = it.fragment();
			if (!fragment.isValid())
				continue;

			if (!firstParagraph && firstFragment)
				text = '\n' + fragment.text();
			else
				text = fragment.text();

			QTextCharFormat format = fragment.charFormat();
			parseImages(result, text,
				format.font().bold(),
				format.font().italic(),
				format.font().underline(),
				format.foreground().color());

			firstFragment = false;
		}

		if (firstFragment)
			parseImages(result, "\n", false, false, false, QColor());

		block = block.next();
		firstParagraph = false;
	}

	return result;
}
示例#2
0
DescriptionScene LevelModel::parseDescription (QXmlStreamReader *aXmlStreamReader)
{
    assert(aXmlStreamReader);
    //CrashLogger logger("LevelManager::parseDescription");
    DescriptionScene result;
    while (!aXmlStreamReader->atEnd() &&
           !(aXmlStreamReader->isEndElement() && aXmlStreamReader->name() == "description")) {
        aXmlStreamReader->readNext();
        if (aXmlStreamReader->isStartElement()) {
            if (aXmlStreamReader->name() == "content") {
                result._description = aXmlStreamReader->readElementText();
                qDebug() << "LevelManager::parseDescription " << result._description.size();
            } else if (aXmlStreamReader->name() == "images") {
                result._images = parseImages(aXmlStreamReader);
            }
        }
    }
    return result;
}
示例#3
0
void Cinefacts::imagesFinished()
{
    QNetworkReply *reply = static_cast<QNetworkReply*>(QObject::sender());
    Movie *movie = reply->property("storage").value<Storage*>()->movie();
    QList<int> infos = reply->property("infosToLoad").value<Storage*>()->infosToLoad();
    reply->deleteLater();
    if (!movie)
        return;

    if (reply->error() == QNetworkReply::NoError) {
        QString msg = QString::fromUtf8(reply->readAll());
        QStringList posters;
        QStringList backdrops;
        parseImages(msg, posters, backdrops);
        if (posters.count() > 0 && infos.contains(MovieScraperInfos::Poster)) {
            reply = qnam()->get(QNetworkRequest(QUrl(QString("http://www.cinefacts.de%1").arg(posters.takeFirst()))));
            reply->setProperty("storage", Storage::toVariant(reply, movie));
            reply->setProperty("posters", posters);
            reply->setProperty("backdrops", backdrops);
            reply->setProperty("infosToLoad", Storage::toVariant(reply, infos));
            connect(reply, SIGNAL(finished()), this, SLOT(posterFinished()));
            return;
        }

        if (posters.count() > 0 && infos.contains(MovieScraperInfos::Backdrop)) {
            reply = qnam()->get(QNetworkRequest(QUrl(QString("http://www.cinefacts.de%1").arg(backdrops.takeFirst()))));
            reply->setProperty("storage", Storage::toVariant(reply, movie));
            reply->setProperty("backdrops", backdrops);
            reply->setProperty("infosToLoad", Storage::toVariant(reply, infos));
            connect(reply, SIGNAL(finished()), this, SLOT(backdropFinished()));
            return;
        }
    } else {
        qWarning() << "Network Error" << reply->errorString();
    }
    movie->controller()->scraperLoadDone(this);
}
示例#4
0
// the above mentioned overloaded method -- file syntax is derived
// from MIL-STD-2500B release 2
TSMWarning *parseFile(NITF_2_1_ISD *isd) throw (TSMError)
{
  TSMError err;
  TSMWarning *warn = new TSMWarning(TSMWarning::UNKNOWN_WARNING, "", "");
  char parseBuff [13];

  if (!buff) // fillBuff() failed or somebody called me before calling fillBuff() -- should never get here
  {
    err.setTSMError (TSMError::INVALID_USE,
		     "No ISD data buffer: fillBuff failed",
		     "parseFile");
    throw (err);
  }
    
  char pbuff[4096];	// parser buffer
  int fl,		// file length
	  hl;       // file header length.  Required to locate
				// beginning of first image data.

  // locations and field lengths of the FL, HL, and NUMI fields are
  // all at fixed offsets in the 2.1 header.  These values are taken
  // from MIL-STD-2500B Notice 2
  const int FLOFFSET = 342;
  const int FLLEN = 12;
  const int HLOFFSET = 354;
  const int HLLEN = 6;
  const int NUMIOFFSET = 360;
  const int NUMILEN = 3;

  memcpy (parseBuff, &buff[FLOFFSET], FLLEN);
  parseBuff[FLLEN] = '\0';
  fl = atoi (parseBuff);
  if (statbuf.st_size != fl)
    warn->setTSMWarning( TSMWarning::UNKNOWN_WARNING, 
			"File length field does not match actual file length", 
			"parseFile(nitf2.1)");

  memcpy (pbuff, &buff[HLOFFSET], 6); pbuff[6] = '\0';
  hl = atoi(pbuff);
  if (statbuf.st_size < hl)
  {
    // choke
     err.setTSMError(TSMError::DATA_NOT_AVAILABLE, 
		     "ISD file smaller than indicated header length",
		     "parseFile(nitf2.1)");
     throw err;
  }

  memcpy (parseBuff, &buff[HLOFFSET],HLLEN );
  parseBuff[HLLEN] = '\0';
  hl = atoi (parseBuff);
   // Copy the file header  
  isd->fileHeader.assign (buff, hl);

  unsigned int des_offset = hl;  // This value will be used to locate
				 // the DES data in the 2.1 file
//////////////////////////////////////////////////////////////////
////////  This section goes through the 2.1 file header      /////
////////  accumulating size information for the various      /////
////////  segments of the file.  Althought at the present    /////
////////  time only image info, DES info and User Defined    /////
////////  Header data (tre) are required for the class, all  /////
////////  of the section length info is retained for         /////
////////  possible future use.                               /////
//////////////////////////////////////////////////////////////////
  int seg_index;
  int seg_offset = NUMIOFFSET;
  ////////////////////////////////////////////////
  // process 2.1 image segments length info  /////
  ////////////////////////////////////////////////

  memcpy (parseBuff, &buff[seg_offset],NUMILEN );
  parseBuff[NUMILEN] = '\0';
  int NUMI = atoi (parseBuff);
  // std::cout << "**** NUMI = " << NUMI << '\n'; 
  isd->numImages = NUMI;
  std::vector <int> imagehdrlengths (NUMI);
  std::vector <int> imagelengths (NUMI);

  seg_offset = seg_offset + 3;
  for (seg_index = 0; seg_index < isd->numImages; seg_index++)
  {
    memcpy (parseBuff, &buff[seg_offset], 6); parseBuff[6] = '\0';
    imagehdrlengths.at(seg_index) = atoi (parseBuff);
    des_offset += imagehdrlengths.at(seg_index);
    seg_offset += 6;
    memcpy (parseBuff, &buff[seg_offset], 10); parseBuff[10] = '\0';
    imagelengths[seg_index] = atoi (parseBuff);
    des_offset += imagelengths[seg_index];
    seg_offset += 10;
  }

  // Because the number of entries in each of the 2.1 header/data
  // segment length fields varies as the number of segments there are
  // no fixed offsets.
  //////////////////////////////////////////////////
  //// process 2.1 Graphic segments length info ////
  //////////////////////////////////////////////////
  memcpy (parseBuff, &buff[seg_offset], 3);  parseBuff[3] = '\0';
  int NUMS = atoi (parseBuff);
  // std::cout << "**** NUMS = " << NUMS << '\n'; 
  seg_offset += 3;
  if (NUMS > 0)
  {
     std::vector <int> numShdrlengths (NUMS);
     std::vector <int> numSlengths (NUMS);
     for (seg_index = 0; seg_index < NUMS; seg_index++)
     {
		memcpy (parseBuff, &buff[seg_offset], 4);  parseBuff[4] = '\0';
		numShdrlengths.at (seg_index) = atoi (parseBuff);
		des_offset += numShdrlengths.at (seg_index);
		seg_offset += 4;
		memcpy (parseBuff, &buff[seg_offset], 3);  parseBuff[3] = '\0';
		numSlengths.at (seg_index) = atoi (parseBuff);
		seg_offset += 6;
     }
  }
  // There is a 3 space field called NUMX whixh is not currently used
  // by the 2500B standard
  seg_offset += 3;

   ////////////////////////////////////////////////////////////
  //// process 2.1 Text Segments length info               ////
  /////////////////////////////////////////////////////////////
  memcpy (parseBuff, &buff[seg_offset], 3);  parseBuff[3] = '\0';
  int NUMT = atoi (parseBuff);
  // std::cout << "**** NUMT = " << NUMT << '\n'; 
  seg_offset += 3;
  if (NUMT > 0)
  {
     std::vector <int> numThdrlengths (NUMT);
     std::vector <int> numTlengths (NUMT);
     for (int t_index = 0; t_index < NUMT; t_index++)
     {
		memcpy (parseBuff, &buff[seg_offset], 4);  parseBuff[4] = '\0';
		numThdrlengths [t_index] = atoi (parseBuff);
		des_offset += numThdrlengths [t_index];
		seg_offset += 4;
		memcpy (parseBuff, &buff[seg_offset], 5);  parseBuff[5] = '\0';
		numTlengths [t_index] = atoi (parseBuff);
		des_offset += numTlengths [t_index];
		seg_offset += 5;
     }
  }

  ////////////////////////////////////////////////////////////
  //// process 2.1 Data Extension Segments length info    ////
  ////////////////////////////////////////////////////////////

  memcpy (parseBuff, &buff[seg_offset], 3);  parseBuff[3] = '\0';
  int NUMD = atoi (parseBuff);
  // std::cout << "**** NUMD = " << NUMD << '\n'; 
  isd->numDESs = NUMD;
  seg_offset += 3;
  std::vector <int> Dhdrlengths (NUMD);
  std::vector <int> Dlengths (NUMD);
  if (NUMD > 0)
  {
     for (seg_index = 0; seg_index < NUMD; seg_index++)
     {
		memcpy (parseBuff, &buff[seg_offset], 4);  parseBuff[4] = '\0';
		Dhdrlengths [seg_index] = atoi (parseBuff);
		seg_offset += 4;
		memcpy (parseBuff, &buff[seg_offset], 9);  parseBuff[9] = '\0';
		Dlengths [seg_index] = atoi (parseBuff);
		seg_offset += 9;
     }
  }

  ////////////////////////////////////////////////////////////////
  //// process 2.1 Reserved Extension Segments length info    ////
  ////////////////////////////////////////////////////////////////
  memcpy (parseBuff, &buff[seg_offset], 3);  parseBuff[3] = '\0';
  int numR = atoi (parseBuff);
  seg_offset += 3;
  std::vector <int> numRhdrlengths (numR);
  std::vector <int> numRlengths (numR);
  for (seg_index = 0; seg_index < numR; seg_index++)
  {
    memcpy (parseBuff, &buff[seg_offset], 4);  parseBuff[4] = '\0';
    numRhdrlengths [seg_index] = atoi (parseBuff);
    seg_offset += 4;
    memcpy (parseBuff, &buff[seg_offset], 7);  parseBuff[7] = '\0';
    numRlengths [seg_index] = atoi (parseBuff);
    seg_offset += 7;
  }

  ////////////////////////////////////////////////////////////
  //// process  2.1 UDHD/XHD (file tre) info              ////
  ////////////////////////////////////////////////////////////
  // this 5 byte adjustment is also different from the book to the data
  seg_offset += 5;
  // std::cout << "<<<<< seg_offset " << seg_offset << '\n';
  memcpy (parseBuff, &buff[seg_offset], 5);  parseBuff[5] = '\0';
  int lenUDHD = atoi (parseBuff);
  seg_offset += 5;
  seg_offset += 3; // added to get past currently unused UDHOFL field
  // store file header UD tre's in string
  std::string UDHD;
  if ((lenUDHD - 3) > 0)
    UDHD.assign (&buff[seg_offset], lenUDHD - 3);

  seg_offset += lenUDHD - 3 ;
  memcpy (parseBuff, &buff[seg_offset], 5);  parseBuff[5] = '\0';
  int XHDL = atoi (parseBuff);
  seg_offset += 5;

  // store file header X UD tre's in string
  std::string XHD;
  if (XHDL > 0)
    XHD.assign (&buff[seg_offset], XHDL);
  std::string HD;
  if ((XHDL + lenUDHD - 3) > 0)
    HD.assign (UDHD + XHD);
  
  int udidl = XHDL + lenUDHD - 3;
  // if any file tre data parse it
  if (udidl > 0)
    parseTRE (udidl, HD, &isd->numTREs, &(isd->fileTREs));
  if (NUMI > 0)
     parseImages(isd, hl, imagehdrlengths, imagelengths);
  if (NUMD > 0)
     parseDES(isd, des_offset, Dhdrlengths, Dlengths);

  return warn;
};
示例#5
0
///////////////////////////////////////////////////////////////////////////
// This method parses the data in the file header to derive sizes and
// numbers of each of the file component segments.  It also processes
// any file tre's.   This function is derived from information in
// MIL-STD-2500A, release 3
//
// this function will have to be overloaded for NITF21 isd's
//////////////////////////////////////////////////////////////////////////
TSMWarning *parseFile (NITF_2_0_ISD *isd) throw (TSMError)
{
  TSMError err;
  TSMWarning *warning = new TSMWarning (TSMWarning::UNKNOWN_WARNING, "", "");
  if (!buff) // fillBuff failed -- should never get here
  {
    err.setTSMError (TSMError::INVALID_USE,
		     "No ISD data buffer: fillBuff failed",
		     "parseFile");
    throw (err);
  }
    
  char pbuff[4096];	// parser buffer
  int fl,		// file length
    hl;		        // file header length
  int crypt_offset;
  int class_offset = 119; // location of classification indicator in
			  // file header

  // check for conditional fields
  // if file is classified at any level the class info is 40 bytes longer
  if (buff[class_offset] == 'U')
    crypt_offset = 296;
  else
    crypt_offset = 336;
  // location of file length field in 2.0 file 
  int fl_offset = crypt_offset + 46;
  memcpy (pbuff, &buff[fl_offset], 12); pbuff[12] = '\0';
  fl = atoi(pbuff);
  if (statbuf.st_size != fl)
    warning->setTSMWarning( TSMWarning::UNKNOWN_WARNING, 
			"File length field does not match actual file length", 
			"parseFile(nitf2.0)");
  // get 2.0 file header length 
  int hl_offset = fl_offset + 12;
  memcpy (pbuff, &buff[hl_offset], 6); pbuff[6] = '\0';
  hl = atoi(pbuff);
  if (statbuf.st_size < hl)
  {
    // choke
     err.setTSMError(TSMError::DATA_NOT_AVAILABLE, 
		     "ISD file smaller than indicated header length",
		     "parseFile(nitf2.0)");
     throw err;
  }
  // Copy the file header  
  isd->fileHeader.assign (buff, hl);

////////////////////////////////////////////////////////////////
//////  This section goes through the file 2.0 header      /////
//////  accumulating size information for the various      /////
//////  segments of the file.  Althought at the present    /////
//////  time only image info, DES info and User Defined    /////
//////  Header data (tre) are required for the class, all  /////
//////  of the section length info is retained for         /////
//////  possible future use.                               /////
////////////////////////////////////////////////////////////////
  int seg_index;
  unsigned int des_offset = hl; // This value will be used to point to
				// the location in the 2.0 file of the
				// DES data
  ////////////////////////////////////////////
  // process image segments length info  /////
  ////////////////////////////////////////////

  int numi_offset = hl_offset + 6;
  memcpy (pbuff, &buff[numi_offset], 3); pbuff[3] = '\0';
  int NUMI =  atoi (pbuff);
  isd->numImages = NUMI;
  // std::cout << "num images = " << isd->numImages << '\n';
  int seg_offset = numi_offset + 3;
  
  if (NUMI > 0)
  {
     std::vector <int> imagehdrlengths (NUMI);
     std::vector <int> imagelengths (NUMI);
     for (seg_index = 0; seg_index < isd->numImages; seg_index++)
     {
		memcpy (pbuff, &buff[seg_offset], 6); pbuff[6] = '\0';
		imagehdrlengths.at(seg_index) = atoi (pbuff);
		des_offset += imagehdrlengths.at(seg_index);
		seg_offset += 6;
		memcpy (pbuff, &buff[seg_offset], 10); pbuff[10] = '\0';
		imagelengths[seg_index] = atoi (pbuff);
		des_offset += imagelengths[seg_index];
		seg_offset += 10;
     }

  //////////////////////////////////////////////////
  //// process 2.0 Symbols segments length info ////
  //////////////////////////////////////////////////

  memcpy (pbuff, &buff[seg_offset], 3); pbuff[3] = '\0';
  int NUMS = atoi (pbuff);
  seg_offset += 3;
  if (NUMS > 0)
  {
     std::vector <int> numshdrlengths (NUMS);
     std::vector <int> numslengths (NUMS);
     for (seg_index = 0; seg_index < NUMS; seg_index++)
     {
		memcpy (pbuff, &buff[seg_offset], 4); pbuff[4] = '\0';
		numshdrlengths.at (seg_index) = atoi (pbuff);
		des_offset += numshdrlengths.at (seg_index);
		seg_offset += 4;
		memcpy (pbuff, &buff[seg_offset], 6);  pbuff[6] = '\0';
		numslengths.at (seg_index) = atoi (pbuff);
		des_offset += numslengths.at (seg_index);
		seg_offset += 6;
     }
  }
  ///////////////////////////////////////////////////
  //// process 2.0  Label segments length info   ////
  ///////////////////////////////////////////////////
  memcpy (pbuff, &buff[seg_offset], 3);  pbuff[3] = '\0';
  int NUML = atoi (pbuff);
  seg_offset += 3;
  if (NUML > 0)
  {
     std::vector <int> numLhdrlengths (NUML);
     std::vector <int> numLlengths (NUML);
     for (seg_index = 0; seg_index < NUML; seg_index++)
     {
		memcpy (pbuff, &buff[seg_offset], 4);  pbuff[4] = '\0';
		numLhdrlengths.at (seg_index) = atoi (pbuff);
		des_offset += numLhdrlengths.at (seg_index);
		seg_offset += 4;
		memcpy (pbuff, &buff[seg_offset], 3);  pbuff[3] = '\0';
		numLlengths.at (seg_index) = atoi (pbuff);
		des_offset += numLlengths.at (seg_index);
		seg_offset += 3;
     }
  }
  ////////////////////////////////////////////////////////////
  //// process 2.0 Text Segments length info              ////
  ////////////////////////////////////////////////////////////
  memcpy (pbuff, &buff[seg_offset], 3);  pbuff[3] = '\0';
  int NUMT = atoi (pbuff);
  seg_offset += 3;
  if (NUMT > 0 )
  {
     std::vector <int> numThdrlengths (NUMT);
     std::vector <int> numTlengths (NUMT);
     for (int t_index = 0; t_index < NUMT; t_index++)
     {
		memcpy (pbuff, &buff[seg_offset], 4);  pbuff[4] = '\0';
		numThdrlengths [t_index] = atoi (pbuff);
		des_offset += numThdrlengths [t_index];
		seg_offset += 4;
		memcpy (pbuff, &buff[seg_offset], 5);  pbuff[5] = '\0';
		numTlengths [t_index] = atoi (pbuff);
		des_offset += numTlengths [t_index];
		seg_offset += 5;
     }
  }
  ////////////////////////////////////////////////////////////
  //// process 2.0 Data Extension Segments length info    ////
  ////////////////////////////////////////////////////////////

  memcpy (pbuff, &buff[seg_offset], 3);  pbuff[3] = '\0';
  int NUMD = atoi (pbuff);
  seg_offset += 3;
  std::vector <int> DEShdrlengths (NUMD);
  std::vector <int> DESlengths (NUMD);
  if (NUMD > 0)
     for (seg_index = 0; seg_index < NUMD; seg_index++)
     {
		memcpy (pbuff, &buff[seg_offset], 4);  pbuff[4] = '\0';
		DEShdrlengths [seg_index] = atoi (pbuff);
		seg_offset += 4;
		memcpy (pbuff, &buff[seg_offset], 9);  pbuff[9] = '\0';
		DESlengths [seg_index] = atoi (pbuff);
		seg_offset += 9;
     }
 
  /////////////////////////////////////////////////////////////
  //// process 2.0 Reserved Extension Segments length info ////
  /////////////////////////////////////////////////////////////
  memcpy (pbuff, &buff[seg_offset], 3);  pbuff[3] = '\0';
  int numR = atoi (pbuff);
  seg_offset += 3;
  std::vector <int> numRhdrlengths (numR);
  std::vector <int> numRlengths (numR);
  for (seg_index = 0; seg_index < numR; seg_index++)
  {
    memcpy (pbuff, &buff[seg_offset], 4);  pbuff[4] = '\0';
    numRhdrlengths [seg_index] = atoi (pbuff);
    seg_offset += 4;
    memcpy (pbuff, &buff[seg_offset], 7);  pbuff[7] = '\0';
    numRlengths [seg_index] = atoi (pbuff);
    seg_offset += 7;
  }

  ////////////////////////////////////////////////////////////
  //// process  2.0 UDHD/XHD info                         ////
  ////////////////////////////////////////////////////////////
  //std::cout << "seg_offset " << seg_offset << '\n';
  memcpy (pbuff, &buff[seg_offset], 5);  pbuff[5] = '\0';
  int lenUDHD = atoi (pbuff);
  seg_offset += 5;
  seg_offset += 3; // added to get past currently unused UDHOFL field
  // store file header UD tre's in string
  std::string UDHD;
  if (lenUDHD > 0)
    UDHD.assign (&buff[seg_offset], lenUDHD);

  seg_offset += lenUDHD -3;
  memcpy (pbuff, &buff[seg_offset], 5);  pbuff[5] = '\0';
  int lenXHD = atoi (pbuff);
  seg_offset += 5;
  // store file header UD tre's in string
  std::string XHD;
  if (lenXHD > 0)
    XHD.assign (&buff[seg_offset], lenXHD);
  
  std::string HD = UDHD + XHD;
  unsigned int treLen = lenUDHD + lenXHD;
  // parse file tre's
  if (treLen)
    parseTRE (treLen,  HD, &isd->numTREs, &isd->fileTREs);

  ////////////////////////////////////////////
  /////// End of fileheader code  ////////////
  ////////////////////////////////////////////
  seg_offset += treLen;  // cue up to begining of first image group

  if (seg_offset != hl)
    {
      std::cout << "Parser error in file header -- hl = " << hl << " offset = " << seg_offset << '\n';
      exit (666);
    }
  /////// Begin 2.0 image sub-header parsing
  if (NUMI > 0)
     parseImages (isd, hl, imagehdrlengths, imagelengths);
  if (NUMD > 0)
     parseDES(isd, des_offset, DEShdrlengths, DESlengths);
  }
  return warning;
}