Przeglądaj źródła

* ob-smiles.el (supporting SMILES in Org-mode Babel): Add.

Copied version.
stardiviner 7 lat temu
rodzic
commit
8b50e6cf5a
1 zmienionych plików z 54 dodań i 0 usunięć
  1. 54 0
      contrib/lisp/ob-smiles.el

+ 54 - 0
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