emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/denote 24e713f096 01/17: Add a File types section


From: ELPA Syncer
Subject: [elpa] externals/denote 24e713f096 01/17: Add a File types section
Date: Mon, 15 Aug 2022 01:57:34 -0400 (EDT)

branch: externals/denote
commit 24e713f096e2c9085bda2653f46ed738c7e22024
Author: Jean-Philippe Gagné Guay <jeanphilippe150@gmail.com>
Commit: Jean-Philippe Gagné Guay <jeanphilippe150@gmail.com>

    Add a File types section
    
    - Move denote--file-extension, denote--title-key-regexp and
    denote--keywords-key-regexp in the "File types" section.
    
    - Add denote--front-matter, denote--title-key-value-function,
    denote--title-value-reverse-function, denote--keywords-value-function,
    denote--keywords-value-reverse-function.
---
 denote.el | 154 +++++++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 133 insertions(+), 21 deletions(-)

diff --git a/denote.el b/denote.el
index df6caac292..f881f29303 100644
--- a/denote.el
+++ b/denote.el
@@ -568,25 +568,145 @@ output is sorted with `string-lessp'."
           (add-to-history 'denote--keyword-history kw))
         (delete-dups keywords)))
 
-;;;; Front matter or content retrieval functions
+;;;; File types
+
+(defvar denote--toml-front-matter
+  "+++
+title      = %s
+date       = %s
+tags       = %s
+identifier = %S
++++\n\n"
+  "TOML front matter.")
+
+(defvar denote--yaml-front-matter
+  "---
+title:      %s
+date:       %s
+tags:       %s
+identifier: %S
+---\n\n"
+  "YAML front matter.")
+
+(defvar denote--text-front-matter
+  "title:      %s
+date:       %s
+tags:       %s
+identifier: %s
+---------------------------\n\n"
+  "Plain text front matter.")
+
+(defvar denote--org-front-matter
+  "#+title:      %s
+#+date:       %s
+#+filetags:   %s
+#+identifier: %s
+\n"
+  "Org front matter.")
+
+(defun denote--surround-with-quotes (s)
+  "Surround string S with quotes."
+  (format "%S" s))
+
+(defun denote--trim-whitespace (s)
+  "Trim whitespace around string S."
+  (let ((trims "[ \t\n\r]+"))
+    (string-trim s trims trims)))
+
+(defun denote--trim-quotes (s)
+  "Trim quotes around string S."
+  (let ((trims "[\"']+"))
+    (string-trim s trims trims)))
+
+(defun denote--trim-whitespace-then-quotes (s)
+  "Trim whitespace then quotes around string S."
+  (denote--trim-quotes (denote--trim-whitespace s)))
+
+(defun denote--format-keywords-for-md-front-matter (keywords)
+  "Format front matter KEYWORDS for markdown file type."
+  (format "[%s]" (mapconcat (lambda (k) (format "%S" k)) keywords ", ")))
+
+(defun denote--format-keywords-for-text-front-matter (keywords)
+  "Format front matter KEYWORDS for text file type."
+  (string-join keywords "  "))
+
+(defun denote--format-keywords-for-org-front-matter (keywords)
+  "Format front matter KEYWORDS for org file type."
+  (format ":%s:" (string-join keywords ":")))
+
+(defun denote--extract-keywords-from-front-matter (keywords-string)
+  "Extract keywords list from front matter KEYWORDS-STRING."
+  (split-string keywords-string "[:,\s]+" t "[][ \"']+"))
+
+(defun denote--file-extension (file-type)
+  "Return file type extension based on FILE-TYPE."
+  (pcase file-type
+    ('markdown-toml ".md")
+    ('markdown-yaml ".md")
+    ('text ".txt")
+    ('org ".org")))
+
+(defun denote--front-matter (file-type)
+  "Return front matter based on FILE-TYPE."
+  (pcase file-type
+    ('markdown-toml denote--toml-front-matter)
+    ('markdown-yaml denote--yaml-front-matter)
+    ('text denote--text-front-matter)
+    ('org denote--org-front-matter)))
 
 (defun denote--title-key-regexp (file-type)
   "Return the title key regexp associated to FILE-TYPE."
-  (cond ((or (eq file-type 'markdown-yaml) (eq file-type 'text))
-         "^title\\s-*:")
-        ((eq file-type 'org)
-         "^#\\+title\\s-*:")
-        ((eq file-type 'markdown-toml)
-         "^title\\s-*=")))
+  (pcase file-type
+    ('markdown-toml "^title\\s-*=")
+    ('markdown-yaml "^title\\s-*:")
+    ('text "^title\\s-*:")
+    ('org "^#\\+title\\s-*:")))
 
 (defun denote--keywords-key-regexp (file-type)
   "Return the keywords key regexp associated to FILE-TYPE."
-  (cond ((or (eq file-type 'markdown-yaml) (eq file-type 'text))
-         "^tags\\s-*:")
-        ((eq file-type 'org)
-         "^#\\+filetags\\s-*:")
-        ((eq file-type 'markdown-toml)
-         "^tags\\s-*=")))
+  (pcase file-type
+    ('markdown-toml "^tags\\s-*=")
+    ('markdown-yaml "^tags\\s-*:")
+    ('text "^tags\\s-*:")
+    ('org "^#\\+filetags\\s-*:")))
+
+(defun denote--title-value-function (file-type)
+  "Function to convert the title string to a front matter title.
+Based on FILE-TYPE."
+  (pcase file-type
+    ('markdown-toml #'denote--surround-with-quotes)
+    ('markdown-yaml #'denote--surround-with-quotes)
+    ('text #'identity)
+    ('org #'identity)))
+
+(defun denote--title-value-reverse-function (file-type)
+  "Function to convert a front matter title to the title string.
+Based on FILE-TYPE."
+  (pcase file-type
+    ('markdown-toml #'denote--trim-whitespace-then-quotes)
+    ('markdown-yaml #'denote--trim-whitespace-then-quotes)
+    ('text #'denote--trim-whitespace)
+    ('org #'denote--trim-whitespace)))
+
+(defun denote--keywords-value-function (file-type)
+  "Function to convert the keywords string to a front matter keywords.
+Based on FILE-TYPE."
+  (pcase file-type
+    ('markdown-toml #'denote--format-keywords-for-md-front-matter)
+    ('markdown-yaml #'denote--format-keywords-for-md-front-matter)
+    ('text #'denote--format-keywords-for-text-front-matter)
+    ('org #'denote--format-keywords-for-org-front-matter)))
+
+(defun denote--keywords-value-reverse-function (file-type)
+  "Function to convert a front matter keywords to the keywords list.
+Based on FILE-TYPE."
+  (pcase file-type
+    ('markdown-toml #'denote--extract-keywords-from-front-matter)
+    ('markdown-yaml #'denote--extract-keywords-from-front-matter)
+    ('text #'denote--extract-keywords-from-front-matter)
+    ('org #'denote--extract-keywords-from-front-matter)))
+
+;;;; Front matter or content retrieval functions
 
 (defconst denote--retrieve-title-front-matter-key-regexp
   "^\\(?:#\\+\\)?\\(?:title\\)\\s-*[:=]"
@@ -675,14 +795,6 @@ Parse `denote--retrieve-xrefs'."
 
 ;;;;; Common helpers for new notes
 
-(defun denote--file-extension (file-type)
-  "Return file type extension based on FILE-TYPE."
-  (pcase file-type
-    ('markdown-toml ".md")
-    ('markdown-yaml ".md")
-    ('text ".txt")
-    ('org ".org")))
-
 (defun denote--format-file (path id keywords title-slug extension)
   "Format file name.
 PATH, ID, KEYWORDS, TITLE-SLUG are expected to be supplied by



reply via email to

[Prev in Thread] Current Thread [Next in Thread]