diff --git a/assets/archive.org b/assets/archive.org index 279c11f..81cddeb 100644 --- a/assets/archive.org +++ b/assets/archive.org @@ -12,6 +12,43 @@ First we need to get all the posts t "^[0-9]\\{4\\}-[0-9][0-9]-[0-9][0-9]-.+\\.org"))) #+end_src +Word counting would be helpful, but ~count-words~ includes parts of the document +we don't want to count, like code blocks. To help us count words accurately, we +can just create a derived export backend which discards elements we don't care +about. +#+name: count-words-org +#+begin_src emacs-lisp +(defun org-org-content (_blob content _info) (or content "")) + +(org-export-define-derived-backend 'org-for-word-counting 'org + :translate-alist + `((babel-call . ignore) + (bold . org-org-content) + (code . org-org-content) + (export-block . ignore) + (headline . org-org-content) + (horizontal-rule . ignore) + (italic . org-org-content) + (keyword . ignore) + (latex-environment . ignore) + (latex-fragment . ignore) + (line-break . ignore) + (link . org-org-content) + (src-block . ignore) + (underline . org-org-content) + (verbatim . org-org-content)) + :options-alist + '((:time-stamp-file nil "timestamp" nil))) + +(defun count-words-org () + (let (content words) + (setq content (org-export-as 'org-for-word-counting)) + (with-temp-buffer + (insert content) + (setq words (count-words (point-min) (point-max)))) + words)) +#+end_src + Then we want to format the content for inclusion. #+name: post-formatting @@ -20,17 +57,19 @@ Then we want to format the content for inclusion. (with-temp-buffer (insert-file-contents file) (setq keywords (org-collect-keywords '("TITLE" "SUBTITLE" "DATE"))) - (format "+ @@html:@@ *%s* %s@@html:@@" + (format "+ @@html:@@ *%s* %s _%d0 words_ @@html:@@" (file-name-base file) (cadr (assoc "DATE" keywords)) (or (cadr (assoc "SUBTITLE" keywords)) - (cadr (assoc "TITLE" keywords)))))) + (cadr (assoc "TITLE" keywords))) + (round (/ (count-words-org) 10.0))))) #+end_src * Output :ignore: #+begin_src emacs-lisp :noweb yes :results raw :exports results <> +<> <> (mapconcat (lambda (p) (post-item p))