Example #1
0
void QChemInput::readEfpParamsSection(TextStream& textStream)
{
   EfpFragment parser;
   while (!textStream.atEnd()) {
      parser.loadNextFragment(textStream);
      if (textStream.previousLine().contains("$end", Qt::CaseInsensitive)) break;
   }
}
Example #2
0
QString EfpFragment::loadNextFragment(TextStream& textStream)
{
   QString line(textStream.previousLine()); 
   if (!line.contains("fragment", Qt::CaseInsensitive)) {
      line = textStream.seek("fragment", Qt::CaseInsensitive);
   }

   QStringList tokens(TextStream::tokenize(line));
   QString name;

   if (tokens.size() >= 2 && tokens[0].toLower() == "fragment") {
      name = tokens[1];
   }else {
      return QString();
   }

   CartesianCoordinates parser;
   Data::Geometry* geom(parser.parse(textStream)); 
   if ( !geom || !parser.error().isEmpty()) {
      m_errors.append("Invalid EFP file, no coordinates found");
      delete geom;
      return QString();
   }

   if (name.endsWith("_L", Qt::CaseInsensitive)) {
      Data::EfpFragmentLibrary::instance().add(name, geom);
   }else {
	  // We assume the fragment is not in the library and so we need to collect
	  // the additional guff so we can add it to the input file if required.
      QString line;
      QStringList guff;
      while ( !textStream.atEnd() && 
         !line.contains("fragment", Qt::CaseInsensitive) &&
         !line.contains("$end", Qt::CaseInsensitive) ) {
         guff << line;
      }
      Data::EfpFragmentLibrary::instance().add(name, geom, guff.join("\n"));
   }

   return name;
}