| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- ;;; litorgy-reference.el --- litorgical functions for referencing external data
- ;; Copyright (C) 2009 Eric Schulte, Dan Davison, Austin F. Frank
- ;; Author: Eric Schulte, Dan Davison, Austin F. Frank
- ;; Keywords: literate programming, reproducible research
- ;; Homepage: http://orgmode.org
- ;; Version: 0.01
- ;;; License:
- ;; This program is free software; you can redistribute it and/or modify
- ;; it under the terms of the GNU General Public License as published by
- ;; the Free Software Foundation; either version 3, or (at your option)
- ;; any later version.
- ;;
- ;; This program is distributed in the hope that it will be useful,
- ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
- ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ;; GNU General Public License for more details.
- ;;
- ;; You should have received a copy of the GNU General Public License
- ;; along with GNU Emacs; see the file COPYING. If not, write to the
- ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- ;; Boston, MA 02110-1301, USA.
- ;;; Commentary:
- ;; Functions for referencing data from the header arguments of a
- ;; litorgical block. The syntax of such a reference should be
- ;;
- ;; #+VAR: variable-name=file:resource-id
- ;;
- ;; - variable-name :: the name of the variable to which the value
- ;; will be assigned
- ;;
- ;; - file :: path to the file containing the resource, or omitted if
- ;; resource is in the current file
- ;;
- ;; - resource-id :: the id or name of the resource, or 'previous' to
- ;; grab the previous table, or 'next' to grab the
- ;; next table
- ;;
- ;; So an example of a simple src block referencing table data in the
- ;; same file would be
- ;;
- ;; #+var: table previous
- ;; #+begin_src emacs-lisp
- ;; (message table)
- ;; #+end_src
- ;;
- ;;; Code:
- (require 'litorgy)
- (defun litorgy-reference-variables (params)
- "Takes a parameter alist, and return an alist of variable
- names, and the string representation of the related value."
- (mapcar #'litorgy-reference-parse
- (delq nil (mapcar (lambda (pair) (if (= (car pair) :var) (cdr pair))) params))))
- (defun litorgy-reference-parse (reference)
- "Parse a reference to an external resource returning a list
- with two elements. The first element of the list will be the
- name of the variable, and the second will be an emacs-lisp
- representation of the value of the variable."
- (save-excursion
- (if (string-match "(.+)=(.+)" reference)
- (let ((var (match-string 1 reference))
- (ref (match-string 2 reference)))
- (when (string-match "(.+):(.+)" reference)
- (find-file (match-string 1 reference))
- (setf ref (match-string 2 reference)))
- ;; follow the reference in the current file
- (case ref
- ("previous"
- )
- ("next")
- (t ))
- ))))
- (provide 'litorgy-reference)
- ;;; litorgy-reference.el ends here
|