public static ROMol Parse(string smarts)
        {
            if (smarts == null)
            {
                throw new ArgumentNullException(nameof(smarts));
            }

            var pattern = SmartsCache.GetOrAdd(smarts, a_smarts =>
            {
                ROMol query = Chem.MolFromSmarts(a_smarts);

                if (query == null)
                {
                    return(nullSmarts);
                }

                query.setProp("source", "SMARTS");
                return(query);
            });

            if (object.ReferenceEquals(pattern, nullSmarts))
            {
                return(null);
            }

            return(pattern);
        }
        public TempFile GenerateTemporary(string text, double width, double height)
        {
            var min = Math.Min(width, height);

            if (min < Config.MinimumEdgePixels)
            {
                double scale = Config.MinimumEdgePixels / min;
                width  *= scale;
                height *= scale;
            }

            RWMol mol = null;

            mol = Chem.MolFromSmiles(text);
            if (mol == null)
            {
                mol = Chem.MolFromSmarts(text);
            }
            if (mol == null)
            {
                return(null);
            }

            var tempFile = new TempFile("." + Config.ImageType);
            var filename = tempFile.FileName;

            MolToFile(mol, filename, new Tuple <int, int>((int)width, (int)height));

            if (filename.EndsWith(".svg"))
            {
                string svg;
                using (var r = new StreamReader(filename))
                {
                    svg = r.ReadToEnd();
                }
                if (ImageBGIsTransparent())
                {
                    using (var r = new StreamWriter(filename))
                    {
                        r.Write(re_rect_tag.Replace(svg, ""));
                    }
                }
            }

            return(tempFile);
        }