RSS Feed

Lisp Project of the Day

cl-org-mode

You can support this project by donating at:

Donate using PatreonDonate using Liberapay

cl-org-modemarkup

This library contains a parser for Emacs org-mode and a primitive tool for doing Literate Programming. If you are looking for better CL support for literate programming try :literate-lisp.

This parser can be interesting for people, who want to process org-mode files from the Common Lisp. For example, you can use it to write a plugin for blogging software like :coleslaw.

cl-org-mode has no any exported functions, but you can read it's sources and documentation:

git clone https://gitlab.common-lisp.net/cl-org-mode/cl-org-mode.git

Here is a short example, showing how to parse one of the articles of #poftheday and extract a code snipped:

POFTHEDAY> (cl-org-mode::read-org-file "2020-03/0001-rate-monotonic.org")
#<CL-ORG-MODE::ORG-FILE {10030B4153}>
POFTHEDAY> (cl-org-mode::node.next-node *)
#<CL-ORG-MODE::OUTLINE-NODE {10030B65D3}>
POFTHEDAY> (cl-org-mode::node.heading *)
"rate-monotonic :threads:"
POFTHEDAY> (cl-org-mode::node.next-node **)
#<CL-ORG-MODE::TEXT-NODE {100317E1D3}>
POFTHEDAY> (cl-org-mode::node.next-node *)
#<CL-ORG-MODE::SRC-NODE {100317C9F3}>
POFTHEDAY> (cl-org-mode::node.text *)
"
POFTHEDAY> (let ((started-at (get-internal-real-time)))
             (dotimes (i 11)
               (format t \"i: ~A time: ~A~%\"
                       i
                       (coerce (/ (- (get-internal-real-time)
                                      started-at)
                                    internal-time-units-per-second)
                               'float))
               (force-output)
               ;; Here we are modelling a payload
               ;; which takes some time
               (sleep (random 0.1))
               ;; And here we'll try to add a sleep between
               ;; executions
               (sleep 0.1)))
i: 0 time: 0.0
i: 1 time: 0.166
i: 2 time: 0.323
i: 3 time: 0.431
i: 4 time: 0.624
i: 5 time: 0.776
i: 6 time: 0.95
i: 7 time: 1.142
i: 8 time: 1.286
i: 9 time: 1.46
i: 10 time: 1.616
"

I'm planning to write a simple static site generator for the Project of the Day, using this library and :spinneret for HTML generation.


Brought to you by 40Ants under Creative Commons License