12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- (require 'ob)
- (require 'ebnf2ps)
- (defvar org-babel-default-header-args:ebnf '((:style . nil)))
- (defun org-babel-execute:ebnf (body params)
- "Execute a block of Ebnf code with org-babel. This function is
- called by `org-babel-execute-src-block'"
- (save-excursion
- (let* ((dest-file (cdr (assoc :file params)))
- (dest-dir (file-name-directory dest-file))
- (dest-root (file-name-sans-extension
- (file-name-nondirectory dest-file)))
- (dest-ext (file-name-extension dest-file))
- (style (cdr (assoc :style params)))
- (current-dir default-directory)
- (result nil))
- (with-temp-buffer
- (when style (ebnf-push-style style))
- (let ((-format
- (cond ((string= ebnf-syntax 'yacc) "/*%s*/")
- ((string= ebnf-syntax 'ebnf) ";%s")
- ((string= ebnf-syntax 'iso-ebnf) "(*%s*)")
- (t (setq result
- (format "EBNF error: format %s not supported."
- ebnf-syntax))))))
- (setq ebnf-eps-prefix dest-dir)
- (insert (format comment-format (format "[%s" dest-root)))
- (newline)
- (insert body)
- (newline)
- (insert (format comment-format (format "]%s" dest-root)))
- (ebnf-eps-buffer)
- (when style (ebnf-pop-style))))
- result)))
- (provide 'ob-ebnf)
|