diff --git a/ox-hugo-pandoc-cite.el b/ox-hugo-pandoc-cite.el index 629219ee..6a54c537 100644 --- a/ox-hugo-pandoc-cite.el +++ b/ox-hugo-pandoc-cite.el @@ -59,7 +59,7 @@ The list of Pandoc specific meta-data is defined in (insert fm) (goto-char (point-min)) (dolist (field ox-hugo-pandoc-cite-pandoc-meta-data) - (let ((regexp (format "^%s: " (regexp-quote field)))) + (let ((regexp (format "^%s\\(:\\| =\\) " (regexp-quote field)))) (delete-matching-lines regexp))) (buffer-substring-no-properties (point-min) (point-max)))) diff --git a/ox-hugo.el b/ox-hugo.el index 74482355..6482a7f8 100644 --- a/ox-hugo.el +++ b/ox-hugo.el @@ -131,6 +131,13 @@ subtree).") This variable is used to cache the original ox-hugo generated front-matter that's used after Pandoc Citation parsing.") +(defvar org-hugo--fm-yaml nil + "Variable to store the current Hugo post's front-matter string in YAML format. + +Pandoc understands meta-data only in YAML format. So when Pandoc +Citations are enabled, Pandoc is handed over the file with this +YAML front-matter.") + (defvar org-hugo-allow-export-after-save t "Enable flag for `org-hugo-export-wim-to-md-after-save'. When nil, the above function will not export the Org file to @@ -974,7 +981,8 @@ This is an internal function." (plist-put info :outfile outfile) (plist-put info :front-matter org-hugo--fm) (ox-hugo-pandoc-cite--parse-citations-maybe info) - (setq org-hugo--fm nil)) + (setq org-hugo--fm nil) + (setq org-hugo--fm-yaml nil)) ;;;; HTMLized section number for headline (defun org-hugo--get-headline-number (headline info &optional toc) @@ -2444,7 +2452,9 @@ INFO is a plist holding export options." (format "\n%s" body) ""))) (setq org-hugo--fm fm) - (format "%s%s%s" fm body org-hugo-footer))) + (if (org-hugo--plist-get-true-p info :hugo-pandoc-citations) + (format "%s%s%s" org-hugo--fm-yaml body org-hugo-footer) + (format "%s%s%s" fm body org-hugo-footer)))) ;;;;; Hugo Front Matter (defun org-hugo--quote-string (val &optional prefer-no-quotes format) @@ -2784,11 +2794,7 @@ the Hugo front-matter." INFO is a plist used as a communication channel." ;; (message "[hugo front matter DBG] info: %S" (pp info)) - (let* ((fm-format (if (org-hugo--plist-get-true-p info :hugo-pandoc-citations) - ;; pandoc parses fields like csl and nocite - ;; from YAML front-matter. - "yaml" - (plist-get info :hugo-front-matter-format))) + (let* ((fm-format (plist-get info :hugo-front-matter-format)) (author-list (and (plist-get info :with-author) (let ((author-raw (org-string-nw-p @@ -2956,7 +2962,8 @@ INFO is a plist used as a communication channel." (blackfriday . ,blackfriday) (menu . ,menu-alist) (resources . ,resources))) - (data `,(append data weight-data custom-fm-data))) + (data `,(append data weight-data custom-fm-data)) + ret) ;; (message "[get fm DBG] tags: %s" tags) ;; (message "dbg: hugo tags: %S" (plist-get info :hugo-tags)) ;; (message "[get fm info DBG] %S" info) @@ -2970,7 +2977,15 @@ INFO is a plist used as a communication channel." ;; (message "[fm categories DBG] %S" categories) ;; (message "[fm keywords DBG] %S" keywords) (setq data (org-hugo--replace-keys-maybe data info)) - (org-hugo--gen-front-matter data fm-format))) + (setq ret (org-hugo--gen-front-matter data fm-format)) + (if (and (string= "toml" fm-format) + (org-hugo--plist-get-true-p info :hugo-pandoc-citations)) + ;; Pandoc parses fields like csl and nocite from YAML + ;; front-matter. So create the `org-hugo--fm-yaml' + ;; front-matter in YAML format just for Pandoc. + (setq org-hugo--fm-yaml (org-hugo--gen-front-matter data "yaml")) + (setq org-hugo--fm-yaml ret)) + ret)) (defun org-hugo--calc-weight () "Calculate the weight for a Hugo post or menu item. diff --git a/test/site/content-org/all-posts.org b/test/site/content-org/all-posts.org index 12a0478c..c966be9f 100644 --- a/test/site/content-org/all-posts.org +++ b/test/site/content-org/all-posts.org @@ -4591,9 +4591,9 @@ This post should also be created in =content/section-a/=. #+include: "./all-posts.org::#nested-sections-example" :only-contents t * Pandoc :pandoc: ** Citeproc :citeproc: -*** Citations Example +*** Citations Example (TOML) :toml: :PROPERTIES: -:EXPORT_FILE_NAME: citations-example +:EXPORT_FILE_NAME: citations-example-toml :EXPORT_HUGO_PANDOC_CITATIONS: t :EXPORT_BIBLIOGRAPHY: bib/bib1.bib, bib/bib2.bib :EXPORT_HUGO_CUSTOM_FRONT_MATTER: :nocite '(@giovanelli2016 @eilan2016) @@ -4601,7 +4601,7 @@ This post should also be created in =content/section-a/=. :END: #+begin_description Test the parsing of Pandoc Citations, while also testing that ox-hugo -exported Markdown doesn't get broken. +exported Markdown doesn't get broken -- TOML front-matter. #+end_description {{{oxhugoissue(175)}}} **** Section 1 @@ -4634,6 +4634,30 @@ Text not containing *Markdown* | a | b | c | | d | e | f | |----------+----------+----------| +*** Citations Example (YAML) :yaml: +:PROPERTIES: +:EXPORT_HUGO_FRONT_MATTER_FORMAT: yaml +:EXPORT_FILE_NAME: citations-example-yaml +:EXPORT_HUGO_PANDOC_CITATIONS: t +:EXPORT_BIBLIOGRAPHY: bib/bib1.bib, bib/bib2.bib +:EXPORT_HUGO_CUSTOM_FRONT_MATTER: :nocite '(@giovanelli2016 @eilan2016) +:END: +#+begin_description +Test the parsing of Pandoc Citations, while also testing that ox-hugo +exported Markdown doesn't get broken -- YAML front-matter. +#+end_description +{{{oxhugoissue(175)}}} +**** Section 1 +Here is a test example file with an in-text citation where someone +important says something important (e.g. @loncar2016). And here is +another bit of blah with a footnote citation.[fn:5] + +See [[#citation-example-section-2]]. +**** Section 2 +:PROPERTIES: +:CUSTOM_ID: citation-example-section-2 +:END: +Content in section 2. * Export Options :export_option: ** Table of Contents (TOC) :toc: =ox-hugo= has the =with-toc= option disabled by default as Hugo has an diff --git a/test/site/content/posts/citations-example.md b/test/site/content/posts/citations-example-toml.md similarity index 89% rename from test/site/content/posts/citations-example.md rename to test/site/content/posts/citations-example-toml.md index 50b9fd52..0a1fdcd2 100644 --- a/test/site/content/posts/citations-example.md +++ b/test/site/content/posts/citations-example-toml.md @@ -1,11 +1,12 @@ ---- -title: "Citations Example" -description: > ++++ +title = "Citations Example (TOML)" +description = """ Test the parsing of Pandoc Citations, while also testing that ox-hugo - exported Markdown doesn't get broken. -tags: ["pandoc", "citeproc"] -draft: false ---- + exported Markdown doesn't get broken -- TOML front-matter. + """ +tags = ["pandoc", "citeproc", "toml"] +draft = false ++++ `ox-hugo` Issue \#[175](https://github.com/kaushalmodi/ox-hugo/issues/175) diff --git a/test/site/content/posts/citations-example-yaml.md b/test/site/content/posts/citations-example-yaml.md new file mode 100644 index 00000000..f92d16fe --- /dev/null +++ b/test/site/content/posts/citations-example-yaml.md @@ -0,0 +1,68 @@ +--- +title: "Citations Example (YAML)" +description: > + Test the parsing of Pandoc Citations, while also testing that ox-hugo + exported Markdown doesn't get broken -- YAML front-matter. +tags: ["pandoc", "citeproc", "yaml"] +draft: false +--- + +`ox-hugo` Issue +\#[175](https://github.com/kaushalmodi/ox-hugo/issues/175) + +## Section 1 + +Here is a test example file with an in-text citation where someone +important says something important (e.g. Loncar (2016)). And here is +another bit of blah with a footnote citation.[^1] + +See [Section 2](#citation-example-section-2). + +## Section 2 {#citation-example-section-2} + +Content in section 2. + +## References {#references} + +
+
+ + +
+
+ +Eilan, Naomi. 2016. "You Me and the World." *Analysis* 76 (3): 311--24. + +
+ +
+
+ +Giovanelli, Marco. 2016. "\"\...But I Still Can't Get Rid of a Sense of +Artificiality\" the Reichenbach--Einstein Debate on the Geometrization +of the Electromagnetic Field." *Studies in History and Philosophy of +Science* 54: 35--51. + +
+ +
+
+ +Loncar, Samuel. 2016. "Why Listen to Philosophers? A Constructive +Critique of Disciplinary Philosophy." *Metaphilosophy* 47 (1): 3--25. + +
+ +
+
+ +Thompson, Morgan, Toni Adleberg, Sam Sims, and Eddy Nahmias. 2016. "Why +Do Women Leave Philosophy? Surveying Students at the Introductory +Level." + +
+ + +
+ +[^1]: See (Thompson et al. 2016).