|
|
@@ -57,7 +57,7 @@
|
|
|
"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))))
|
|
|
+ (delq nil (mapcar (lambda (pair) (if (eq (car pair) :var) (cdr pair))) params))))
|
|
|
|
|
|
(defun litorgy-reference-parse (reference)
|
|
|
"Parse a reference to an external resource returning a list
|
|
|
@@ -65,19 +65,31 @@ 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 ))
|
|
|
- ))))
|
|
|
+ (if (string-match "\\(.+\\)=\\(.+\\)" reference)
|
|
|
+ (let ((var (match-string 1 reference))
|
|
|
+ (ref (match-string 2 reference))
|
|
|
+ direction)
|
|
|
+ (when (string-match "\\(.+\\):\\(.+\\)" reference)
|
|
|
+ (find-file (match-string 1 reference))
|
|
|
+ (setf ref (match-string 2 reference)))
|
|
|
+ (cons var (progn
|
|
|
+ (cond ;; follow the reference in the current file
|
|
|
+ ((string= ref "previous") (setq direction -1))
|
|
|
+ ((string= ref "next") (setq direction 1))
|
|
|
+ (t
|
|
|
+ (goto-char (point-min))
|
|
|
+ (setq direction 1)
|
|
|
+ (unless (re-search-forward
|
|
|
+ (concat "^#\\+TBLNAME:[ \t]*" (regexp-quote ref) "[ \t]*$") nil t)
|
|
|
+ (setq id-loc (org-id-find name-or-id 'marker)
|
|
|
+ buffer (marker-buffer id-loc)
|
|
|
+ loc (marker-position id-loc))
|
|
|
+ (move-marker id-loc nil))))
|
|
|
+ (while (not (org-at-table-p))
|
|
|
+ (forward-line direction)
|
|
|
+ (if (or (= (point) (point-min)) (= (point) (point-max)))
|
|
|
+ (error "no table found")))
|
|
|
+ (org-table-to-lisp)))))))
|
|
|
|
|
|
(provide 'litorgy-reference)
|
|
|
;;; litorgy-reference.el ends here
|