/src/rdkit/Code/GraphMol/SmilesParse/SmilesParseOps.h
Line | Count | Source |
1 | | // |
2 | | // Copyright (C) 2001-2022 Greg Landrum and other RDKit contributors |
3 | | // |
4 | | // @@ All Rights Reserved @@ |
5 | | // This file is part of the RDKit. |
6 | | // The contents are covered by the terms of the BSD license |
7 | | // which is included in the file license.txt, found at the root |
8 | | // of the RDKit source tree. |
9 | | // |
10 | | #include <string_view> |
11 | | |
12 | | #include <RDGeneral/export.h> |
13 | | #ifndef RD_SMILESPARSEOPS_H |
14 | | #define RD_SMILESPARSEOPS_H |
15 | | #include <GraphMol/Bond.h> |
16 | | |
17 | | namespace RDKit { |
18 | | class RWMol; |
19 | | class Atom; |
20 | | class QueryBond; |
21 | | } // namespace RDKit |
22 | | namespace SmilesParseOps { |
23 | | RDKIT_SMILESPARSE_EXPORT void CheckRingClosureBranchStatus(RDKit::Atom *atom, |
24 | | RDKit::RWMol *mp); |
25 | | RDKIT_SMILESPARSE_EXPORT void ReportParseError(const char *message, |
26 | | bool throwIt = true); |
27 | | RDKIT_SMILESPARSE_EXPORT void CleanupAfterParseError(RDKit::RWMol *mol); |
28 | | // This uses SMARTS semantics: unspecified bonds are treated as |
29 | | // aromatic or single. |
30 | | RDKIT_SMILESPARSE_EXPORT void AddFragToMol( |
31 | | RDKit::RWMol *mol, RDKit::RWMol *frag, |
32 | | RDKit::Bond::BondType bondOrder = RDKit::Bond::UNSPECIFIED, |
33 | | RDKit::Bond::BondDir bondDir = RDKit::Bond::NONE); |
34 | | RDKIT_SMILESPARSE_EXPORT RDKit::Bond::BondType GetUnspecifiedBondType( |
35 | | const RDKit::RWMol *mol, const RDKit::Atom *atom1, |
36 | | const RDKit::Atom *atom2); |
37 | | RDKIT_SMILESPARSE_EXPORT void CheckChiralitySpecifications(RDKit::RWMol *mol, |
38 | | bool strict); |
39 | | RDKIT_SMILESPARSE_EXPORT void CloseMolRings(RDKit::RWMol *mol, |
40 | | bool toleratePartials); |
41 | | RDKIT_SMILESPARSE_EXPORT void SetUnspecifiedBondTypes(RDKit::RWMol *mol); |
42 | | RDKIT_SMILESPARSE_EXPORT void AdjustAtomChiralityFlags(RDKit::RWMol *mol); |
43 | | RDKIT_SMILESPARSE_EXPORT void CleanupAfterParsing(RDKit::RWMol *mol); |
44 | | RDKIT_SMILESPARSE_EXPORT void parseCXExtensions( |
45 | | RDKit::RWMol &mol, const std::string &extText, |
46 | | std::string::const_iterator &pos, unsigned int startAtomIdx = 0, |
47 | | unsigned int startBondIdx = 0); |
48 | | inline void parseCXExtensions(RDKit::RWMol &mol, const std::string &extText, |
49 | | unsigned int startAtomIdx, |
50 | 0 | unsigned int startBondIdx) { |
51 | 0 | auto iter = extText.begin(); |
52 | 0 | parseCXExtensions(mol, extText, iter, startAtomIdx, startBondIdx); |
53 | 0 | }; |
54 | | //! removes formal charge, isotope, etc. Primarily useful for QueryAtoms |
55 | | RDKIT_SMILESPARSE_EXPORT void ClearAtomChemicalProps(RDKit::Atom *atom); |
56 | | |
57 | | //! returns whether or not the combination of tag and permutation provided are |
58 | | //! legal |
59 | | RDKIT_SMILESPARSE_EXPORT bool checkChiralPermutation(int chiralTag, |
60 | | int permutation); |
61 | | |
62 | | //! this is a bit of a hack to try and get nicer "SMILES" from |
63 | | //! a SMARTS molecule |
64 | | RDKIT_SMILESPARSE_EXPORT RDKit::QueryBond *getUnspecifiedQueryBond( |
65 | | const RDKit::Atom *a1, const RDKit::Atom *a2); |
66 | | |
67 | | namespace detail { |
68 | | constexpr auto _needsDetectBondStereo = "_needsDetectBondStereo"; |
69 | | constexpr auto _needsDetectAtomStereo = "_needsDetectAtomStereo"; |
70 | | |
71 | | void printSyntaxErrorMessage(std::string_view input, |
72 | | std::string_view err_message, |
73 | | unsigned int bad_token_position, |
74 | | std::string_view input_type); |
75 | | } // namespace detail |
76 | | } // namespace SmilesParseOps |
77 | | |
78 | | #endif |