core/indigo-core/molecule/CDXCommons.h (1,284 lines of code) (raw):
#ifndef _H_CDXCommons
#define _H_CDXCommons
#include "CDXConstants.h"
#include "reaction/reaction.h"
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>
#ifdef _WIN32
#pragma warning(push)
#pragma warning(disable : 4200)
#endif
namespace indigo
{
enum class EnhancedStereoType : int
{
UNSPECIFIED,
NONE,
ABSOLUTE,
OR,
AND
};
const int KCDXMLChemicalFontStyle = 96;
const int kCDXMLSizeMultiplier = 20;
const int kBondSpacingMultiplier = 10;
const int kCDXMLStyleSizeIndex = 2;
const uint32_t kCDXMagicNumber = 0x01020304;
const char kCDXReserved[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
const float kColorMult = ((1 << 16) - 1);
const float kCDXMLFonsSizeMultiplier = 1.5;
const std::uint16_t KCDXMLFontStyleSubscript = 0x20;
const std::uint16_t KCDXMLFontStyleSuperscript = 0x40;
constexpr uint32_t kCDXUnitsPerPoint = 65536;
constexpr uint32_t kCDXAngleMultiplier = 65536;
constexpr uint32_t kCDXBondSpacingMultiplier = 10;
#pragma pack(push, 1)
struct CDXColor
{
CDXColor(float red, float green, float blue)
: r(static_cast<uint16_t>(red * kColorMult)), g(static_cast<uint16_t>(green * kColorMult)), b(static_cast<uint16_t>(blue * kColorMult))
{
}
uint16_t r;
uint16_t g;
uint16_t b;
};
struct CDXFont
{
uint16_t font_id;
uint16_t char_set;
std::string name;
};
struct CDXTextStyle
{
CDXTextStyle() : offset(0), font_index(static_cast<uint16_t>(-1)), font_face(0), font_size(0), font_color(0){};
uint16_t offset;
uint16_t font_index;
uint16_t font_face;
uint16_t font_size;
uint16_t font_color;
};
struct CDXTextStyleProperty
{
uint16_t tag;
uint16_t size;
uint16_t style_count;
CDXTextStyle styles[];
};
#pragma pack(pop)
enum class ECDXType
{
CDXString,
CDXDate,
CDXINT8,
CDXINT16,
CDXUINT8,
CDXUINT16,
CDXUINT32,
CDXRepresentsProperty,
CDXBooleanImplied,
CDXBoolean,
CDXObjectID,
CDXFontTable,
CDXPoint2D,
CDXPoint3D,
CDXINT32,
CDXRectangle,
CDXColorTable,
CDXElementList,
CDXFormula,
CDXObjectIDArray,
CDXObjectIDArrayWithCounts,
CDXGenericList,
CDXFLOAT64,
CDXINT16ListWithCounts,
CDXUnformatted,
CDXCoordinate,
CDXCurvePoints,
CDXCurvePoints3D,
CDXvaries,
CDXFontStyle
};
const std::unordered_map<std::string, int16_t> kCDXProp_Arrow_ArrowHeadStrToInt = {{"Full", 2}, {"HalfLeft", 3}, {"HalfRight", 4}};
const std::unordered_map<int16_t, std::string> kCDXProp_Arrow_ArrowHeadIntToStr = {{2, "Full"}, {3, "HalfLeft"}, {4, "HalfRight"}};
const std::unordered_map<std::string, int16_t> kCDXProp_Arrow_ArrowHeadTypeStrToInt = {{"Solid", 1}, {"Hollow", 2}, {"Angle", 3}};
const std::unordered_map<int16_t, std::string> kCDXProp_Arrow_ArrowHeadTypeIntToStr = {{1, "Solid"}, {2, "Hollow"}, {3, "Angle"}};
const std::unordered_map<std::string, CDXLineType> kLineTypeStrToInt = {
{"Solid", kCDXLineType_Solid}, {"Dashed", kCDXLineType_Dashed}, {"Bold", kCDXLineType_Bold}, {"Wavy", kCDXLineType_Wavy}};
const std::unordered_map<int16_t, std::string> kLineTypeIntToStr = {
{kCDXLineType_Solid, "Solid"}, {kCDXLineType_Dashed, "Dashed"}, {kCDXLineType_Bold, "Bold"}, {kCDXLineType_Wavy, "Wavy"}};
const std::unordered_map<std::string, CDXRectangleType> kRectangleTypeStrToInt = {
{"Plain", kCDXRectangleType_Plain}, {"RoundEdge", kCDXRectangleType_RoundEdge}, {"Shadow", kCDXRectangleType_Shadow},
{"Shaded", kCDXRectangleType_Shaded}, {"Filled", kCDXRectangleType_Filled}, {"Dashed", kCDXRectangleType_Dashed},
{"Bold", kCDXRectangleType_Bold}};
const std::unordered_map<int16_t, std::string> kRectangleTypeIntToStr = {{kCDXRectangleType_Plain, "Plain"}, {kCDXRectangleType_RoundEdge, "RoundEdge"},
{kCDXRectangleType_Shadow, "Shadow"}, {kCDXRectangleType_Shaded, "Shaded"},
{kCDXRectangleType_Filled, "Filled"}, {kCDXRectangleType_Dashed, "Dashed"},
{kCDXRectangleType_Bold, "Bold"}};
const std::unordered_map<std::string, CDXCharSet> kCharsetStrToInt = {{"Unknown", kCDXCharSetUnknown},
{"EBCDICOEM", kCDXCharSetEBCDICOEM},
{"MSDOSUS", kCDXCharSetMSDOSUS},
{"EBCDIC500V1", kCDXCharSetEBCDIC500V1},
{"ASMO-708", kCDXCharSetArabicASMO708},
{"ArabicASMO449P", kCDXCharSetArabicASMO449P},
{"ArabicTransparent", kCDXCharSetArabicTransparent},
{"DOS-720", kCDXCharSetArabicTransparentASMO},
{"Greek437G", kCDXCharSetGreek437G},
{"cp775", kCDXCharSetBalticOEM},
{"windows-850", kCDXCharSetMSDOSLatin1},
{"ibm852", kCDXCharSetMSDOSLatin2},
{"cp855", kCDXCharSetIBMCyrillic},
{"cp857", kCDXCharSetIBMTurkish},
{"cp860", kCDXCharSetMSDOSPortuguese},
{"cp861", kCDXCharSetMSDOSIcelandic},
{"DOS-862", kCDXCharSetHebrewOEM},
{"cp863", kCDXCharSetMSDOSCanadianFrench},
{"cp864", kCDXCharSetArabicOEM},
{"cp865", kCDXCharSetMSDOSNordic},
{"cp866", kCDXCharSetMSDOSRussian},
{"cp869", kCDXCharSetIBMModernGreek},
{"windows-874", kCDXCharSetThai},
{"EBCDIC", kCDXCharSetEBCDIC},
{"shift_jis", kCDXCharSetJapanese},
{"gb2312", kCDXCharSetChineseSimplified},
{"ks_c_5601-1987", kCDXCharSetKorean},
{"big5", kCDXCharSetChineseTraditional},
{"iso-10646", kCDXCharSetUnicodeISO10646},
{"windows-1250", kCDXCharSetWin31EasternEuropean},
{"windows-1251", kCDXCharSetWin31Cyrillic},
{"iso-8859-1", kCDXCharSetWin31Latin1},
{"iso-8859-7", kCDXCharSetWin31Greek},
{"iso-8859-9", kCDXCharSetWin31Turkish},
{"windows-1255", kCDXCharSetHebrew},
{"windows-1256", kCDXCharSetArabic},
{"windows-1257", kCDXCharSetBaltic},
{"windows-1258", kCDXCharSetVietnamese},
{"windows-1361", kCDXCharSetKoreanJohab},
{"x-mac-roman", kCDXCharSetMacRoman},
{"x-mac-japanese", kCDXCharSetMacJapanese},
{"x-mac-tradchinese", kCDXCharSetMacTradChinese},
{"x-mac-korean", kCDXCharSetMacKorean},
{"x-mac-arabic", kCDXCharSetMacArabic},
{"x-mac-hebrew", kCDXCharSetMacHebrew},
{"x-mac-greek", kCDXCharSetMacGreek},
{"x-mac-cyrillic", kCDXCharSetMacCyrillic},
{"x-mac-reserved", kCDXCharSetMacReserved},
{"x-mac-devanagari", kCDXCharSetMacDevanagari},
{"x-mac-gurmukhi", kCDXCharSetMacGurmukhi},
{"x-mac-gujarati", kCDXCharSetMacGujarati},
{"x-mac-oriya", kCDXCharSetMacOriya},
{"x-mac-bengali", kCDXCharSetMacBengali},
{"x-mac-tamil", kCDXCharSetMacTamil},
{"x-mac-telugu", kCDXCharSetMacTelugu},
{"x-mac-kannada", kCDXCharSetMacKannada},
{"x-mac-Malayalam", kCDXCharSetMacMalayalam},
{"x-mac-sinhalese", kCDXCharSetMacSinhalese},
{"x-mac-burmese", kCDXCharSetMacBurmese},
{"x-mac-khmer", kCDXCharSetMacKhmer},
{"x-mac-thai", kCDXCharSetMacThai},
{"x-mac-lao", kCDXCharSetMacLao},
{"x-mac-georgian", kCDXCharSetMacGeorgian},
{"x-mac-armenian", kCDXCharSetMacArmenian},
{"x-mac-simpChinese", kCDXCharSetMacSimpChinese},
{"x-mac-tibetan", kCDXCharSetMacTibetan},
{"x-mac-mongolian", kCDXCharSetMacMongolian},
{"x-mac-ethiopic", kCDXCharSetMacEthiopic},
{"x-mac-ce", kCDXCharSetMacCentralEuroRoman},
{"x-mac-vietnamese", kCDXCharSetMacVietnamese},
{"x-mac-extArabic", kCDXCharSetMacExtArabic},
{"x-mac-uninterpreted", kCDXCharSetMacUninterpreted},
{"x-mac-symbol", kCDXCharSetMacSymbol},
{"x-mac-dingbats", kCDXCharSetMacDingbats},
{"x-mac-croatian", kCDXCharSetMacCroatian},
{"x-mac-romanian", kCDXCharSetMacRomanian},
{"x-mac-celtic", kCDXCharSetMacCeltic},
{"x-mac-gaelic", kCDXCharSetMacGaelic},
{"x-mac-keyboardGlyphs", kCDXCharSetMacKeyboardGlyphs},
{"x-mac-icelandic", kCDXCharSetMacIcelandic},
{"x-mac-turkish", kCDXCharSetMacTurkish},
{"utf-8", kCDXCharSetUTF8}};
const std::unordered_map<std::string, CDXRadical> kRadicalStrToId = {
{"None", kCDXRadical_None}, {"Singlet", kCDXRadical_Singlet}, {"Doublet", kCDXRadical_Doublet}, {"Triplet", kCDXRadical_Triplet}};
const std::vector<std::string> kRadicalIdToStr = {"None", "Singlet", "Doublet", "Triplet"};
const std::unordered_map<int, std::string> kCharsetIntToStr = {{kCDXCharSetUnknown, "Unknown"},
{kCDXCharSetEBCDICOEM, "EBCDICOEM"},
{kCDXCharSetMSDOSUS, "MSDOSUS"},
{kCDXCharSetEBCDIC500V1, "EBCDIC500V1"},
{kCDXCharSetArabicASMO708, "ASMO-708"},
{kCDXCharSetArabicASMO449P, "ArabicASMO449P"},
{kCDXCharSetArabicTransparent, "ArabicTransparent"},
{kCDXCharSetArabicTransparentASMO, "DOS-720"},
{kCDXCharSetGreek437G, "Greek437G"},
{kCDXCharSetBalticOEM, "cp775"},
{kCDXCharSetMSDOSLatin1, "windows-850"},
{kCDXCharSetMSDOSLatin2, "ibm852"},
{kCDXCharSetIBMCyrillic, "cp855"},
{kCDXCharSetIBMTurkish, "cp857"},
{kCDXCharSetMSDOSPortuguese, "cp860"},
{kCDXCharSetMSDOSIcelandic, "cp861"},
{kCDXCharSetHebrewOEM, "DOS-862"},
{kCDXCharSetMSDOSCanadianFrench, "cp863"},
{kCDXCharSetArabicOEM, "cp864"},
{kCDXCharSetMSDOSNordic, "cp865"},
{kCDXCharSetMSDOSRussian, "cp866"},
{kCDXCharSetIBMModernGreek, "cp869"},
{kCDXCharSetThai, "windows-874"},
{kCDXCharSetEBCDIC, "EBCDIC"},
{kCDXCharSetJapanese, "shift_jis"},
{kCDXCharSetChineseSimplified, "gb2312"},
{kCDXCharSetKorean, "ks_c_5601-1987"},
{kCDXCharSetChineseTraditional, "big5"},
{kCDXCharSetUnicodeISO10646, "iso-10646"},
{kCDXCharSetWin31EasternEuropean, "windows-1250"},
{kCDXCharSetWin31Cyrillic, "windows-1251"},
{kCDXCharSetWin31Latin1, "iso-8859-1"},
{kCDXCharSetWin31Greek, "iso-8859-7"},
{kCDXCharSetWin31Turkish, "iso-8859-9"},
{kCDXCharSetHebrew, "windows-1255"},
{kCDXCharSetArabic, "windows-1256"},
{kCDXCharSetBaltic, "windows-1257"},
{kCDXCharSetVietnamese, "windows-1258"},
{kCDXCharSetKoreanJohab, "windows-1361"},
{kCDXCharSetMacRoman, "x-mac-roman"},
{kCDXCharSetMacJapanese, "x-mac-japanese"},
{kCDXCharSetMacTradChinese, "x-mac-tradchinese"},
{kCDXCharSetMacKorean, " x-mac-korean"},
{kCDXCharSetMacArabic, "x-mac-arabic"},
{kCDXCharSetMacHebrew, "x-mac-hebrew"},
{kCDXCharSetMacGreek, "x-mac-greek"},
{kCDXCharSetMacCyrillic, "x-mac-cyrillic"},
{kCDXCharSetMacReserved, "x-mac-reserved"},
{kCDXCharSetMacDevanagari, "x-mac-devanagari"},
{kCDXCharSetMacGurmukhi, "x-mac-gurmukhi"},
{kCDXCharSetMacGujarati, "x-mac-gujarati"},
{kCDXCharSetMacOriya, "x-mac-oriya"},
{kCDXCharSetMacBengali, "x-mac-bengali"},
{kCDXCharSetMacTamil, "x-mac-tamil"},
{kCDXCharSetMacTelugu, "x-mac-telugu"},
{kCDXCharSetMacKannada, "x-mac-kannada"},
{kCDXCharSetMacMalayalam, "x-mac-Malayalam"},
{kCDXCharSetMacSinhalese, "x-mac-sinhalese"},
{kCDXCharSetMacBurmese, "x-mac-burmese"},
{kCDXCharSetMacKhmer, "x-mac-khmer"},
{kCDXCharSetMacThai, "x-mac-thai"},
{kCDXCharSetMacLao, "x-mac-lao"},
{kCDXCharSetMacGeorgian, "x-mac-georgian"},
{kCDXCharSetMacArmenian, "x-mac-armenian"},
{kCDXCharSetMacSimpChinese, "x-mac-simpChinese"},
{kCDXCharSetMacTibetan, "x-mac-tibetan"},
{kCDXCharSetMacMongolian, "x-mac-mongolian"},
{kCDXCharSetMacEthiopic, "x-mac-ethiopic"},
{kCDXCharSetMacCentralEuroRoman, "x-mac-ce"},
{kCDXCharSetMacVietnamese, "x-mac-vietnamese"},
{kCDXCharSetMacExtArabic, "x-mac-extArabic"},
{kCDXCharSetMacUninterpreted, "x-mac-uninterpreted"},
{kCDXCharSetMacSymbol, "x-mac-symbol"},
{kCDXCharSetMacDingbats, "x-mac-dingbats"},
{kCDXCharSetMacCroatian, "x-mac-croatian"},
{kCDXCharSetMacRomanian, "x-mac-"},
{kCDXCharSetMacCeltic, "x-mac-celtic"},
{kCDXCharSetMacGaelic, "x-mac-gaelic"},
{kCDXCharSetMacKeyboardGlyphs, "x-mac-keyboardGlyphs"},
{kCDXCharSetMacIcelandic, "x-mac-icelandic"},
{kCDXCharSetMacTurkish, "x-mac-turkish"},
{kCDXCharSetUTF8, "utf-8"}};
const std::unordered_map<int8_t, std::string> kTextJustificationIntToStr = {
{kCDXTextJustification_Right, "Right"}, {kCDXTextJustification_Left, "Left"}, {kCDXTextJustification_Center, "Center"},
{kCDXTextJustification_Full, "Full"}, {kCDXTextJustification_Above, "Above"}, {kCDXTextJustification_Below, "Below"},
{kCDXTextJustification_Auto, "Auto"}, {kCDXTextJustification_BestInitial, "Best"}};
const std::unordered_map<std::string, int8_t> kTextJustificationStrToInt = {
{"Right", kCDXTextJustification_Right}, {"Left", kCDXTextJustification_Left}, {"Center", kCDXTextJustification_Center},
{"Full", kCDXTextJustification_Full}, {"Above", kCDXTextJustification_Above}, {"Below", kCDXTextJustification_Below},
{"Auto", kCDXTextJustification_Auto}, {"Best", kCDXTextJustification_BestInitial}};
const std::unordered_map<int8_t, std::string> kLabelAlignmentIntTostr = {
{kCDXLabelDisplay_Auto, "Auto"}, {kCDXLabelDisplay_Left, "Left"}, {kCDXLabelDisplay_Center, "Center"}, {kCDXLabelDisplay_Right, "Right"},
{kCDXLabelDisplay_Above, "Above"}, {kCDXLabelDisplay_Below, "Below"}, {kCDXLabelDisplay_BestInitial, "Best"}};
const std::unordered_map<std::string, int8_t> kLabelAlignmentStrToInt = {
{"Auto", kCDXLabelDisplay_Auto}, {"Left", kCDXLabelDisplay_Left}, {"Center", kCDXLabelDisplay_Center}, {"Right", kCDXLabelDisplay_Right},
{"Above", kCDXLabelDisplay_Above}, {"Below", kCDXLabelDisplay_Below}, {"Best", kCDXLabelDisplay_BestInitial}};
const std::unordered_map<int, std::string> kBondOrderIntToStr = {{kCDXBondOrder_Single, "1"},
{kCDXBondOrder_Double, "2"},
{kCDXBondOrder_Triple, "3"},
{kCDXBondOrder_Quadruple, "4"},
{kCDXBondOrder_Quintuple, "5"},
{kCDXBondOrder_Sextuple, "6"},
{kCDXBondOrder_Half, "0.5"},
{kCDXBondOrder_OneHalf, "1.5"},
{kCDXBondOrder_TwoHalf, "2.5"},
{kCDXBondOrder_ThreeHalf, "3.5"},
{kCDXBondOrder_FourHalf, "4.5"},
{kCDXBondOrder_FiveHalf, "5.5"},
{kCDXBondOrder_Dative, "dative"},
{kCDXBondOrder_Ionic, "ionic"},
{kCDXBondOrder_Hydrogen, "hydrogen"},
{kCDXBondOrder_ThreeCenter, "threecenter"},
{kCDXBondOrder_SingleOrDouble, "singleordouble"},
{kCDXBondOrder_SingleOrAromatic, "singleoraromatic"},
{kCDXBondOrder_DoubleOrAromatic, "doubleoraromatic"},
{kCDXBondOrder_Any, "any"}};
const std::unordered_map<std::string, CDXBondOrder> kBondOrderStrToId = {{"1", kCDXBondOrder_Single},
{"2", kCDXBondOrder_Double},
{"3", kCDXBondOrder_Triple},
{"4", kCDXBondOrder_Quadruple},
{"5", kCDXBondOrder_Quintuple},
{"6", kCDXBondOrder_Sextuple},
{"0.5", kCDXBondOrder_Half},
{"1.5", kCDXBondOrder_OneHalf},
{"2.5", kCDXBondOrder_TwoHalf},
{"3.5", kCDXBondOrder_ThreeHalf},
{"4.5", kCDXBondOrder_FourHalf},
{"5.5", kCDXBondOrder_FiveHalf},
{"dative", kCDXBondOrder_Dative},
{"ionic", kCDXBondOrder_Ionic},
{"hydrogen", kCDXBondOrder_Hydrogen},
{"threecenter", kCDXBondOrder_ThreeCenter},
{"singleordouble", kCDXBondOrder_SingleOrDouble},
{"singleoraromatic", kCDXBondOrder_SingleOrAromatic},
{"doubleoraromatic", kCDXBondOrder_DoubleOrAromatic},
{"any", kCDXBondOrder_Any}};
const std::unordered_map<std::string, CDXArrowType> kCDXProp_Arrow_TypeStrToID = {{"NoHead", kCDXArrowType_NoHead},
{"HalfHead", kCDXArrowType_HalfHead},
{"FullHead", kCDXArrowType_FullHead},
{"Resonance", kCDXArrowType_Resonance},
{"Equilibrium", kCDXArrowType_Equilibrium},
{"Hollow", kCDXArrowType_Hollow},
{"RetroSynthetic", kCDXArrowType_RetroSynthetic}};
const std::unordered_map<int, std::string> kCDXProp_Arrow_TypeIDToStr = {{kCDXArrowType_NoHead, "NoHead"},
{kCDXArrowType_HalfHead, "HalfHead"},
{kCDXArrowType_FullHead, "FullHead"},
{kCDXArrowType_Resonance, "Resonance"},
{kCDXArrowType_Equilibrium, "Equilibrium"},
{kCDXArrowType_Hollow, "Hollow"},
{kCDXArrowType_RetroSynthetic, "RetroSynthetic"}};
const std::unordered_map<std::string, CDXSymbolType> kCDXPropSymbolTypeStrToID = {
{"LonePair", kCDXSymbolType_LonePair},
{"Electron", kCDXSymbolType_Electron},
{"RadicalCation", kCDXSymbolType_RadicalCation},
{"RadicalAnion", kCDXSymbolType_RadicalAnion},
{"CirclePlus", kCDXSymbolType_CirclePlus},
{"CircleMinus", kCDXSymbolType_CircleMinus},
{"Dagger", kCDXSymbolType_Dagger},
{"DoubleDagger", kCDXSymbolType_DoubleDagger},
{"Plus", kCDXSymbolType_Plus},
{"Minus", kCDXSymbolType_Minus},
{"Racemic", kCDXSymbolType_Racemic},
{"Absolute", kCDXSymbolType_Absolute},
{"Relative", kCDXSymbolType_Relative},
};
const std::unordered_map<int, std::string> kCDXPropSymbolTypeIDToStr = {
{kCDXSymbolType_LonePair, "LonePair"},
{kCDXSymbolType_Electron, "Electron"},
{kCDXSymbolType_RadicalCation, "RadicalCation"},
{kCDXSymbolType_RadicalAnion, "RadicalAnion"},
{kCDXSymbolType_CirclePlus, "CirclePlus"},
{kCDXSymbolType_CircleMinus, "CircleMinus"},
{kCDXSymbolType_Dagger, "Dagger"},
{kCDXSymbolType_DoubleDagger, "DoubleDagger"},
{kCDXSymbolType_Plus, "Plus"},
{kCDXSymbolType_Minus, "Minus"},
{kCDXSymbolType_Racemic, "Racemic"},
{kCDXSymbolType_Absolute, "Absolute"},
{kCDXSymbolType_Relative, "Relative"},
};
const std::unordered_map<std::string, CDXGraphicType> kCDXPropGraphicTypeStrToID = {
{"Undefined", kCDXGraphicType_Undefined}, {"Line", kCDXGraphicType_Line},
{"Rectangle", kCDXGraphicType_Rectangle}, {"Arc", kCDXGraphicType_Arc},
{"Oval", kCDXGraphicType_Oval}, {"Orbital", kCDXGraphicType_Orbital},
{"Bracket", kCDXGraphicType_Bracket}, {"Symbol", kCDXGraphicType_Symbol}};
const std::unordered_map<int, std::string> kCDXPropGraphicTypeIDToStr = {{kCDXGraphicType_Undefined, "Undefined"}, {kCDXGraphicType_Line, "Line"},
{kCDXGraphicType_Rectangle, "Rectangle"}, {kCDXGraphicType_Arc, "Arc"},
{kCDXGraphicType_Oval, "Oval"}, {kCDXGraphicType_Orbital, "Orbital"},
{kCDXGraphicType_Bracket, "Bracket"}, {kCDXGraphicType_Symbol, "Symbol"}};
const std::unordered_map<std::string, int> kCDXProp_Bond_DisplayStrToID = {{"Solid", kCDXBondDisplay_Solid},
{"Dash", kCDXBondDisplay_Dash},
{"Hash", kCDXBondDisplay_Hash},
{"WedgedHashBegin", kCDXBondDisplay_WedgedHashBegin},
{"WedgedHashEnd", kCDXBondDisplay_WedgedHashEnd},
{"Bold", kCDXBondDisplay_Bold},
{"WedgeBegin", kCDXBondDisplay_WedgeBegin},
{"WedgeEnd", kCDXBondDisplay_WedgeEnd},
{"Wavy", kCDXBondDisplay_Wavy},
{"HollowWedgeBegin", kCDXBondDisplay_HollowWedgeBegin},
{"HollowWedgeEnd", kCDXBondDisplay_HollowWedgeEnd},
{"WavyWedgeBegin", kCDXBondDisplay_WavyWedgeBegin},
{"WavyWedgeEnd", kCDXBondDisplay_WavyWedgeEnd},
{"Dot", kCDXBondDisplay_Dot},
{"DashDot", kCDXBondDisplay_DashDot}};
const std::unordered_map<int, std::string> kCDXProp_Bond_DisplayIdToStr = {{kCDXBondDisplay_Solid, "Solid"},
{kCDXBondDisplay_Dash, "Dash"},
{kCDXBondDisplay_Hash, "Hash"},
{kCDXBondDisplay_WedgedHashBegin, "WedgedHashBegin"},
{kCDXBondDisplay_WedgedHashEnd, "WedgedHashEnd"},
{kCDXBondDisplay_Bold, "Bold"},
{kCDXBondDisplay_WedgeBegin, "WedgeBegin"},
{kCDXBondDisplay_WedgeEnd, "WedgeEnd"},
{kCDXBondDisplay_Wavy, "Wavy"},
{kCDXBondDisplay_HollowWedgeBegin, "HollowWedgeBegin"},
{kCDXBondDisplay_HollowWedgeEnd, "HollowWedgeEnd"},
{kCDXBondDisplay_WavyWedgeBegin, "WavyWedgeBegin"},
{kCDXBondDisplay_WavyWedgeEnd, "WavyWedgeEnd"},
{kCDXBondDisplay_Dot, "Dot"},
{kCDXBondDisplay_DashDot, "DashDot"}};
static const std::unordered_map<int, std::pair<int, bool>> display_to_direction = {{kCDXBondDisplay_WedgedHashBegin, {BOND_DOWN, false}},
{kCDXBondDisplay_WedgedHashEnd, {BOND_DOWN, true}},
{kCDXBondDisplay_Hash, {BOND_DOWN, false}},
{kCDXBondDisplay_Dash, {BOND_DOWN, false}},
{kCDXBondDisplay_WedgeBegin, {BOND_UP, false}},
{kCDXBondDisplay_WedgeEnd, {BOND_UP, true}},
{kCDXBondDisplay_HollowWedgeBegin, {BOND_UP, false}},
{kCDXBondDisplay_HollowWedgeEnd, {BOND_UP, true}},
{kCDXBondDisplay_Bold, {BOND_UP, false}},
{kCDXBondDisplay_Wavy, {BOND_EITHER, false}}};
const std::unordered_map<std::string, EnhancedStereoType> kCDXEnhancedStereoStrToID = {{"Unspecified", EnhancedStereoType::UNSPECIFIED},
{"None", EnhancedStereoType::NONE},
{"Absolute", EnhancedStereoType::ABSOLUTE},
{"Or", EnhancedStereoType::OR},
{"And", EnhancedStereoType::AND}};
const std::unordered_map<int, std::string> kCDXEnhancedStereoIDToStr = {{(int)EnhancedStereoType::UNSPECIFIED, "Unspecified"},
{(int)EnhancedStereoType::NONE, "None"},
{(int)EnhancedStereoType::ABSOLUTE, "Absolute"},
{(int)EnhancedStereoType::OR, "Or"},
{(int)EnhancedStereoType::AND, "And"}};
const std::unordered_map<uint16_t, std::pair<std::string, ECDXType>> KCDXPropToName = {
{kCDXProp_CreationUserName, {"CreationUserName", ECDXType::CDXString}},
{kCDXProp_CreationDate, {"CreationDate", ECDXType::CDXDate}},
{kCDXProp_CreationProgram, {"CreationProgram", ECDXType::CDXString}},
{kCDXProp_ModificationUserName, {"ModificationUserName", ECDXType::CDXString}},
{kCDXProp_ModificationDate, {"ModificationDate", ECDXType::CDXDate}},
{kCDXProp_ModificationProgram, {"ModificationProgram", ECDXType::CDXString}},
{kCDXProp_Name, {"Name", ECDXType::CDXString}},
{kCDXProp_Comment, {"Comment", ECDXType::CDXString}},
{kCDXProp_ZOrder, {"Z", ECDXType::CDXINT16}},
{kCDXProp_RegistryNumber, {"RegistryNumber", ECDXType::CDXString}},
{kCDXProp_RegistryAuthority, {"RegistryAuthority", ECDXType::CDXString}},
{kCDXProp_RepresentsProperty, {"RepresentsProperty", ECDXType::CDXRepresentsProperty}},
{kCDXProp_IgnoreWarnings, {"IgnoreWarnings", ECDXType::CDXBooleanImplied}},
{kCDXProp_ChemicalWarning, {"Warning", ECDXType::CDXString}},
{kCDXProp_Visible, {"Visible", ECDXType::CDXBoolean}},
{kCDXProp_SupersededBy, {"SupersededBy", ECDXType::CDXObjectID}},
{kCDXProp_FontTable, {"fonttable", ECDXType::CDXFontTable}},
{kCDXProp_2DPosition, {"p", ECDXType::CDXPoint2D}},
{kCDXProp_3DPosition, {"xyz", ECDXType::CDXPoint3D}},
{kCDXProp_2DExtent, {"extent", ECDXType::CDXPoint2D}},
{kCDXProp_3DExtent, {"extent3D", ECDXType::CDXPoint3D}},
{kCDXProp_BoundingBox, {"BoundingBox", ECDXType::CDXRectangle}},
{kCDXProp_RotationAngle, {"RotationAngle", ECDXType::CDXINT32}},
{kCDXProp_3DHead, {"Head3D", ECDXType::CDXPoint3D}},
{kCDXProp_3DTail, {"Tail3D", ECDXType::CDXPoint3D}},
{kCDXProp_TopLeft, {"TopLeft", ECDXType::CDXPoint2D}},
{kCDXProp_TopRight, {"TopRight", ECDXType::CDXPoint2D}},
{kCDXProp_BottomRight, {"BottomRight", ECDXType::CDXPoint2D}},
{kCDXProp_BottomLeft, {"BottomLeft", ECDXType::CDXPoint2D}},
{kCDXProp_3DCenter, {"Center3D", ECDXType::CDXPoint3D}},
{kCDXProp_3DMajorAxisEnd, {"MajorAxisEnd3D", ECDXType::CDXPoint3D}},
{kCDXProp_3DMinorAxisEnd, {"MinorAxisEnd3D", ECDXType::CDXPoint3D}},
{kCDXProp_ColorTable, {"colortable", ECDXType::CDXColorTable}},
{kCDXProp_ForegroundColor, {"color", ECDXType::CDXUINT16}},
{kCDXProp_BackgroundColor, {"bgcolor", ECDXType::CDXUINT16}},
{kCDXProp_Node_Type, {"NodeType", ECDXType::CDXINT16}},
{kCDXProp_Node_LabelDisplay, {"LabelDisplay", ECDXType::CDXINT8}},
{kCDXProp_Node_Element, {"Element", ECDXType::CDXINT16}},
{kCDXProp_Atom_ElementList, {"ElementList", ECDXType::CDXElementList}},
{kCDXProp_Atom_Formula, {"Formula", ECDXType::CDXFormula}},
{kCDXProp_Atom_Isotope, {"Isotope", ECDXType::CDXINT16}},
{kCDXProp_Atom_Charge, {"Charge", ECDXType::CDXINT8}},
{kCDXProp_Atom_Radical, {"Radical", ECDXType::CDXUINT8}},
{kCDXProp_Atom_RestrictFreeSites, {"FreeSites", ECDXType::CDXUINT8}},
{kCDXProp_Atom_RestrictImplicitHydrogens, {"ImplicitHydrogens", ECDXType::CDXBooleanImplied}},
{kCDXProp_Atom_RestrictRingBondCount, {"RingBondCount", ECDXType::CDXINT8}},
{kCDXProp_Atom_RestrictUnsaturatedBonds, {"UnsaturatedBonds", ECDXType::CDXINT8}},
{kCDXProp_Atom_RestrictRxnChange, {"RxnChange", ECDXType::CDXBooleanImplied}},
{kCDXProp_Atom_RestrictRxnStereo, {"RxnStereo", ECDXType::CDXINT8}},
{kCDXProp_Atom_AbnormalValence, {"AbnormalValence", ECDXType::CDXBooleanImplied}},
{kCDXProp_Atom_NumHydrogens, {"NumHydrogens", ECDXType::CDXUINT16}},
{kCDXProp_Atom_HDot, {"HDot", ECDXType::CDXBooleanImplied}},
{kCDXProp_Atom_HDash, {"HDash", ECDXType::CDXBooleanImplied}},
{kCDXProp_Atom_Geometry, {"Geometry", ECDXType::CDXINT8}},
{kCDXProp_Atom_BondOrdering, {"BondOrdering", ECDXType::CDXObjectIDArray}},
{kCDXProp_Node_Attachments, {"Attachments", ECDXType::CDXObjectIDArrayWithCounts}},
{kCDXProp_Atom_GenericNickname, {"GenericNickname", ECDXType::CDXString}},
{kCDXProp_Atom_AltGroupID, {"AltGroupID", ECDXType::CDXObjectID}},
{kCDXProp_Atom_RestrictSubstituentsUpTo, {"SubstituentsUpTo", ECDXType::CDXUINT8}},
{kCDXProp_Atom_RestrictSubstituentsExactly, {"SubstituentsExactly", ECDXType::CDXUINT8}},
{kCDXProp_Atom_CIPStereochemistry, {"AS", ECDXType::CDXINT8}},
{kCDXProp_Atom_Translation, {"Translation", ECDXType::CDXINT8}},
{kCDXProp_Atom_AtomNumber, {"AtomNumber", ECDXType::CDXString}},
{kCDXProp_Atom_ShowQuery, {"ShowAtomQuery", ECDXType::CDXBoolean}},
{kCDXProp_Atom_ShowStereo, {"ShowAtomStereo", ECDXType::CDXBoolean}},
{kCDXProp_Atom_ShowAtomNumber, {"ShowAtomNumber", ECDXType::CDXBoolean}},
{kCDXProp_Atom_LinkCountLow, {"LinkCountLow", ECDXType::CDXINT16}},
{kCDXProp_Atom_LinkCountHigh, {"LinkCountHigh", ECDXType::CDXINT16}},
{kCDXProp_Atom_IsotopicAbundance, {"IsotopicAbundance", ECDXType::CDXINT8}},
{kCDXProp_Atom_ExternalConnectionType, {"ExternalConnectionType", ECDXType::CDXINT8}},
{kCDXProp_Atom_GenericList, {"GenericList", ECDXType::CDXGenericList}},
{kCDXProp_Atom_ShowTerminalCarbonLabels, {"ShowTerminalCarbonLabels", ECDXType::CDXBooleanImplied}},
{kCDXProp_Atom_ShowNonTerminalCarbonLabels, {"ShowNonTerminalCarbonLabels", ECDXType::CDXBooleanImplied}},
{kCDXProp_Atom_HideImplicitHydrogens, {"HideImplicitHydrogens", ECDXType::CDXBooleanImplied}},
{kCDXProp_Atom_ShowEnhancedStereo, {"ShowAtomEnhancedStereo", ECDXType::CDXBoolean}},
{kCDXProp_Atom_EnhancedStereoType, {"EnhancedStereoType", ECDXType::CDXUINT8}},
{kCDXProp_Atom_EnhancedStereoGroupNum, {"EnhancedStereoGroupNum", ECDXType::CDXUINT16}},
{kCDXProp_ShowResidueID, {"ShowResidueID", ECDXType::CDXBoolean}},
{kCDXProp_Mole_Racemic, {"Racemic", ECDXType::CDXBoolean}},
{kCDXProp_Mole_Absolute, {"Absolute", ECDXType::CDXBoolean}},
{kCDXProp_Mole_Relative, {"Relative", ECDXType::CDXBoolean}},
{kCDXProp_Mole_Formula, {"Formula", ECDXType::CDXFormula}},
{kCDXProp_Mole_Weight, {"Weight", ECDXType::CDXFLOAT64}},
{kCDXProp_Frag_ConnectionOrder, {"ConnectionOrder", ECDXType::CDXObjectIDArray}},
{kCDXProp_Bond_Order, {"Order", ECDXType::CDXINT16}},
{kCDXProp_Bond_Display, {"Display", ECDXType::CDXINT16}},
{kCDXProp_Bond_Display2, {"Display2", ECDXType::CDXINT16}},
{kCDXProp_Bond_DoublePosition, {"DoublePosition", ECDXType::CDXINT16}},
{kCDXProp_Bond_Begin, {"B", ECDXType::CDXObjectID}},
{kCDXProp_Bond_End, {"E", ECDXType::CDXObjectID}},
{kCDXProp_Bond_RestrictTopology, {"Topology", ECDXType::CDXINT8}},
{kCDXProp_Bond_RestrictRxnParticipation, {"RxnParticipation", ECDXType::CDXINT8}},
{kCDXProp_Bond_BeginAttach, {"BeginAttach", ECDXType::CDXUINT8}},
{kCDXProp_Bond_EndAttach, {"EndAttach", ECDXType::CDXUINT8}},
{kCDXProp_Bond_CIPStereochemistry, {"BS", ECDXType::CDXINT8}},
{kCDXProp_Bond_BondOrdering, {"BondCircularOrdering", ECDXType::CDXObjectIDArray}},
{kCDXProp_Bond_ShowQuery, {"ShowBondQuery", ECDXType::CDXBoolean}},
{kCDXProp_Bond_ShowStereo, {"ShowBondStereo", ECDXType::CDXBoolean}},
{kCDXProp_Bond_CrossingBonds, {"CrossingBonds", ECDXType::CDXObjectIDArray}},
{kCDXProp_Bond_ShowRxn, {"ShowBondRxn", ECDXType::CDXBoolean}},
{kCDXProp_Text, {"t", ECDXType::CDXString}},
{kCDXProp_Justification, {"Justification", ECDXType::CDXINT8}},
{kCDXProp_LineHeight, {"LineHeight", ECDXType::CDXUINT16}},
{kCDXProp_WordWrapWidth, {"WordWrapWidth", ECDXType::CDXINT16}},
{kCDXProp_LineStarts, {"LineStarts", ECDXType::CDXINT16ListWithCounts}},
{kCDXProp_LabelAlignment, {"LabelAlignment", ECDXType::CDXINT8}},
{kCDXProp_LabelLineHeight, {"LabelLineHeight", ECDXType::CDXINT16}},
{kCDXProp_CaptionLineHeight, {"CaptionLineHeight", ECDXType::CDXINT16}},
{kCDXProp_InterpretChemically, {"InterpretChemically", ECDXType::CDXBooleanImplied}},
{kCDXProp_MacPrintInfo, {"MacPrintInfo", ECDXType::CDXUnformatted}},
{kCDXProp_WinPrintInfo, {"WinPrintInfo", ECDXType::CDXUnformatted}},
{kCDXProp_PrintMargins, {"PrintMargins", ECDXType::CDXRectangle}},
{kCDXProp_ChainAngle, {"ChainAngle", ECDXType::CDXINT32}},
{kCDXProp_BondSpacing, {"BondSpacing", ECDXType::CDXINT16}},
{kCDXProp_BondLength, {"BondLength", ECDXType::CDXCoordinate}},
{kCDXProp_BoldWidth, {"BoldWidth", ECDXType::CDXCoordinate}},
{kCDXProp_LineWidth, {"LineWidth", ECDXType::CDXCoordinate}},
{kCDXProp_MarginWidth, {"MarginWidth", ECDXType::CDXCoordinate}},
{kCDXProp_HashSpacing, {"HashSpacing", ECDXType::CDXCoordinate}},
{kCDXProp_LabelStyle, {"LabelStyle", ECDXType::CDXFontStyle}},
{kCDXProp_CaptionStyle, {"CaptionStyle", ECDXType::CDXFontStyle}},
{kCDXProp_CaptionJustification, {"CaptionJustification", ECDXType::CDXINT8}},
{kCDXProp_FractionalWidths, {"FractionalWidths", ECDXType::CDXBooleanImplied}},
{kCDXProp_Magnification, {"Magnification", ECDXType::CDXINT16}},
{kCDXProp_WidthPages, {"WidthPages", ECDXType::CDXINT16}},
{kCDXProp_HeightPages, {"HeightPages", ECDXType::CDXINT16}},
{kCDXProp_DrawingSpaceType, {"DrawingSpace", ECDXType::CDXINT8}},
{kCDXProp_Width, {"Width", ECDXType::CDXCoordinate}},
{kCDXProp_Height, {"Height", ECDXType::CDXCoordinate}},
{kCDXProp_PageOverlap, {"PageOverlap", ECDXType::CDXCoordinate}},
{kCDXProp_Header, {"Header", ECDXType::CDXString}},
{kCDXProp_HeaderPosition, {"HeaderPosition", ECDXType::CDXCoordinate}},
{kCDXProp_Footer, {"Footer", ECDXType::CDXString}},
{kCDXProp_FooterPosition, {"FooterPosition", ECDXType::CDXCoordinate}},
{kCDXProp_PrintTrimMarks, {"PrintTrimMarks", ECDXType::CDXBooleanImplied}},
{kCDXProp_LabelStyleFont, {"LabelFont", ECDXType::CDXINT16}},
{kCDXProp_CaptionStyleFont, {"CaptionFont", ECDXType::CDXINT16}},
{kCDXProp_LabelStyleSize, {"LabelSize", ECDXType::CDXINT16}},
{kCDXProp_CaptionStyleSize, {"CaptionSize", ECDXType::CDXINT16}},
{kCDXProp_LabelStyleFace, {"LabelFace", ECDXType::CDXINT16}},
{kCDXProp_CaptionStyleFace, {"CaptionFace", ECDXType::CDXINT16}},
{kCDXProp_LabelStyleColor, {"LabelColor", ECDXType::CDXINT16}},
{kCDXProp_CaptionStyleColor, {"CaptionColor", ECDXType::CDXINT16}},
{kCDXProp_BondSpacingAbs, {"BondSpacingAbs", ECDXType::CDXCoordinate}},
{kCDXProp_LabelJustification, {"LabelJustification", ECDXType::CDXINT8}},
{kCDXProp_FixInplaceExtent, {"FixInPlaceExtent", ECDXType::CDXPoint2D}},
{kCDXProp_Side, {"Side", ECDXType::CDXUINT16}},
{kCDXProp_FixInplaceGap, {"FixInPlaceGap", ECDXType::CDXPoint2D}},
{kCDXProp_CartridgeData, {"CartridgeData", ECDXType::CDXUnformatted}},
{kCDXProp_AminoAcidTermini, {"AminoAcidTermini", ECDXType::CDXINT8}}, // values are undocumented
{kCDXProp_ShowSequenceTermini, {"ShowSequenceTermini", ECDXType::CDXBooleanImplied}},
{kCDXProp_ShowSequenceBonds, {"ShowSequenceBonds", ECDXType::CDXBooleanImplied}},
{kCDXProp_ResidueWrapCount, {"ResidueWrapCount", ECDXType::CDXINT8}},
{kCDXProp_ResidueBlockCount, {"ResidueBlockCount", ECDXType::CDXINT8}},
{kCDXProp_ResidueZigZag, {"ResidueZigZag", ECDXType::CDXBooleanImplied}},
{kCDXProp_NumberResidueBlocks, {"NumberResidueBlocks", ECDXType::CDXBooleanImplied}},
{kCDXProp_BondSpacingType, {"BondSpacingType", ECDXType::CDXINT8}},
{kCDXProp_LabelStyleFontName, {"LabelStyleFontName", ECDXType::CDXString}},
{kCDXProp_CaptionStyleFontName, {"CaptionStyleFontName", ECDXType::CDXString}},
{kCDXProp_ShowSequenceUnlinkedBranches, {"ShowSequenceUnlinkedBranches", ECDXType::CDXBooleanImplied}},
{kCDXProp_Window_IsZoomed, {"WindowIsZoomed", ECDXType::CDXBooleanImplied}},
{kCDXProp_Window_Position, {"WindowPosition", ECDXType::CDXPoint2D}},
{kCDXProp_Window_Size, {"WindowSize", ECDXType::CDXPoint2D}},
{kCDXProp_Graphic_Type, {"GraphicType", ECDXType::CDXINT16}},
{kCDXProp_Line_Type, {"LineType", ECDXType::CDXINT16}},
{kCDXProp_Arrow_Type, {"ArrowType", ECDXType::CDXINT16}},
{kCDXProp_Rectangle_Type, {"RectangleType", ECDXType::CDXINT16}},
{kCDXProp_Oval_Type, {"OvalType", ECDXType::CDXINT16}},
{kCDXProp_Orbital_Type, {"OrbitalType", ECDXType::CDXINT16}},
{kCDXProp_Bracket_Type, {"BracketType", ECDXType::CDXINT16}},
{kCDXProp_Symbol_Type, {"SymbolType", ECDXType::CDXINT16}},
{kCDXProp_Curve_Type, {"CurveType", ECDXType::CDXINT16}},
{kCDXProp_Arrow_HeadSize, {"HeadSize", ECDXType::CDXINT16}},
{kCDXProp_Arc_AngularSize, {"AngularSize", ECDXType::CDXINT16}},
{kCDXProp_Bracket_LipSize, {"LipSize", ECDXType::CDXINT16}},
{kCDXProp_Curve_Points, {"CurvePoints", ECDXType::CDXCurvePoints}},
{kCDXProp_Bracket_Usage, {"BracketUsage", ECDXType::CDXINT8}},
{kCDXProp_Polymer_RepeatPattern, {"PolymerRepeatPattern", ECDXType::CDXINT8}},
{kCDXProp_Polymer_FlipType, {"PolymerFlipType", ECDXType::CDXINT8}},
{kCDXProp_BracketedObjects, {"BracketedObjectIDs", ECDXType::CDXObjectIDArray}},
{kCDXProp_Bracket_RepeatCount, {"RepeatCount", ECDXType::CDXFLOAT64}},
{kCDXProp_Bracket_ComponentOrder, {"ComponentOrder", ECDXType::CDXINT16}},
{kCDXProp_Bracket_SRULabel, {"SRULabel", ECDXType::CDXString}},
{kCDXProp_Bracket_GraphicID, {"GraphicID", ECDXType::CDXObjectID}},
{kCDXProp_Bracket_BondID, {"BondID", ECDXType::CDXObjectID}},
{kCDXProp_Bracket_InnerAtomID, {"InnerAtomID", ECDXType::CDXObjectID}},
{kCDXProp_Curve_Points3D, {"CurvePoints3D", ECDXType::CDXCurvePoints3D}},
{kCDXProp_Arrowhead_Type, {"ArrowheadType", ECDXType::CDXINT16}},
{kCDXProp_Arrowhead_CenterSize, {"ArrowheadCenterSize", ECDXType::CDXUINT16}},
{kCDXProp_Arrowhead_Width, {"ArrowheadWidth", ECDXType::CDXUINT16}},
{kCDXProp_ShadowSize, {"ShadowSize", ECDXType::CDXUINT16}},
{kCDXProp_Arrow_ShaftSpacing, {"ArrowShaftSpacing", ECDXType::CDXUINT16}},
{kCDXProp_Arrow_EquilibriumRatio, {"ArrowEquilibriumRatio", ECDXType::CDXUINT16}},
{kCDXProp_Arrow_ArrowHead_Head, {"ArrowheadHead", ECDXType::CDXINT16}},
{kCDXProp_Arrow_ArrowHead_Tail, {"ArrowheadTail", ECDXType::CDXINT16}},
{kCDXProp_Fill_Type, {"FillType", ECDXType::CDXINT16}},
{kCDXProp_Curve_Spacing, {"CurveSpacing", ECDXType::CDXUINT16}},
{kCDXProp_Closed, {"Closed", ECDXType::CDXBoolean}},
{kCDXProp_Arrow_Dipole, {"Dipole", ECDXType::CDXBoolean}},
{kCDXProp_Arrow_NoGo, {"NoGo", ECDXType::CDXINT8}},
{kCDXProp_CornerRadius, {"CornerRadius", ECDXType::CDXINT16}},
{kCDXProp_Frame_Type, {"FrameType", ECDXType::CDXINT16}},
{kCDXProp_Picture_Edition, {"Edition", ECDXType::CDXUnformatted}},
{kCDXProp_Picture_EditionAlias, {"EditionAlias", ECDXType::CDXUnformatted}},
{kCDXProp_MacPICT, {"MacPICT", ECDXType::CDXUnformatted}},
{kCDXProp_WindowsMetafile, {"WindowsMetafile", ECDXType::CDXUnformatted}},
{kCDXProp_OLEObject, {"OLEObject", ECDXType::CDXUnformatted}},
{kCDXProp_EnhancedMetafile, {"EnhancedMetafile", ECDXType::CDXUnformatted}},
{kCDXProp_GIF, {"GIF", ECDXType::CDXUnformatted}},
{kCDXProp_TIFF, {"TIFF", ECDXType::CDXUnformatted}},
{kCDXProp_PNG, {"PNG", ECDXType::CDXUnformatted}},
{kCDXProp_JPEG, {"JPEG", ECDXType::CDXUnformatted}},
{kCDXProp_BMP, {"BMP", ECDXType::CDXUnformatted}},
{kCDXProp_Spectrum_XSpacing, {"XSpacing", ECDXType::CDXFLOAT64}},
{kCDXProp_Spectrum_XLow, {"XLow", ECDXType::CDXFLOAT64}},
{kCDXProp_Spectrum_XType, {"XType", ECDXType::CDXINT16}},
{kCDXProp_Spectrum_YType, {"YType", ECDXType::CDXINT16}},
{kCDXProp_Spectrum_XAxisLabel, {"XAxisLabel", ECDXType::CDXString}},
{kCDXProp_Spectrum_YAxisLabel, {"YAxisLabel", ECDXType::CDXString}},
{kCDXProp_Spectrum_Class, {"Class", ECDXType::CDXINT16}},
{kCDXProp_Spectrum_YLow, {"YLow", ECDXType::CDXFLOAT64}},
{kCDXProp_Spectrum_YScale, {"YScale", ECDXType::CDXFLOAT64}},
{kCDXProp_TLC_OriginFraction, {"OriginFraction", ECDXType::CDXFLOAT64}},
{kCDXProp_TLC_SolventFrontFraction, {"SolventFrontFraction", ECDXType::CDXFLOAT64}},
{kCDXProp_TLC_ShowOrigin, {"ShowOrigin", ECDXType::CDXBoolean}},
{kCDXProp_TLC_ShowSolventFront, {"ShowSolventFront", ECDXType::CDXBoolean}},
{kCDXProp_TLC_ShowBorders, {"ShowBorders", ECDXType::CDXBoolean}},
{kCDXProp_TLC_ShowSideTicks, {"ShowSideTicks", ECDXType::CDXBoolean}},
{kCDXProp_TLC_Rf, {"Rf", ECDXType::CDXFLOAT64}},
{kCDXProp_TLC_Tail, {"Tail", ECDXType::CDXCoordinate}},
{kCDXProp_TLC_ShowRf, {"ShowRf", ECDXType::CDXBoolean}},
{kCDXProp_NamedAlternativeGroup_TextFrame, {"TextFrame", ECDXType::CDXRectangle}},
{kCDXProp_NamedAlternativeGroup_GroupFrame, {"GroupFrame", ECDXType::CDXRectangle}},
{kCDXProp_NamedAlternativeGroup_Valence, {"Valence", ECDXType::CDXINT16}},
{kCDXProp_GeometricFeature, {"GeometricFeature", ECDXType::CDXINT8}},
{kCDXProp_RelationValue, {"RelationValue", ECDXType::CDXFLOAT64}},
{kCDXProp_BasisObjects, {"BasisObjects", ECDXType::CDXObjectIDArray}},
{kCDXProp_ConstraintType, {"ConstraintType", ECDXType::CDXINT8}},
{kCDXProp_ConstraintMin, {"ConstraintMin", ECDXType::CDXFLOAT64}},
{kCDXProp_ConstraintMax, {"ConstraintMax", ECDXType::CDXFLOAT64}},
{kCDXProp_IgnoreUnconnectedAtoms, {"IgnoreUnconnectedAtoms", ECDXType::CDXBooleanImplied}},
{kCDXProp_DihedralIsChiral, {"DihedralIsChiral", ECDXType::CDXBooleanImplied}},
{kCDXProp_PointIsDirected, {"PointIsDirected", ECDXType::CDXBooleanImplied}},
{kCDXProp_ChemicalPropertyType, {"ChemicalPropertyType", ECDXType::CDXUINT32}},
{kCDXProp_ChemicalPropertyDisplayID, {"ChemicalPropertyDisplayID", ECDXType::CDXObjectID}},
{kCDXProp_ChemicalPropertyIsActive, {"ChemicalPropertyIsActive", ECDXType::CDXBoolean}},
{kCDXProp_ChemicalPropertyName, {"ChemPropName", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyFormula, {"ChemPropFormula", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyExactMass, {"ChemPropExactMass", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyMolWeight, {"ChemPropMolWt", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyMOverZ, {"ChemPropMOverZ", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyAnalysis, {"ChemPropAnalysis", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyBoilingPoint, {"ChemPropBoilingPt", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyMeltingPoint, {"ChemPropMeltingPt", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyCriticalTemp, {"ChemPropCritTemp", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyCriticalPressure, {"ChemPropCritPres", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyCriticalVolume, {"ChemPropCritVol", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyGibbsEnergy, {"ChemPropGibbs", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyLogP, {"ChemPropLogP", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyMR, {"ChemPropMR", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyHenrysLaw, {"ChemPropHenry", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyHeatOfForm, {"ChemPropEForm", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertytPSA, {"ChemProptPSA", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyCLogP, {"ChemPropCLogP", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyCMR, {"ChemPropCMR", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyLogS, {"ChemPropLogS", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyPKa, {"ChemPropPKa", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyID, {"ChemPropID", ECDXType::CDXString}},
{kCDXProp_ChemicalPropertyFragmentLabel, {"ChemPropFragmentLabel", ECDXType::CDXString}},
{kCDXProp_ReactionStep_Atom_Map, {"ReactionStepAtomMap", ECDXType::CDXObjectIDArray}},
{kCDXProp_ReactionStep_Reactants, {"ReactionStepReactants", ECDXType::CDXObjectIDArray}},
{kCDXProp_ReactionStep_Products, {"ReactionStepProducts", ECDXType::CDXObjectIDArray}},
{kCDXProp_ReactionStep_Plusses, {"ReactionStepPlusses", ECDXType::CDXObjectIDArray}},
{kCDXProp_ReactionStep_Arrows, {"ReactionStepArrows", ECDXType::CDXObjectIDArray}},
{kCDXProp_ReactionStep_ObjectsAboveArrow, {"ReactionStepObjectsAboveArrow", ECDXType::CDXObjectIDArray}},
{kCDXProp_ReactionStep_ObjectsBelowArrow, {"ReactionStepObjectsBelowArrow", ECDXType::CDXObjectIDArray}},
{kCDXProp_ReactionStep_Atom_Map_Manual, {"ReactionStepAtomMapManual", ECDXType::CDXObjectIDArray}},
{kCDXProp_ReactionStep_Atom_Map_Auto, {"ReactionStepAtomMapAuto", ECDXType::CDXObjectIDArray}},
{kCDXProp_RxnAutonumber_Style, {"RxnAutonumberStyle", ECDXType::CDXINT16}},
{kCDXProp_RxnAutonumber_Conditions, {"RxnAutonumberConditions", ECDXType::CDXBoolean}},
{kCDXProp_RxnAutonumber_Start, {"RxnAutonumberStart", ECDXType::CDXINT16}},
{kCDXProp_RxnAutonumber_Format, {"RxnAutonumberFormat", ECDXType::CDXString}},
{kCDXProp_ObjectTag_Type, {"TagType", ECDXType::CDXINT16}},
{kCDXProp_ObjectTag_Tracking, {"Tracking", ECDXType::CDXBoolean}},
{kCDXProp_ObjectTag_Persistent, {"Persistent", ECDXType::CDXBoolean}},
{kCDXProp_ObjectTag_Value, {"Value", ECDXType::CDXvaries}},
{kCDXProp_Positioning, {"PositioningType", ECDXType::CDXINT8}},
{kCDXProp_PositioningAngle, {"PositioningAngle", ECDXType::CDXINT32}},
{kCDXProp_PositioningOffset, {"PositioningOffset", ECDXType::CDXPoint2D}},
{kCDXProp_Sequence_Identifier, {"SequenceIdentifier", ECDXType::CDXString}},
{kCDXProp_CrossReference_Container, {"CrossReferenceContainer", ECDXType::CDXString}},
{kCDXProp_CrossReference_Document, {"CrossReferenceDocument", ECDXType::CDXString}},
{kCDXProp_CrossReference_Identifier, {"CrossReferenceIdentifier", ECDXType::CDXString}},
{kCDXProp_CrossReference_Sequence, {"CrossReferenceSequence", ECDXType::CDXString}},
{kCDXProp_Template_PaneHeight, {"PaneHeight", ECDXType::CDXCoordinate}},
{kCDXProp_Template_NumRows, {"NumRows", ECDXType::CDXINT16}},
{kCDXProp_Template_NumColumns, {"NumColumns", ECDXType::CDXINT16}},
{kCDXProp_Group_Integral, {"Integral", ECDXType::CDXBoolean}},
{kCDXProp_SplitterPositions, {"SplitterPositions", ECDXType::CDXObjectIDArray}},
{kCDXProp_PageDefinition, {"PageDefinition", ECDXType::CDXINT8}}};
const std::unordered_map<std::string, std::pair<uint16_t, ECDXType>> KCDXNameToProp = {
{"CreationUserName", {kCDXProp_CreationUserName, ECDXType::CDXString}},
{"CreationDate", {kCDXProp_CreationDate, ECDXType::CDXDate}},
{"CreationProgram", {kCDXProp_CreationProgram, ECDXType::CDXString}},
{"ModificationUserName", {kCDXProp_ModificationUserName, ECDXType::CDXString}},
{"ModificationDate", {kCDXProp_ModificationDate, ECDXType::CDXDate}},
{"ModificationProgram", {kCDXProp_ModificationProgram, ECDXType::CDXString}},
{"Name", {kCDXProp_Name, ECDXType::CDXString}},
{"Comment", {kCDXProp_Comment, ECDXType::CDXString}},
{"Z", {kCDXProp_ZOrder, ECDXType::CDXINT16}},
{"RegistryNumber", {kCDXProp_RegistryNumber, ECDXType::CDXString}},
{"RegistryAuthority", {kCDXProp_RegistryAuthority, ECDXType::CDXString}},
{"RepresentsProperty", {kCDXProp_RepresentsProperty, ECDXType::CDXRepresentsProperty}},
{"IgnoreWarnings", {kCDXProp_IgnoreWarnings, ECDXType::CDXBooleanImplied}},
{"Warning", {kCDXProp_ChemicalWarning, ECDXType::CDXString}},
{"Visible", {kCDXProp_Visible, ECDXType::CDXBoolean}},
{"SupersededBy", {kCDXProp_SupersededBy, ECDXType::CDXObjectID}},
{"fonttable", {kCDXProp_FontTable, ECDXType::CDXFontTable}},
{"p", {kCDXProp_2DPosition, ECDXType::CDXPoint2D}},
{"xyz", {kCDXProp_3DPosition, ECDXType::CDXPoint3D}},
{"extent", {kCDXProp_2DExtent, ECDXType::CDXPoint2D}},
{"extent3D", {kCDXProp_3DExtent, ECDXType::CDXPoint3D}},
{"BoundingBox", {kCDXProp_BoundingBox, ECDXType::CDXRectangle}},
{"RotationAngle", {kCDXProp_RotationAngle, ECDXType::CDXINT32}},
{"Head3D", {kCDXProp_3DHead, ECDXType::CDXPoint3D}},
{"Tail3D", {kCDXProp_3DTail, ECDXType::CDXPoint3D}},
{"TopLeft", {kCDXProp_TopLeft, ECDXType::CDXPoint2D}},
{"TopRight", {kCDXProp_TopRight, ECDXType::CDXPoint2D}},
{"BottomRight", {kCDXProp_BottomRight, ECDXType::CDXPoint2D}},
{"BottomLeft", {kCDXProp_BottomLeft, ECDXType::CDXPoint2D}},
{"Center3D", {kCDXProp_3DCenter, ECDXType::CDXPoint3D}},
{"MajorAxisEnd3D", {kCDXProp_3DMajorAxisEnd, ECDXType::CDXPoint3D}},
{"MinorAxisEnd3D", {kCDXProp_3DMinorAxisEnd, ECDXType::CDXPoint3D}},
{"colortable", {kCDXProp_ColorTable, ECDXType::CDXColorTable}},
{"color", {kCDXProp_ForegroundColor, ECDXType::CDXUINT16}},
{"bgcolor", {kCDXProp_BackgroundColor, ECDXType::CDXUINT16}},
{"NodeType", {kCDXProp_Node_Type, ECDXType::CDXINT16}},
{"LabelDisplay", {kCDXProp_Node_LabelDisplay, ECDXType::CDXINT8}},
{"Element", {kCDXProp_Node_Element, ECDXType::CDXINT16}},
{"ElementList", {kCDXProp_Atom_ElementList, ECDXType::CDXElementList}},
{"Formula", {kCDXProp_Atom_Formula, ECDXType::CDXFormula}},
{"Isotope", {kCDXProp_Atom_Isotope, ECDXType::CDXINT16}},
{"Charge", {kCDXProp_Atom_Charge, ECDXType::CDXINT8}},
{"Radical", {kCDXProp_Atom_Radical, ECDXType::CDXUINT8}},
{"FreeSites", {kCDXProp_Atom_RestrictFreeSites, ECDXType::CDXUINT8}},
{"ImplicitHydrogens", {kCDXProp_Atom_RestrictImplicitHydrogens, ECDXType::CDXBooleanImplied}},
{"RingBondCount", {kCDXProp_Atom_RestrictRingBondCount, ECDXType::CDXINT8}},
{"UnsaturatedBonds", {kCDXProp_Atom_RestrictUnsaturatedBonds, ECDXType::CDXINT8}},
{"RxnChange", {kCDXProp_Atom_RestrictRxnChange, ECDXType::CDXBooleanImplied}},
{"RxnStereo", {kCDXProp_Atom_RestrictRxnStereo, ECDXType::CDXINT8}},
{"AbnormalValence", {kCDXProp_Atom_AbnormalValence, ECDXType::CDXBooleanImplied}},
{"NumHydrogens", {kCDXProp_Atom_NumHydrogens, ECDXType::CDXUINT16}},
{"HDot", {kCDXProp_Atom_HDot, ECDXType::CDXBooleanImplied}},
{"HDash", {kCDXProp_Atom_HDash, ECDXType::CDXBooleanImplied}},
{"Geometry", {kCDXProp_Atom_Geometry, ECDXType::CDXINT8}},
{"BondOrdering", {kCDXProp_Atom_BondOrdering, ECDXType::CDXObjectIDArray}},
{"Attachments", {kCDXProp_Node_Attachments, ECDXType::CDXObjectIDArrayWithCounts}},
{"GenericNickname", {kCDXProp_Atom_GenericNickname, ECDXType::CDXString}},
{"AltGroupID", {kCDXProp_Atom_AltGroupID, ECDXType::CDXObjectID}},
{"SubstituentsUpTo", {kCDXProp_Atom_RestrictSubstituentsUpTo, ECDXType::CDXUINT8}},
{"SubstituentsExactly", {kCDXProp_Atom_RestrictSubstituentsExactly, ECDXType::CDXUINT8}},
{"AS", {kCDXProp_Atom_CIPStereochemistry, ECDXType::CDXINT8}},
{"Translation", {kCDXProp_Atom_Translation, ECDXType::CDXINT8}},
{"AtomNumber", {kCDXProp_Atom_AtomNumber, ECDXType::CDXString}},
{"ShowAtomQuery", {kCDXProp_Atom_ShowQuery, ECDXType::CDXBoolean}},
{"ShowAtomStereo", {kCDXProp_Atom_ShowStereo, ECDXType::CDXBoolean}},
{"ShowAtomNumber", {kCDXProp_Atom_ShowAtomNumber, ECDXType::CDXBoolean}},
{"LinkCountLow", {kCDXProp_Atom_LinkCountLow, ECDXType::CDXINT16}},
{"LinkCountHigh", {kCDXProp_Atom_LinkCountHigh, ECDXType::CDXINT16}},
{"IsotopicAbundance", {kCDXProp_Atom_IsotopicAbundance, ECDXType::CDXINT8}},
{"ExternalConnectionType", {kCDXProp_Atom_ExternalConnectionType, ECDXType::CDXINT8}},
{"GenericList", {kCDXProp_Atom_GenericList, ECDXType::CDXGenericList}},
{"ShowTerminalCarbonLabels", {kCDXProp_Atom_ShowTerminalCarbonLabels, ECDXType::CDXBooleanImplied}},
{"ShowNonTerminalCarbonLabels", {kCDXProp_Atom_ShowNonTerminalCarbonLabels, ECDXType::CDXBooleanImplied}},
{"HideImplicitHydrogens", {kCDXProp_Atom_HideImplicitHydrogens, ECDXType::CDXBooleanImplied}},
{"ShowAtomEnhancedStereo", {kCDXProp_Atom_ShowEnhancedStereo, ECDXType::CDXBoolean}},
{"EnhancedStereoType", {kCDXProp_Atom_EnhancedStereoType, ECDXType::CDXUINT8}},
{"EnhancedStereoGroupNum", {kCDXProp_Atom_EnhancedStereoGroupNum, ECDXType::CDXUINT16}},
{"ShowResidueID", {kCDXProp_ShowResidueID, ECDXType::CDXBoolean}},
{"Racemic", {kCDXProp_Mole_Racemic, ECDXType::CDXBoolean}},
{"Absolute", {kCDXProp_Mole_Absolute, ECDXType::CDXBoolean}},
{"Relative", {kCDXProp_Mole_Relative, ECDXType::CDXBoolean}},
{"Formula", {kCDXProp_Mole_Formula, ECDXType::CDXFormula}},
{"Weight", {kCDXProp_Mole_Weight, ECDXType::CDXFLOAT64}},
{"ConnectionOrder", {kCDXProp_Frag_ConnectionOrder, ECDXType::CDXObjectIDArray}},
{"Order", {kCDXProp_Bond_Order, ECDXType::CDXINT16}},
{"Display", {kCDXProp_Bond_Display, ECDXType::CDXINT16}},
{"Display2", {kCDXProp_Bond_Display2, ECDXType::CDXINT16}},
{"DoublePosition", {kCDXProp_Bond_DoublePosition, ECDXType::CDXINT16}},
{"B", {kCDXProp_Bond_Begin, ECDXType::CDXObjectID}},
{"E", {kCDXProp_Bond_End, ECDXType::CDXObjectID}},
{"Topology", {kCDXProp_Bond_RestrictTopology, ECDXType::CDXINT8}},
{"RxnParticipation", {kCDXProp_Bond_RestrictRxnParticipation, ECDXType::CDXINT8}},
{"BeginAttach", {kCDXProp_Bond_BeginAttach, ECDXType::CDXUINT8}},
{"EndAttach", {kCDXProp_Bond_EndAttach, ECDXType::CDXUINT8}},
{"BS", {kCDXProp_Bond_CIPStereochemistry, ECDXType::CDXINT8}},
{"BondCircularOrdering", {kCDXProp_Bond_BondOrdering, ECDXType::CDXObjectIDArray}},
{"ShowBondQuery", {kCDXProp_Bond_ShowQuery, ECDXType::CDXBoolean}},
{"ShowBondStereo", {kCDXProp_Bond_ShowStereo, ECDXType::CDXBoolean}},
{"CrossingBonds", {kCDXProp_Bond_CrossingBonds, ECDXType::CDXObjectIDArray}},
{"ShowBondRxn", {kCDXProp_Bond_ShowRxn, ECDXType::CDXBoolean}},
{"t", {kCDXProp_Text, ECDXType::CDXString}},
{"Justification", {kCDXProp_Justification, ECDXType::CDXINT8}},
{"LineHeight", {kCDXProp_LineHeight, ECDXType::CDXUINT16}},
{"WordWrapWidth", {kCDXProp_WordWrapWidth, ECDXType::CDXINT16}},
{"LineStarts", {kCDXProp_LineStarts, ECDXType::CDXINT16ListWithCounts}},
{"LabelAlignment", {kCDXProp_LabelAlignment, ECDXType::CDXINT8}},
{"LabelLineHeight", {kCDXProp_LabelLineHeight, ECDXType::CDXINT16}},
{"CaptionLineHeight", {kCDXProp_CaptionLineHeight, ECDXType::CDXINT16}},
{"InterpretChemically", {kCDXProp_InterpretChemically, ECDXType::CDXBooleanImplied}},
{"MacPrintInfo", {kCDXProp_MacPrintInfo, ECDXType::CDXUnformatted}},
{"WinPrintInfo", {kCDXProp_WinPrintInfo, ECDXType::CDXUnformatted}},
{"PrintMargins", {kCDXProp_PrintMargins, ECDXType::CDXRectangle}},
{"ChainAngle", {kCDXProp_ChainAngle, ECDXType::CDXINT32}},
{"BondSpacing", {kCDXProp_BondSpacing, ECDXType::CDXINT16}},
{"BondLength", {kCDXProp_BondLength, ECDXType::CDXCoordinate}},
{"BoldWidth", {kCDXProp_BoldWidth, ECDXType::CDXCoordinate}},
{"LineWidth", {kCDXProp_LineWidth, ECDXType::CDXCoordinate}},
{"MarginWidth", {kCDXProp_MarginWidth, ECDXType::CDXCoordinate}},
{"HashSpacing", {kCDXProp_HashSpacing, ECDXType::CDXCoordinate}},
{"LabelStyle", {kCDXProp_LabelStyle, ECDXType::CDXFontStyle}},
{"CaptionStyle", {kCDXProp_CaptionStyle, ECDXType::CDXFontStyle}},
{"CaptionJustification", {kCDXProp_CaptionJustification, ECDXType::CDXINT8}},
{"FractionalWidths", {kCDXProp_FractionalWidths, ECDXType::CDXBooleanImplied}},
{"Magnification", {kCDXProp_Magnification, ECDXType::CDXINT16}},
{"WidthPages", {kCDXProp_WidthPages, ECDXType::CDXINT16}},
{"HeightPages", {kCDXProp_HeightPages, ECDXType::CDXINT16}},
{"DrawingSpace", {kCDXProp_DrawingSpaceType, ECDXType::CDXINT8}},
{"Width", {kCDXProp_Width, ECDXType::CDXCoordinate}},
{"Height", {kCDXProp_Height, ECDXType::CDXCoordinate}},
{"PageOverlap", {kCDXProp_PageOverlap, ECDXType::CDXCoordinate}},
{"Header", {kCDXProp_Header, ECDXType::CDXString}},
{"HeaderPosition", {kCDXProp_HeaderPosition, ECDXType::CDXCoordinate}},
{"Footer", {kCDXProp_Footer, ECDXType::CDXString}},
{"FooterPosition", {kCDXProp_FooterPosition, ECDXType::CDXCoordinate}},
{"PrintTrimMarks", {kCDXProp_PrintTrimMarks, ECDXType::CDXBooleanImplied}},
{"LabelFont", {kCDXProp_LabelStyleFont, ECDXType::CDXINT16}},
{"CaptionFont", {kCDXProp_CaptionStyleFont, ECDXType::CDXINT16}},
{"LabelSize", {kCDXProp_LabelStyleSize, ECDXType::CDXINT16}},
{"CaptionSize", {kCDXProp_CaptionStyleSize, ECDXType::CDXINT16}},
{"LabelFace", {kCDXProp_LabelStyleFace, ECDXType::CDXINT16}},
{"CaptionFace", {kCDXProp_CaptionStyleFace, ECDXType::CDXINT16}},
{"LabelColor", {kCDXProp_LabelStyleColor, ECDXType::CDXINT16}},
{"CaptionColor", {kCDXProp_CaptionStyleColor, ECDXType::CDXINT16}},
{"BondSpacingAbs", {kCDXProp_BondSpacingAbs, ECDXType::CDXCoordinate}},
{"LabelJustification", {kCDXProp_LabelJustification, ECDXType::CDXINT8}},
{"FixInPlaceExtent", {kCDXProp_FixInplaceExtent, ECDXType::CDXPoint2D}},
{"Side", {kCDXProp_Side, ECDXType::CDXUINT16}},
{"FixInPlaceGap", {kCDXProp_FixInplaceGap, ECDXType::CDXPoint2D}},
{"CartridgeData", {kCDXProp_CartridgeData, ECDXType::CDXUnformatted}},
{"AminoAcidTermini", {kCDXProp_AminoAcidTermini, ECDXType::CDXINT8}},
{"ShowSequenceTermini", {kCDXProp_ShowSequenceTermini, ECDXType::CDXBooleanImplied}},
{"ShowSequenceBonds", {kCDXProp_ShowSequenceBonds, ECDXType::CDXBooleanImplied}},
{"ResidueWrapCount", {kCDXProp_ResidueWrapCount, ECDXType::CDXINT8}},
{"ResidueBlockCount", {kCDXProp_ResidueBlockCount, ECDXType::CDXINT8}},
{"ResidueZigZag", {kCDXProp_ResidueZigZag, ECDXType::CDXBooleanImplied}},
{"NumberResidueBlocks", {kCDXProp_NumberResidueBlocks, ECDXType::CDXBooleanImplied}},
{"BondSpacingType", {kCDXProp_BondSpacingType, ECDXType::CDXINT8}},
{"LabelStyleFontName", {kCDXProp_LabelStyleFontName, ECDXType::CDXString}},
{"CaptionStyleFontName", {kCDXProp_CaptionStyleFontName, ECDXType::CDXString}},
{"ShowSequenceUnlinkedBranches", {kCDXProp_ShowSequenceUnlinkedBranches, ECDXType::CDXBooleanImplied}},
{"WindowIsZoomed", {kCDXProp_Window_IsZoomed, ECDXType::CDXBooleanImplied}},
{"WindowPosition", {kCDXProp_Window_Position, ECDXType::CDXPoint2D}},
{"WindowSize", {kCDXProp_Window_Size, ECDXType::CDXPoint2D}},
{"GraphicType", {kCDXProp_Graphic_Type, ECDXType::CDXINT16}},
{"LineType", {kCDXProp_Line_Type, ECDXType::CDXINT16}},
{"ArrowType", {kCDXProp_Arrow_Type, ECDXType::CDXINT16}},
{"RectangleType", {kCDXProp_Rectangle_Type, ECDXType::CDXINT16}},
{"OvalType", {kCDXProp_Oval_Type, ECDXType::CDXINT16}},
{"OrbitalType", {kCDXProp_Orbital_Type, ECDXType::CDXINT16}},
{"BracketType", {kCDXProp_Bracket_Type, ECDXType::CDXINT16}},
{"SymbolType", {kCDXProp_Symbol_Type, ECDXType::CDXINT16}},
{"CurveType", {kCDXProp_Curve_Type, ECDXType::CDXINT16}},
{"HeadSize", {kCDXProp_Arrow_HeadSize, ECDXType::CDXINT16}},
{"AngularSize", {kCDXProp_Arc_AngularSize, ECDXType::CDXINT16}},
{"LipSize", {kCDXProp_Bracket_LipSize, ECDXType::CDXINT16}},
{"CurvePoints", {kCDXProp_Curve_Points, ECDXType::CDXCurvePoints}},
{"BracketUsage", {kCDXProp_Bracket_Usage, ECDXType::CDXINT8}},
{"PolymerRepeatPattern", {kCDXProp_Polymer_RepeatPattern, ECDXType::CDXINT8}},
{"PolymerFlipType", {kCDXProp_Polymer_FlipType, ECDXType::CDXINT8}},
{"BracketedObjectIDs", {kCDXProp_BracketedObjects, ECDXType::CDXObjectIDArray}},
{"RepeatCount", {kCDXProp_Bracket_RepeatCount, ECDXType::CDXFLOAT64}},
{"ComponentOrder", {kCDXProp_Bracket_ComponentOrder, ECDXType::CDXINT16}},
{"SRULabel", {kCDXProp_Bracket_SRULabel, ECDXType::CDXString}},
{"GraphicID", {kCDXProp_Bracket_GraphicID, ECDXType::CDXObjectID}},
{"BondID", {kCDXProp_Bracket_BondID, ECDXType::CDXObjectID}},
{"InnerAtomID", {kCDXProp_Bracket_InnerAtomID, ECDXType::CDXObjectID}},
{"CurvePoints3D", {kCDXProp_Curve_Points3D, ECDXType::CDXCurvePoints3D}},
{"ArrowheadType", {kCDXProp_Arrowhead_Type, ECDXType::CDXINT16}},
{"ArrowheadCenterSize", {kCDXProp_Arrowhead_CenterSize, ECDXType::CDXUINT16}},
{"ArrowheadWidth", {kCDXProp_Arrowhead_Width, ECDXType::CDXUINT16}},
{"ShadowSize", {kCDXProp_ShadowSize, ECDXType::CDXUINT16}},
{"ArrowShaftSpacing", {kCDXProp_Arrow_ShaftSpacing, ECDXType::CDXUINT16}},
{"ArrowEquilibriumRatio", {kCDXProp_Arrow_EquilibriumRatio, ECDXType::CDXUINT16}},
{"ArrowheadHead", {kCDXProp_Arrow_ArrowHead_Head, ECDXType::CDXINT16}},
{"ArrowheadTail", {kCDXProp_Arrow_ArrowHead_Tail, ECDXType::CDXINT16}},
{"FillType", {kCDXProp_Fill_Type, ECDXType::CDXINT16}},
{"CurveSpacing", {kCDXProp_Curve_Spacing, ECDXType::CDXUINT16}},
{"Closed", {kCDXProp_Closed, ECDXType::CDXBoolean}},
{"Dipole", {kCDXProp_Arrow_Dipole, ECDXType::CDXBoolean}},
{"NoGo", {kCDXProp_Arrow_NoGo, ECDXType::CDXINT8}},
{"CornerRadius", {kCDXProp_CornerRadius, ECDXType::CDXINT16}},
{"FrameType", {kCDXProp_Frame_Type, ECDXType::CDXINT16}},
{"Edition", {kCDXProp_Picture_Edition, ECDXType::CDXUnformatted}},
{"EditionAlias", {kCDXProp_Picture_EditionAlias, ECDXType::CDXUnformatted}},
{"MacPICT", {kCDXProp_MacPICT, ECDXType::CDXUnformatted}},
{"WindowsMetafile", {kCDXProp_WindowsMetafile, ECDXType::CDXUnformatted}},
{"OLEObject", {kCDXProp_OLEObject, ECDXType::CDXUnformatted}},
{"EnhancedMetafile", {kCDXProp_EnhancedMetafile, ECDXType::CDXUnformatted}},
{"GIF", {kCDXProp_GIF, ECDXType::CDXUnformatted}},
{"TIFF", {kCDXProp_TIFF, ECDXType::CDXUnformatted}},
{"PNG", {kCDXProp_PNG, ECDXType::CDXUnformatted}},
{"JPEG", {kCDXProp_JPEG, ECDXType::CDXUnformatted}},
{"BMP", {kCDXProp_BMP, ECDXType::CDXUnformatted}},
{"XSpacing", {kCDXProp_Spectrum_XSpacing, ECDXType::CDXFLOAT64}},
{"XLow", {kCDXProp_Spectrum_XLow, ECDXType::CDXFLOAT64}},
{"XType", {kCDXProp_Spectrum_XType, ECDXType::CDXINT16}},
{"YType", {kCDXProp_Spectrum_YType, ECDXType::CDXINT16}},
{"XAxisLabel", {kCDXProp_Spectrum_XAxisLabel, ECDXType::CDXString}},
{"YAxisLabel", {kCDXProp_Spectrum_YAxisLabel, ECDXType::CDXString}},
{"Class", {kCDXProp_Spectrum_Class, ECDXType::CDXINT16}},
{"YLow", {kCDXProp_Spectrum_YLow, ECDXType::CDXFLOAT64}},
{"YScale", {kCDXProp_Spectrum_YScale, ECDXType::CDXFLOAT64}},
{"OriginFraction", {kCDXProp_TLC_OriginFraction, ECDXType::CDXFLOAT64}},
{"SolventFrontFraction", {kCDXProp_TLC_SolventFrontFraction, ECDXType::CDXFLOAT64}},
{"ShowOrigin", {kCDXProp_TLC_ShowOrigin, ECDXType::CDXBoolean}},
{"ShowSolventFront", {kCDXProp_TLC_ShowSolventFront, ECDXType::CDXBoolean}},
{"ShowBorders", {kCDXProp_TLC_ShowBorders, ECDXType::CDXBoolean}},
{"ShowSideTicks", {kCDXProp_TLC_ShowSideTicks, ECDXType::CDXBoolean}},
{"Rf", {kCDXProp_TLC_Rf, ECDXType::CDXFLOAT64}},
{"Tail", {kCDXProp_TLC_Tail, ECDXType::CDXCoordinate}},
{"ShowRf", {kCDXProp_TLC_ShowRf, ECDXType::CDXBoolean}},
{"TextFrame", {kCDXProp_NamedAlternativeGroup_TextFrame, ECDXType::CDXRectangle}},
{"GroupFrame", {kCDXProp_NamedAlternativeGroup_GroupFrame, ECDXType::CDXRectangle}},
{"Valence", {kCDXProp_NamedAlternativeGroup_Valence, ECDXType::CDXINT16}},
{"GeometricFeature", {kCDXProp_GeometricFeature, ECDXType::CDXINT8}},
{"RelationValue", {kCDXProp_RelationValue, ECDXType::CDXFLOAT64}},
{"BasisObjects", {kCDXProp_BasisObjects, ECDXType::CDXObjectIDArray}},
{"ConstraintType", {kCDXProp_ConstraintType, ECDXType::CDXINT8}},
{"ConstraintMin", {kCDXProp_ConstraintMin, ECDXType::CDXFLOAT64}},
{"ConstraintMax", {kCDXProp_ConstraintMax, ECDXType::CDXFLOAT64}},
{"IgnoreUnconnectedAtoms", {kCDXProp_IgnoreUnconnectedAtoms, ECDXType::CDXBooleanImplied}},
{"DihedralIsChiral", {kCDXProp_DihedralIsChiral, ECDXType::CDXBooleanImplied}},
{"PointIsDirected", {kCDXProp_PointIsDirected, ECDXType::CDXBooleanImplied}},
{"ChemicalPropertyType", {kCDXProp_ChemicalPropertyType, ECDXType::CDXUINT32}},
{"ChemicalPropertyDisplayID", {kCDXProp_ChemicalPropertyDisplayID, ECDXType::CDXObjectID}},
{"ChemicalPropertyIsActive", {kCDXProp_ChemicalPropertyIsActive, ECDXType::CDXBoolean}},
{"ChemPropName", {kCDXProp_ChemicalPropertyName, ECDXType::CDXString}},
{"ChemPropFormula", {kCDXProp_ChemicalPropertyFormula, ECDXType::CDXString}},
{"ChemPropExactMass", {kCDXProp_ChemicalPropertyExactMass, ECDXType::CDXString}},
{"ChemPropMolWt", {kCDXProp_ChemicalPropertyMolWeight, ECDXType::CDXString}},
{"ChemPropMOverZ", {kCDXProp_ChemicalPropertyMOverZ, ECDXType::CDXString}},
{"ChemPropAnalysis", {kCDXProp_ChemicalPropertyAnalysis, ECDXType::CDXString}},
{"ChemPropBoilingPt", {kCDXProp_ChemicalPropertyBoilingPoint, ECDXType::CDXString}},
{"ChemPropMeltingPt", {kCDXProp_ChemicalPropertyMeltingPoint, ECDXType::CDXString}},
{"ChemPropCritTemp", {kCDXProp_ChemicalPropertyCriticalTemp, ECDXType::CDXString}},
{"ChemPropCritPres", {kCDXProp_ChemicalPropertyCriticalPressure, ECDXType::CDXString}},
{"ChemPropCritVol", {kCDXProp_ChemicalPropertyCriticalVolume, ECDXType::CDXString}},
{"ChemPropGibbs", {kCDXProp_ChemicalPropertyGibbsEnergy, ECDXType::CDXString}},
{"ChemPropLogP", {kCDXProp_ChemicalPropertyLogP, ECDXType::CDXString}},
{"ChemPropMR", {kCDXProp_ChemicalPropertyMR, ECDXType::CDXString}},
{"ChemPropHenry", {kCDXProp_ChemicalPropertyHenrysLaw, ECDXType::CDXString}},
{"ChemPropEForm", {kCDXProp_ChemicalPropertyHeatOfForm, ECDXType::CDXString}},
{"ChemProptPSA", {kCDXProp_ChemicalPropertytPSA, ECDXType::CDXString}},
{"ChemPropCLogP", {kCDXProp_ChemicalPropertyCLogP, ECDXType::CDXString}},
{"ChemPropCMR", {kCDXProp_ChemicalPropertyCMR, ECDXType::CDXString}},
{"ChemPropLogS", {kCDXProp_ChemicalPropertyLogS, ECDXType::CDXString}},
{"ChemPropPKa", {kCDXProp_ChemicalPropertyPKa, ECDXType::CDXString}},
{"ChemPropID", {kCDXProp_ChemicalPropertyID, ECDXType::CDXString}},
{"ChemPropFragmentLabel", {kCDXProp_ChemicalPropertyFragmentLabel, ECDXType::CDXString}},
{"ReactionStepAtomMap", {kCDXProp_ReactionStep_Atom_Map, ECDXType::CDXObjectIDArray}},
{"ReactionStepReactants", {kCDXProp_ReactionStep_Reactants, ECDXType::CDXObjectIDArray}},
{"ReactionStepProducts", {kCDXProp_ReactionStep_Products, ECDXType::CDXObjectIDArray}},
{"ReactionStepPlusses", {kCDXProp_ReactionStep_Plusses, ECDXType::CDXObjectIDArray}},
{"ReactionStepArrows", {kCDXProp_ReactionStep_Arrows, ECDXType::CDXObjectIDArray}},
{"ReactionStepObjectsAboveArrow", {kCDXProp_ReactionStep_ObjectsAboveArrow, ECDXType::CDXObjectIDArray}},
{"ReactionStepObjectsBelowArrow", {kCDXProp_ReactionStep_ObjectsBelowArrow, ECDXType::CDXObjectIDArray}},
{"ReactionStepAtomMapManual", {kCDXProp_ReactionStep_Atom_Map_Manual, ECDXType::CDXObjectIDArray}},
{"ReactionStepAtomMapAuto", {kCDXProp_ReactionStep_Atom_Map_Auto, ECDXType::CDXObjectIDArray}},
{"RxnAutonumberStyle", {kCDXProp_RxnAutonumber_Style, ECDXType::CDXINT16}},
{"RxnAutonumberConditions", {kCDXProp_RxnAutonumber_Conditions, ECDXType::CDXBoolean}},
{"RxnAutonumberStart", {kCDXProp_RxnAutonumber_Start, ECDXType::CDXINT16}},
{"RxnAutonumberFormat", {kCDXProp_RxnAutonumber_Format, ECDXType::CDXString}},
{"TagType", {kCDXProp_ObjectTag_Type, ECDXType::CDXINT16}},
{"Tracking", {kCDXProp_ObjectTag_Tracking, ECDXType::CDXBoolean}},
{"Persistent", {kCDXProp_ObjectTag_Persistent, ECDXType::CDXBoolean}},
{"Value", {kCDXProp_ObjectTag_Value, ECDXType::CDXvaries}},
{"PositioningType", {kCDXProp_Positioning, ECDXType::CDXINT8}},
{"PositioningAngle", {kCDXProp_PositioningAngle, ECDXType::CDXINT32}},
{"PositioningOffset", {kCDXProp_PositioningOffset, ECDXType::CDXPoint2D}},
{"SequenceIdentifier", {kCDXProp_Sequence_Identifier, ECDXType::CDXString}},
{"CrossReferenceContainer", {kCDXProp_CrossReference_Container, ECDXType::CDXString}},
{"CrossReferenceDocument", {kCDXProp_CrossReference_Document, ECDXType::CDXString}},
{"CrossReferenceIdentifier", {kCDXProp_CrossReference_Identifier, ECDXType::CDXString}},
{"CrossReferenceSequence", {kCDXProp_CrossReference_Sequence, ECDXType::CDXString}},
{"PaneHeight", {kCDXProp_Template_PaneHeight, ECDXType::CDXCoordinate}},
{"NumRows", {kCDXProp_Template_NumRows, ECDXType::CDXINT16}},
{"NumColumns", {kCDXProp_Template_NumColumns, ECDXType::CDXINT16}},
{"Integral", {kCDXProp_Group_Integral, ECDXType::CDXBoolean}},
{"SplitterPositions", {kCDXProp_SplitterPositions, ECDXType::CDXObjectIDArray}},
{"PageDefinition", {kCDXProp_PageDefinition, ECDXType::CDXINT8}}};
const std::unordered_map<uint16_t, std::string> KCDXObjToName = {{kCDXObj_Document, "CDXML"},
{kCDXObj_Page, "page"},
{kCDXObj_Group, "group"},
{kCDXObj_Fragment, "fragment"},
{kCDXObj_Node, "n"},
{kCDXObj_Bond, "b"},
{kCDXObj_Text, "t"},
{kCDXObj_Graphic, "graphic"},
{kCDXObj_BracketedGroup, "bracketedgroup"},
{kCDXObj_BracketAttachment, "bracketattachment"},
{kCDXObj_CrossingBond, "crossingbond"},
{kCDXObj_Curve, "curve"},
{kCDXObj_EmbeddedObject, "embeddedobject"},
{kCDXObj_Table, "table"},
{kCDXObj_NamedAlternativeGroup, "altgroup"},
{kCDXObj_TemplateGrid, "templategrid"},
{kCDXObj_RegistryNumber, "regnum"},
{kCDXObj_ReactionScheme, "scheme"},
{kCDXObj_ReactionStep, "step"},
{kCDXObj_Spectrum, "spectrum"},
{kCDXObj_ObjectTag, "objecttag"},
{kCDXObj_Sequence, "sequence"},
{kCDXObj_CrossReference, "crossreference"},
{kCDXObj_Border, "border"},
{kCDXObj_Geometry, "geometry"},
{kCDXObj_Constraint, "constraint"},
{kCDXObj_TLCPlate, "tlcplate"},
{kCDXObj_TLCLane, "tlclane"},
{kCDXObj_TLCSpot, "tlcspot"},
{kCDXObj_Splitter, "splitter"},
{kCDXObj_ChemicalProperty, "chemicalproperty"},
{kCDXProp_ColorTable, "colortable"},
{kCDXProp_FontTable, "fonttable"},
{kCDXProp_RepresentsProperty, "represent"},
{kCDXObj_Arrow, "arrow"}};
const std::unordered_map<std::string, uint16_t> KCDXNameToObjID = {{"CDXML", kCDXObj_Document},
{"page", kCDXObj_Page},
{"group", kCDXObj_Group},
{"fragment", kCDXObj_Fragment},
{"n", kCDXObj_Node},
{"b", kCDXObj_Bond},
{"t", kCDXObj_Text},
{"graphic", kCDXObj_Graphic},
{"bracketedgroup", kCDXObj_BracketedGroup},
{"bracketattachment", kCDXObj_BracketAttachment},
{"crossingbond", kCDXObj_CrossingBond},
{"curve", kCDXObj_Curve},
{"embeddedobject", kCDXObj_EmbeddedObject},
{"table", kCDXObj_Table},
{"altgroup", kCDXObj_NamedAlternativeGroup},
{"templategrid", kCDXObj_TemplateGrid},
{"regnum", kCDXObj_RegistryNumber},
{"scheme", kCDXObj_ReactionScheme},
{"step", kCDXObj_ReactionStep},
{"spectrum", kCDXObj_Spectrum},
{"objecttag", kCDXObj_ObjectTag},
{"sequence", kCDXObj_Sequence},
{"crossreference", kCDXObj_CrossReference},
{"border", kCDXObj_Border},
{"geometry", kCDXObj_Geometry},
{"constraint", kCDXObj_Constraint},
{"tlcplate", kCDXObj_TLCPlate},
{"tlclane", kCDXObj_TLCLane},
{"tlcspot", kCDXObj_TLCSpot},
{"splitter", kCDXObj_Splitter},
{"chemicalproperty", kCDXObj_ChemicalProperty},
{"colortable", kCDXProp_ColorTable},
{"fonttable", kCDXProp_FontTable},
{"represent", kCDXProp_RepresentsProperty},
{"arrow", kCDXObj_Arrow}};
const std::unordered_map<std::string, int> KNodeTypeNameToInt = {{"Unspecified", kCDXNodeType_Unspecified},
{"Element", kCDXNodeType_Element},
{"ElementList", kCDXNodeType_ElementList},
{"ElementListNickname", kCDXNodeType_ElementListNickname},
{"Nickname", kCDXNodeType_Nickname},
{"Fragment", kCDXNodeType_Fragment},
{"Formula", kCDXNodeType_Formula},
{"GenericNickname", kCDXNodeType_GenericNickname},
{"AnonymousAlternativeGroup", kCDXNodeType_AnonymousAlternativeGroup},
{"NamedAlternativeGroup", kCDXNodeType_NamedAlternativeGroup},
{"MultiAttachment", kCDXNodeType_MultiAttachment},
{"VariableAttachment", kCDXNodeType_VariableAttachment},
{"ExternalConnectionPoint", kCDXNodeType_ExternalConnectionPoint},
{"LinkNode", kCDXNodeType_LinkNode}};
const std::unordered_map<int, std::string> KNodeTypeIntToName = {{kCDXNodeType_Unspecified, "Unspecified"},
{kCDXNodeType_Element, "Element"},
{kCDXNodeType_ElementList, "ElementList"},
{kCDXNodeType_ElementListNickname, "ElementListNickname"},
{kCDXNodeType_Nickname, "Nickname"},
{kCDXNodeType_Fragment, "Fragment"},
{kCDXNodeType_Formula, "Formula"},
{kCDXNodeType_GenericNickname, "GenericNickname"},
{kCDXNodeType_AnonymousAlternativeGroup, "AnonymousAlternativeGroup"},
{kCDXNodeType_NamedAlternativeGroup, "NamedAlternativeGroup"},
{kCDXNodeType_MultiAttachment, "MultiAttachment"},
{kCDXNodeType_VariableAttachment, "VariableAttachment"},
{kCDXNodeType_ExternalConnectionPoint, "ExternalConnectionPoint"},
{kCDXNodeType_LinkNode, "LinkNode"}};
const std::unordered_map<std::string, int> KGeometryTypeNameToInt = {{"Unspecified", kCDXAtomGeometry_Unknown},
{"1", kCDXAtomGeometry_1Ligand},
{"Linear", kCDXAtomGeometry_Linear},
{"Bent", kCDXAtomGeometry_Bent},
{"TrigonalPlanar", kCDXAtomGeometry_TrigonalPlanar},
{"TrigonalPyramidal", kCDXAtomGeometry_TrigonalPyramidal},
{"SquarePlanar", kCDXAtomGeometry_SquarePlanar},
{"Tetrahedral", kCDXAtomGeometry_Tetrahedral},
{"TrigonalBipyramidal", kCDXAtomGeometry_TrigonalBipyramidal},
{"SquarePyramidal", kCDXAtomGeometry_SquarePyramidal},
{"5", kCDXAtomGeometry_5Ligand},
{"Octahedral", kCDXAtomGeometry_Octahedral},
{"6", kCDXAtomGeometry_6Ligand},
{"7", kCDXAtomGeometry_7Ligand},
{"8", kCDXAtomGeometry_8Ligand},
{"9", kCDXAtomGeometry_9Ligand},
{"10", kCDXAtomGeometry_10Ligand}};
const std::unordered_map<int, std::string> KGeometryTypeIntToName = {{kCDXAtomGeometry_Unknown, "Unspecified"},
{kCDXAtomGeometry_1Ligand, "1"},
{kCDXAtomGeometry_Linear, "Linear"},
{kCDXAtomGeometry_Bent, "Bent"},
{kCDXAtomGeometry_TrigonalPlanar, "TrigonalPlanar"},
{kCDXAtomGeometry_TrigonalPyramidal, "TrigonalPyramidal"},
{kCDXAtomGeometry_SquarePlanar, "SquarePlanar"},
{kCDXAtomGeometry_Tetrahedral, "Tetrahedral"},
{kCDXAtomGeometry_TrigonalBipyramidal, "TrigonalBipyramidal"},
{kCDXAtomGeometry_SquarePyramidal, "SquarePyramidal"},
{kCDXAtomGeometry_5Ligand, "5"},
{kCDXAtomGeometry_Octahedral, "Octahedral"},
{kCDXAtomGeometry_6Ligand, "6"},
{kCDXAtomGeometry_7Ligand, "7"},
{kCDXAtomGeometry_8Ligand, "8"},
{kCDXAtomGeometry_9Ligand, "9"},
{kCDXAtomGeometry_10Ligand, "10"}};
const std::unordered_map<std::string, int> kBracketUsageNameToInt = {{"Unspecified", kCDXBracketUsage_Unspecified},
{"Unused1", kCDXBracketUsage_Unused1},
{"Unused2", kCDXBracketUsage_Unused2},
{"SRU", kCDXBracketUsage_SRU},
{"Monomer", kCDXBracketUsage_Monomer},
{"Mer", kCDXBracketUsage_Mer},
{"Copolymer", kCDXBracketUsage_Copolymer},
{"CopolymerAlternating", kCDXBracketUsage_CopolymerAlternating},
{"CopolymerRandom", kCDXBracketUsage_CopolymerRandom},
{"CopolymerBlock", kCDXBracketUsage_CopolymerBlock},
{"Crosslink", kCDXBracketUsage_Crosslink},
{"Graft", kCDXBracketUsage_Graft},
{"Modification", kCDXBracketUsage_Modification},
{"Component", kCDXBracketUsage_Component},
{"MixtureUnordered", kCDXBracketUsage_MixtureUnordered},
{"MixtureOrdered", kCDXBracketUsage_MixtureOrdered},
{"MultipleGroup", kCDXBracketUsage_MultipleGroup},
{"Generic", kCDXBracketUsage_Generic},
{"Anypolymer", kCDXBracketUsage_Anypolymer}
};
const std::unordered_map<int, std::string> kBracketUsageIntToName = {{kCDXBracketUsage_Unspecified, "Unspecified"},
{kCDXBracketUsage_Unused1, "Unused1"},
{kCDXBracketUsage_Unused2, "Unused2"},
{kCDXBracketUsage_SRU, "SRU"},
{kCDXBracketUsage_Monomer, "Monomer"},
{kCDXBracketUsage_Mer, "Mer"},
{kCDXBracketUsage_Copolymer, "Copolymer"},
{kCDXBracketUsage_CopolymerAlternating, "CopolymerAlternating"},
{kCDXBracketUsage_CopolymerRandom, "CopolymerRandom"},
{kCDXBracketUsage_CopolymerBlock, "CopolymerBlock"},
{kCDXBracketUsage_Crosslink, "Crosslink"},
{kCDXBracketUsage_Graft, "Graft"},
{kCDXBracketUsage_Modification, "Modification"},
{kCDXBracketUsage_Component, "Component"},
{kCDXBracketUsage_MixtureUnordered, "MixtureUnordered"},
{kCDXBracketUsage_MixtureOrdered, "MixtureOrdered"},
{kCDXBracketUsage_MultipleGroup, "MultipleGroup"},
{kCDXBracketUsage_Generic, "Generic"},
{kCDXBracketUsage_Anypolymer, "Anypolymer"}};
const std::vector<char> kCIPStereochemistryIndexToChar = {'U', 'N', 'R', 'S', 'r', 's', 'u'};
namespace CIPStereochemistry
{
enum
{
Undetermined = 0,
Symmetric,
Asymmetric_R,
Asymmetric_S,
Pseudoasymmetric_r,
Pseudoasymmetric_s,
Unspecified
};
}
const std::unordered_map<char, uint8_t> kCIPStereochemistryCharToIndex = {
{'U', CIPStereochemistry::Undetermined}, {'N', CIPStereochemistry::Symmetric}, {'R', CIPStereochemistry::Asymmetric_R},
{'S', CIPStereochemistry::Asymmetric_S}, {'r', CIPStereochemistry::Pseudoasymmetric_r}, {'s', CIPStereochemistry::Pseudoasymmetric_s},
{'u', CIPStereochemistry::Unspecified},
};
const std::vector<char> kCIPBondStereochemistryIndexToChar = {'U', 'N', 'E', 'Z'};
const std::unordered_map<char, uint8_t> kCIPBondStereochemistryCharToIndex = {{'U', 0}, {'N', 1}, {'E', 2}, {'Z', 3}};
const std::vector<std::string> KStyleProperties = {"font", "face", "size", "color"};
const std::unordered_map<std::string, uint8_t> kBondReactionParticipationNameToInt{
{"Unspecified", kCDXBondReactionParticipation_Unspecified}, {"ReactionCenter", kCDXBondReactionParticipation_ReactionCenter},
{"MakeOrBreak", kCDXBondReactionParticipation_MakeOrBreak}, {"ChangeType", kCDXBondReactionParticipation_ChangeType},
{"MakeAndChange", kCDXBondReactionParticipation_MakeAndChange}, {"NotReactionCenter", kCDXBondReactionParticipation_NotReactionCenter},
{"NoChange", kCDXBondReactionParticipation_NoChange}, {"Unmapped", kCDXBondReactionParticipation_Unmapped}};
const std::unordered_map<uint8_t, std::string> kBondReactionParticipationIntToName{
{kCDXBondReactionParticipation_Unspecified, "Unspecified"}, {kCDXBondReactionParticipation_ReactionCenter, "ReactionCenter"},
{kCDXBondReactionParticipation_MakeOrBreak, "MakeOrBreak"}, {kCDXBondReactionParticipation_ChangeType, "ChangeType"},
{kCDXBondReactionParticipation_MakeAndChange, "MakeAndChange"}, {kCDXBondReactionParticipation_NotReactionCenter, "NotReactionCenter"},
{kCDXBondReactionParticipation_NoChange, "NoChange"}, {kCDXBondReactionParticipation_Unmapped, "Unmapped"}};
const std::unordered_map<std::string, uint8_t> kBondTopologyNameToInt{{"Unspecified", kCDXBondTopology_Unspecified},
{"Ring", kCDXBondTopology_Ring},
{"Chain", kCDXBondTopology_Chain},
{"RingOrChain", kCDXBondTopology_RingOrChain}};
const std::unordered_map<uint8_t, std::string> kBondTopologyIntToName{{kCDXBondTopology_Unspecified, "Unspecified"},
{kCDXBondTopology_Ring, "Ring"},
{kCDXBondTopology_Chain, "Chain"},
{kCDXBondTopology_RingOrChain, "RingOrChain"}};
static const std::unordered_map<uint8_t, int> bond_rxn_participation_to_reaction_center = {
{kCDXBondReactionParticipation_Unspecified, RC_UNMARKED},
{kCDXBondReactionParticipation_ReactionCenter, RC_CENTER},
{kCDXBondReactionParticipation_MakeOrBreak, RC_MADE_OR_BROKEN},
{kCDXBondReactionParticipation_ChangeType, RC_ORDER_CHANGED},
{kCDXBondReactionParticipation_MakeAndChange, RC_MADE_OR_BROKEN | RC_ORDER_CHANGED},
{kCDXBondReactionParticipation_NotReactionCenter, RC_NOT_CENTER},
{kCDXBondReactionParticipation_NoChange, RC_UNCHANGED},
{kCDXBondReactionParticipation_Unmapped, RC_UNMARKED}};
static const std::unordered_map<int, uint8_t> reaction_center_to_bond_rxn_participation = {
{RC_UNMARKED, kCDXBondReactionParticipation_Unspecified},
{RC_CENTER, kCDXBondReactionParticipation_ReactionCenter},
{RC_MADE_OR_BROKEN, kCDXBondReactionParticipation_MakeOrBreak},
{RC_ORDER_CHANGED, kCDXBondReactionParticipation_ChangeType},
{RC_MADE_OR_BROKEN | RC_ORDER_CHANGED, kCDXBondReactionParticipation_MakeAndChange},
{RC_NOT_CENTER, kCDXBondReactionParticipation_NotReactionCenter},
{RC_UNCHANGED, kCDXBondReactionParticipation_NoChange},
{RC_UNMARKED, kCDXBondReactionParticipation_Unmapped}};
static const std::unordered_map<uint8_t, int> cdx_topology_to_topology = {{kCDXBondTopology_Unspecified, TOPOLOGY_ANY},
{kCDXBondTopology_Ring, TOPOLOGY_RING},
{kCDXBondTopology_Chain, TOPOLOGY_CHAIN},
{kCDXBondTopology_RingOrChain, TOPOLOGY_ANY}};
static const std::unordered_map<int, uint8_t> topology_to_cdx_topology = {
{TOPOLOGY_ANY, kCDXBondTopology_Unspecified}, {TOPOLOGY_RING, kCDXBondTopology_Ring}, {TOPOLOGY_CHAIN, kCDXBondTopology_Chain}};
}
#ifdef _WIN32
#pragma warning(pop)
#endif
#endif // _H_CDXCommons