]> code.delx.au - gnu-emacs-elpa/blobdiff - packages/web-server/examples/014-org-json.el
Add 'packages/web-server/' from commit 'd0b6ae9df6014db2195da0081dc97cc8246f1fda'
[gnu-emacs-elpa] / packages / web-server / examples / 014-org-json.el
diff --git a/packages/web-server/examples/014-org-json.el b/packages/web-server/examples/014-org-json.el
new file mode 100644 (file)
index 0000000..822175a
--- /dev/null
@@ -0,0 +1,24 @@
+;;; org-json.el --- Serve Org-mode pages as json
+;; suggested by nicferrier
+(require 'json)
+(lexical-let ((docroot "/tmp/"))
+  (ws-start
+   (lambda (request)
+     (with-slots (process headers) request
+       (let ((path (ws-in-directory-p
+                    docroot (substring (cdr (assoc :GET headers)) 1))))
+         (unless (and path (file-exists-p path))
+           (ws-send-404 process))
+         (save-window-excursion
+           (find-file path)
+           (ws-response-header process 200
+             '("Content-type" . "application/json"))
+           (process-send-string process
+             (let ((tree (org-element-parse-buffer)))
+               (org-element-map tree
+                   (append org-element-all-objects org-element-all-elements)
+                 (lambda (el)
+                   (org-element-put-property el :parent "none")
+                   (org-element-put-property el :structure "none")))
+               (json-encode tree)))))))
+   9014))