Files
rdkit/Code/GraphMol/FileParsers/FileParserUtils.h
Greg Landrum 270f7b76e5 Partial support for reading CXSMILES (#1237)
* add a SmilesParserParams object to prepare for this

* add a SmilesParserParams object to prepare for this

* add tests for the SmilesParseParmas

* support name parsing, should it be the default?

* rename CXNSmiles to CXSmiles;
add a spirit parser for CXSmiles coordinate that is at least syntax correct

* abandon boost::spirit for now; crude atom token parser

* support params in smiles parser (not tested, may not build)

* can read coords and atom labels along with mol names; crude, but works

* read coordinate bonds

* remove some compiler warnings with VS2015

* remove a bunch of compiler warnings on windows

* remove more warnings on windows

* remove more warnings on windows

* backup commit: first pass at parsing query features

* radical spec parsing

* handle attachment points using atom mapping

* switch to a named property for atom labels

* fix handling of the "A" atom query

* add functions to construct A and Q queries (needs more work)

* fix a problem created while cleaning up warnings earlier

* add some additional convenience functions for making generic atoms.
Still need M and to recognize these while writing CXSMILES

* add M queries; update some tests

* fix a linux compile problem

* get the cxsmiles stuff working in python; basic testing

* support "M" in CXSMILES
2017-01-31 13:50:36 -05:00

57 lines
1.8 KiB
C++

//
// Copyright (C) 2010 Greg Landrum and Rational Discovery LLC
//
// @@ All Rights Reserved @@
// This file is part of the RDKit.
// The contents are covered by the terms of the BSD license
// which is included in the file license.txt, found at the root
// of the RDKit source tree.
//
#ifndef _RD_FILEPARSERUTILS_H
#define _RD_FILEPARSERUTILS_H
#include <string>
#include <iostream>
#include <RDGeneral/BoostStartInclude.h>
#include <boost/lexical_cast.hpp>
#include <boost/algorithm/string.hpp>
#include <RDGeneral/BoostEndInclude.h>
namespace RDKit {
class RWMol;
class Conformer;
namespace FileParserUtils {
template <typename T>
T stripSpacesAndCast(const std::string &input, bool acceptSpaces = false) {
std::string trimmed = boost::trim_copy(input);
if (acceptSpaces && trimmed == "") {
return 0;
} else {
return boost::lexical_cast<T>(trimmed);
}
}
int toInt(const std::string &input, bool acceptSpaces = false);
double toDouble(const std::string &input, bool acceptSpaces = true);
// reads a line from an MDL v3K CTAB
std::string getV3000Line(std::istream *inStream, unsigned int &line);
// nAtoms and nBonds are ignored on input, set on output
bool ParseV3000CTAB(std::istream *inStream, unsigned int &line, RWMol *mol,
Conformer *&conf, bool &chiralityPossible,
unsigned int &nAtoms, unsigned int &nBonds,
bool strictParsing = true, bool expectMEND = true);
// nAtoms and nBonds are used
bool ParseV2000CTAB(std::istream *inStream, unsigned int &line, RWMol *mol,
Conformer *&conf, bool &chiralityPossible,
unsigned int &nAtoms, unsigned int &nBonds,
bool strictParsing = true);
Atom *replaceAtomWithQueryAtom(RWMol *mol, Atom *atom);
}
}
#endif