|
@@ -0,0 +1,54 @@
|
|
|
+;;; ob-smiles.el --- Org-mode Babel support for SMILES.
|
|
|
+;;; -*- coding: utf-8 -*-
|
|
|
+
|
|
|
+;; Keywords: org babel SMILES
|
|
|
+;; Version: 0.0.1
|
|
|
+;; Package-Requires: ((smiles-mode "0.0.1") (org "8"))
|
|
|
+
|
|
|
+;;; Commentary:
|
|
|
+
|
|
|
+;;; I copy code from:
|
|
|
+;;; http://kitchingroup.cheme.cmu.edu/blog/2016/03/26/A-molecule-link-for-org-mode
|
|
|
+
|
|
|
+;; Author: John Kitchin [jkitchin@andrew.cmu.edu]
|
|
|
+;; Maintainer: stardiviner [numbchild@gmail.com]
|
|
|
+
|
|
|
+;;; Code:
|
|
|
+
|
|
|
+;; Org-mode Babel
|
|
|
+(defun org-babel-execute:smiles (body params)
|
|
|
+ "Execute SMILES babel `BODY' with `PARAMS'."
|
|
|
+ (shell-command-to-string
|
|
|
+ (format "obabel -:\"%s\" -osvg 2> /dev/null" body)))
|
|
|
+
|
|
|
+;; Org-mode link
|
|
|
+(defun molecule-jump (name)
|
|
|
+ "Jump to molecule `NAME' definition."
|
|
|
+ (org-mark-ring-push)
|
|
|
+ (org-open-link-from-string (format "[[%s]]" path)))
|
|
|
+
|
|
|
+(defun molecule-export (path desc backend)
|
|
|
+ "Export molecule to HTML format on `PATH' with `DESC' and `BACKEND'."
|
|
|
+ (let ((name (save-window-excursion
|
|
|
+ (molecule-jump path)
|
|
|
+ (org-element-property :name (org-element-context)))))
|
|
|
+ (cond
|
|
|
+ ((eq 'html backend)
|
|
|
+ (format "<a href=\"#%s\">%s</a>" name name)))))
|
|
|
+
|
|
|
+(org-add-link-type
|
|
|
+ "molecule"
|
|
|
+ 'molecule-jump
|
|
|
+ 'molecule-export)
|
|
|
+
|
|
|
+;; org-mode element
|
|
|
+(org-element-map (org-element-parse-buffer)
|
|
|
+ 'src-block
|
|
|
+ (lambda (src)
|
|
|
+ (when (string= "smiles" (org-element-property :language src))
|
|
|
+ (org-element-property :name src))))
|
|
|
+
|
|
|
+
|
|
|
+(provide 'ob-smiles)
|
|
|
+
|
|
|
+;;; ob-smiles.el ends here
|