]> code.delx.au - gnu-emacs-elpa/blob - packages/web-server/examples/014-org-json.el
Merge commit '0cda39255827f283e7578cd469ae42daad9556a2' from js2-mode
[gnu-emacs-elpa] / packages / web-server / examples / 014-org-json.el
1 ;;; org-json.el --- Serve Org-mode pages as json
2 ;; suggested by nicferrier
3 ;; Copyright (C) 2014 Free Software Foundation, Inc.
4
5 (require 'json)
6 (lexical-let ((docroot "/tmp/"))
7 (ws-start
8 (lambda (request)
9 (with-slots (process headers) request
10 (let ((path (ws-in-directory-p
11 docroot (substring (cdr (assoc :GET headers)) 1))))
12 (unless (and path (file-exists-p path))
13 (ws-send-404 process))
14 (save-window-excursion
15 (find-file path)
16 (ws-response-header process 200
17 '("Content-type" . "application/json"))
18 (process-send-string process
19 (let ((tree (org-element-parse-buffer)))
20 (org-element-map tree
21 (append org-element-all-objects org-element-all-elements)
22 (lambda (el)
23 (org-element-put-property el :parent "none")
24 (org-element-put-property el :structure "none")))
25 (json-encode tree)))))))
26 9014))