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