summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstardiviner <numbchild@gmail.com>2018-02-10 08:25:53 +0800
committerstardiviner <numbchild@gmail.com>2018-02-10 08:25:53 +0800
commit8b50e6cf5add8857abdb1c1c5175a73fcea70d33 (patch)
treea01a69f6a4052bddb2019ecb4cdd502c2a5bdfcc
parentf643a75bd13c9c8d04452512b0452489a999c112 (diff)
downloadorg-mode-8b50e6cf5add8857abdb1c1c5175a73fcea70d33.tar.gz
* ob-smiles.el (supporting SMILES in Org-mode Babel): Add.
Copied version.
-rw-r--r--contrib/lisp/ob-smiles.el54
1 files changed, 54 insertions, 0 deletions
diff --git a/contrib/lisp/ob-smiles.el b/contrib/lisp/ob-smiles.el
new file mode 100644
index 0000000..ef2ab15
--- /dev/null
+++ b/contrib/lisp/ob-smiles.el
@@ -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