ob-clojure-litterate: Fix trigger functions.
[org-mode/org-tableheadings.git] / contrib / lisp / ob-smiles.el
blobef2ab1529082d3619cfe928f82c975b956da251b
1 ;;; ob-smiles.el --- Org-mode Babel support for SMILES.
2 ;;; -*- coding: utf-8 -*-
4 ;; Keywords: org babel SMILES
5 ;; Version: 0.0.1
6 ;; Package-Requires: ((smiles-mode "0.0.1") (org "8"))
8 ;;; Commentary:
10 ;;; I copy code from:
11 ;;; http://kitchingroup.cheme.cmu.edu/blog/2016/03/26/A-molecule-link-for-org-mode
13 ;; Author: John Kitchin [jkitchin@andrew.cmu.edu]
14 ;; Maintainer: stardiviner [numbchild@gmail.com]
16 ;;; Code:
18 ;; Org-mode Babel
19 (defun org-babel-execute:smiles (body params)
20 "Execute SMILES babel `BODY' with `PARAMS'."
21 (shell-command-to-string
22 (format "obabel -:\"%s\" -osvg 2> /dev/null" body)))
24 ;; Org-mode link
25 (defun molecule-jump (name)
26 "Jump to molecule `NAME' definition."
27 (org-mark-ring-push)
28 (org-open-link-from-string (format "[[%s]]" path)))
30 (defun molecule-export (path desc backend)
31 "Export molecule to HTML format on `PATH' with `DESC' and `BACKEND'."
32 (let ((name (save-window-excursion
33 (molecule-jump path)
34 (org-element-property :name (org-element-context)))))
35 (cond
36 ((eq 'html backend)
37 (format "<a href=\"#%s\">%s</a>" name name)))))
39 (org-add-link-type
40 "molecule"
41 'molecule-jump
42 'molecule-export)
44 ;; org-mode element
45 (org-element-map (org-element-parse-buffer)
46 'src-block
47 (lambda (src)
48 (when (string= "smiles" (org-element-property :language src))
49 (org-element-property :name src))))
52 (provide 'ob-smiles)
54 ;;; ob-smiles.el ends here