kaushalmodi / ox-hugo

A carefully crafted Org exporter back-end for Hugo
https://ox-hugo.scripter.co
GNU General Public License v3.0
867 stars 130 forks source link

Can org formatted dates inside content of a post be exported in human readable format? #662

Closed kishvanchee closed 1 year ago

kishvanchee commented 1 year ago

Unsure if this is an issue / feature request. Is there a way that ox-hugo can handle how dates in content are exported? From the docs I see information only for frontmatter https://ox-hugo.scripter.co/doc/dates/

Actual Behavior

It exports in org format.

Expected Behavior

It exports in either hugo defined / toml defined / some sane default human friendly format.

How to Reproduce the Issue

Example Org File

 ** TODO Date Test
:PROPERTIES:
:EXPORT_FILE_NAME: date-test
:END:
Dates in org mode format to hugo export

<2022-07-27 Wed>

[2022-07-27 Wed]

Generated Markdown File or Error

+++
title = "Date Test"
lastmod = 2022-07-27T19:54:55+05:30
draft = true
+++

Dates in org mode format to hugo export

<span class="timestamp-wrapper"><span class="timestamp">&lt;2022-07-27 Wed&gt;</span></span>

<span class="timestamp-wrapper"><span class="timestamp">[2022-07-27 Wed]</span></span>

Ox-Hugo Debug Information

Debug Info # Debug information for `ox-hugo` ## Emacs Version GNU Emacs 28.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.33, cairo version 1.17.6) of 2022-04-28 ## Org Version Org mode version 9.6 (9.6-??-e9da29b @ /home/kishore/.emacs.d/.local/straight/build-28.1/org/) ## Hugo Version hugo v0.101.0+extended linux/amd64 BuildDate=unknown ### Org `load-path` shadows **Warning**: Possible mixed installation of Org /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-C hides /usr/share/emacs/28.1/lisp/org/ob-C /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-forth hides /usr/share/emacs/28.1/lisp/org/ob-forth /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-core hides /usr/share/emacs/28.1/lisp/org/ob-core /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-dot hides /usr/share/emacs/28.1/lisp/org/ob-dot /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-fortran hides /usr/share/emacs/28.1/lisp/org/ob-fortran /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-octave hides /usr/share/emacs/28.1/lisp/org/ob-octave /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-lua hides /usr/share/emacs/28.1/lisp/org/ob-lua /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-groovy hides /usr/share/emacs/28.1/lisp/org/ob-groovy /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-colview hides /usr/share/emacs/28.1/lisp/org/org-colview /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-comint hides /usr/share/emacs/28.1/lisp/org/ob-comint /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-ocaml hides /usr/share/emacs/28.1/lisp/org/ob-ocaml /home/kishore/.emacs.d/.local/straight/build-28.1/org/ol-bbdb hides /usr/share/emacs/28.1/lisp/org/ol-bbdb /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-org hides /usr/share/emacs/28.1/lisp/org/ob-org /home/kishore/.emacs.d/.local/straight/build-28.1/org/ol-doi hides /usr/share/emacs/28.1/lisp/org/ol-doi /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-exp hides /usr/share/emacs/28.1/lisp/org/ob-exp /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-indent hides /usr/share/emacs/28.1/lisp/org/org-indent /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-duration hides /usr/share/emacs/28.1/lisp/org/org-duration /home/kishore/.emacs.d/.local/straight/build-28.1/org/org hides /usr/share/emacs/28.1/lisp/org/org /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-attach hides /usr/share/emacs/28.1/lisp/org/org-attach /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-emacs-lisp hides /usr/share/emacs/28.1/lisp/org/ob-emacs-lisp /home/kishore/.emacs.d/.local/straight/build-28.1/org/ox-icalendar hides /usr/share/emacs/28.1/lisp/org/ox-icalendar /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-screen hides /usr/share/emacs/28.1/lisp/org/ob-screen /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-compat hides /usr/share/emacs/28.1/lisp/org/org-compat /home/kishore/.emacs.d/.local/straight/build-28.1/org/oc-basic hides /usr/share/emacs/28.1/lisp/org/oc-basic /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-sql hides /usr/share/emacs/28.1/lisp/org/ob-sql /home/kishore/.emacs.d/.local/straight/build-28.1/org/ol-man hides /usr/share/emacs/28.1/lisp/org/ol-man /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-scheme hides /usr/share/emacs/28.1/lisp/org/ob-scheme /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-faces hides /usr/share/emacs/28.1/lisp/org/org-faces /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-ruby hides /usr/share/emacs/28.1/lisp/org/ob-ruby /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-table hides /usr/share/emacs/28.1/lisp/org/org-table /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-timer hides /usr/share/emacs/28.1/lisp/org/org-timer /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-list hides /usr/share/emacs/28.1/lisp/org/org-list /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob hides /usr/share/emacs/28.1/lisp/org/ob /home/kishore/.emacs.d/.local/straight/build-28.1/org/ox-md hides /usr/share/emacs/28.1/lisp/org/ox-md /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-src hides /usr/share/emacs/28.1/lisp/org/org-src /home/kishore/.emacs.d/.local/straight/build-28.1/org/ol-docview hides /usr/share/emacs/28.1/lisp/org/ol-docview /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-clock hides /usr/share/emacs/28.1/lisp/org/org-clock /home/kishore/.emacs.d/.local/straight/build-28.1/org/ox-org hides /usr/share/emacs/28.1/lisp/org/ox-org /home/kishore/.emacs.d/.local/straight/build-28.1/org/ox-beamer hides /usr/share/emacs/28.1/lisp/org/ox-beamer /home/kishore/.emacs.d/.local/straight/build-28.1/org/ox-html hides /usr/share/emacs/28.1/lisp/org/ox-html /home/kishore/.emacs.d/.local/straight/build-28.1/org/ox-ascii hides /usr/share/emacs/28.1/lisp/org/ox-ascii /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-latex hides /usr/share/emacs/28.1/lisp/org/ob-latex /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-sed hides /usr/share/emacs/28.1/lisp/org/ob-sed /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-loaddefs hides /usr/share/emacs/28.1/lisp/org/org-loaddefs /home/kishore/.emacs.d/.local/straight/build-28.1/org/ox-odt hides /usr/share/emacs/28.1/lisp/org/ox-odt /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-protocol hides /usr/share/emacs/28.1/lisp/org/org-protocol /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-crypt hides /usr/share/emacs/28.1/lisp/org/org-crypt /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-tangle hides /usr/share/emacs/28.1/lisp/org/ob-tangle /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-footnote hides /usr/share/emacs/28.1/lisp/org/org-footnote /home/kishore/.emacs.d/.local/straight/build-28.1/org/ol-rmail hides /usr/share/emacs/28.1/lisp/org/ol-rmail /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-feed hides /usr/share/emacs/28.1/lisp/org/org-feed /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-capture hides /usr/share/emacs/28.1/lisp/org/org-capture /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-macs hides /usr/share/emacs/28.1/lisp/org/org-macs /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-eval hides /usr/share/emacs/28.1/lisp/org/ob-eval /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-processing hides /usr/share/emacs/28.1/lisp/org/ob-processing /home/kishore/.emacs.d/.local/straight/build-28.1/org/oc-biblatex hides /usr/share/emacs/28.1/lisp/org/oc-biblatex /home/kishore/.emacs.d/.local/straight/build-28.1/org/ol hides /usr/share/emacs/28.1/lisp/org/ol /home/kishore/.emacs.d/.local/straight/build-28.1/org/ox-texinfo hides /usr/share/emacs/28.1/lisp/org/ox-texinfo /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-clojure hides /usr/share/emacs/28.1/lisp/org/ob-clojure /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-entities hides /usr/share/emacs/28.1/lisp/org/org-entities /home/kishore/.emacs.d/.local/straight/build-28.1/org/ol-mhe hides /usr/share/emacs/28.1/lisp/org/ol-mhe /home/kishore/.emacs.d/.local/straight/build-28.1/org/ox-man hides /usr/share/emacs/28.1/lisp/org/ox-man /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-haskell hides /usr/share/emacs/28.1/lisp/org/ob-haskell /home/kishore/.emacs.d/.local/straight/build-28.1/org/ol-eww hides /usr/share/emacs/28.1/lisp/org/ol-eww /home/kishore/.emacs.d/.local/straight/build-28.1/org/ox-koma-letter hides /usr/share/emacs/28.1/lisp/org/ox-koma-letter /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-macro hides /usr/share/emacs/28.1/lisp/org/org-macro /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-datetree hides /usr/share/emacs/28.1/lisp/org/org-datetree /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-js hides /usr/share/emacs/28.1/lisp/org/ob-js /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-sqlite hides /usr/share/emacs/28.1/lisp/org/ob-sqlite /home/kishore/.emacs.d/.local/straight/build-28.1/org/ol-irc hides /usr/share/emacs/28.1/lisp/org/ol-irc /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-css hides /usr/share/emacs/28.1/lisp/org/ob-css /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-maxima hides /usr/share/emacs/28.1/lisp/org/ob-maxima /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-mobile hides /usr/share/emacs/28.1/lisp/org/org-mobile /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-mouse hides /usr/share/emacs/28.1/lisp/org/org-mouse /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-goto hides /usr/share/emacs/28.1/lisp/org/org-goto /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-julia hides /usr/share/emacs/28.1/lisp/org/ob-julia /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-python hides /usr/share/emacs/28.1/lisp/org/ob-python /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-calc hides /usr/share/emacs/28.1/lisp/org/ob-calc /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-agenda hides /usr/share/emacs/28.1/lisp/org/org-agenda /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-habit hides /usr/share/emacs/28.1/lisp/org/org-habit /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-sass hides /usr/share/emacs/28.1/lisp/org/ob-sass /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-lilypond hides /usr/share/emacs/28.1/lisp/org/ob-lilypond /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-lob hides /usr/share/emacs/28.1/lisp/org/ob-lob /home/kishore/.emacs.d/.local/straight/build-28.1/org/oc hides /usr/share/emacs/28.1/lisp/org/oc /home/kishore/.emacs.d/.local/straight/build-28.1/org/ol-w3m hides /usr/share/emacs/28.1/lisp/org/ol-w3m /home/kishore/.emacs.d/.local/straight/build-28.1/org/ol-eshell hides /usr/share/emacs/28.1/lisp/org/ol-eshell /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-eshell hides /usr/share/emacs/28.1/lisp/org/ob-eshell /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-plantuml hides /usr/share/emacs/28.1/lisp/org/ob-plantuml /home/kishore/.emacs.d/.local/straight/build-28.1/org/oc-csl hides /usr/share/emacs/28.1/lisp/org/oc-csl /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-R hides /usr/share/emacs/28.1/lisp/org/ob-R /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-lint hides /usr/share/emacs/28.1/lisp/org/org-lint /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-element hides /usr/share/emacs/28.1/lisp/org/org-element /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-shell hides /usr/share/emacs/28.1/lisp/org/ob-shell /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-lisp hides /usr/share/emacs/28.1/lisp/org/ob-lisp /home/kishore/.emacs.d/.local/straight/build-28.1/org/ol-bibtex hides /usr/share/emacs/28.1/lisp/org/ol-bibtex /home/kishore/.emacs.d/.local/straight/build-28.1/org/ox hides /usr/share/emacs/28.1/lisp/org/ox /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-ditaa hides /usr/share/emacs/28.1/lisp/org/ob-ditaa /home/kishore/.emacs.d/.local/straight/build-28.1/org/ol-gnus hides /usr/share/emacs/28.1/lisp/org/ol-gnus /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-makefile hides /usr/share/emacs/28.1/lisp/org/ob-makefile /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-plot hides /usr/share/emacs/28.1/lisp/org/org-plot /home/kishore/.emacs.d/.local/straight/build-28.1/org/ol-info hides /usr/share/emacs/28.1/lisp/org/ol-info /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-perl hides /usr/share/emacs/28.1/lisp/org/ob-perl /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-pcomplete hides /usr/share/emacs/28.1/lisp/org/org-pcomplete /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-keys hides /usr/share/emacs/28.1/lisp/org/org-keys /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-archive hides /usr/share/emacs/28.1/lisp/org/org-archive /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-awk hides /usr/share/emacs/28.1/lisp/org/ob-awk /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-inlinetask hides /usr/share/emacs/28.1/lisp/org/org-inlinetask /home/kishore/.emacs.d/.local/straight/build-28.1/org/oc-natbib hides /usr/share/emacs/28.1/lisp/org/oc-natbib /home/kishore/.emacs.d/.local/straight/build-28.1/org/ox-publish hides /usr/share/emacs/28.1/lisp/org/ox-publish /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-java hides /usr/share/emacs/28.1/lisp/org/ob-java /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-id hides /usr/share/emacs/28.1/lisp/org/org-id /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-num hides /usr/share/emacs/28.1/lisp/org/org-num /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-ctags hides /usr/share/emacs/28.1/lisp/org/org-ctags /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-table hides /usr/share/emacs/28.1/lisp/org/ob-table /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-refile hides /usr/share/emacs/28.1/lisp/org/org-refile /home/kishore/.emacs.d/.local/straight/build-28.1/org/ox-latex hides /usr/share/emacs/28.1/lisp/org/ox-latex /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-matlab hides /usr/share/emacs/28.1/lisp/org/ob-matlab /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-attach-git hides /usr/share/emacs/28.1/lisp/org/org-attach-git /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-tempo hides /usr/share/emacs/28.1/lisp/org/org-tempo /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-ref hides /usr/share/emacs/28.1/lisp/org/ob-ref /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-install hides /usr/share/emacs/28.1/lisp/org/org-install /home/kishore/.emacs.d/.local/straight/build-28.1/org/ob-gnuplot hides /usr/share/emacs/28.1/lisp/org/ob-gnuplot /home/kishore/.emacs.d/.local/straight/build-28.1/org/org-version hides /usr/share/emacs/28.1/lisp/org/org-version Study the output of `M-x list-load-path-shadows`. ## `ox-hugo` defcustoms
org-hugo-section “posts”
org-hugo-use-code-for-kbd nil
org-hugo-preserve-filling t
org-hugo-delete-trailing-ws t
org-hugo-prefer-hyphen-in-tags t
org-hugo-allow-spaces-in-tags t
org-hugo-tag-processing-functions (org-hugo–tag-processing-fn-replace-with-spaces-maybe org-hugo–tag-processing-fn-replace-with-hyphens-maybe)
org-hugo-auto-set-lastmod nil
org-hugo-export-with-toc nil
org-hugo-export-with-section-numbers nil
org-hugo-front-matter-format “toml”
org-hugo-default-static-subdirectory-for-externals “ox-hugo”
org-hugo-external-file-extensions-allowed-for-copying (“jpg” “jpeg” “tiff” “png” “svg” “gif” “mp4” “pdf” “odt” “doc” “ppt” “xls” “docx” “pptx” “xlsx”)
org-hugo-date-format “%Y-%m-%dT%T%z”
org-hugo-paired-shortcodes “”
org-hugo-suppress-lastmod-period 0.0
org-hugo-front-matter-format “toml”
kaushalmodi commented 1 year ago

ox-hugo tries to keep the export format similar to that of ox-html.

Here's the ox-html output of your example: image

If you looking at the Markdown output, that's not that human readable because of the HTML span tags. The span tags are useful in case you want to style the dates using CSS. If you don't style them, then of course, they don't affect the HTML rendering.

By "not human readable", if you meant the square brackets or angle brackets wrapping the dates, then I just left them for consistency as they are retained in probably all? Org backends. I had looked at the outputs of ox-ascii, ox-md and ox-html.

Here's the output of ox-ascii: image


Here's the ox-hugo's inheritance map: ox-hugo <- ox-blackfriday <- ox-md <- ox-html

Because none of the first 3 exporters tweak the export form of the timestamp element, the output you are seeing is created by org-html-timestamp from ox-html.el.

(defun org-html-timestamp (timestamp _contents info)
  "Transcode a TIMESTAMP object from Org to HTML.
CONTENTS is nil.  INFO is a plist holding contextual
information."
  (let ((value (org-html-plain-text (org-timestamp-translate timestamp) info)))
    (format "<span class=\"timestamp-wrapper\"><span class=\"timestamp\">%s</span></span>"
        (replace-regexp-in-string "--" "&#x2013;" value))))

If you wish, you can advise that function to remove the brackets from the value variable in there.

kishvanchee commented 1 year ago

@kaushalmodi fair enough. I was not aware of the inheritance map. Thank you for that. Maybe I'll customize this to my own requirement. Thank you.