[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
- [elpa] externals/denote updated (5482ce6dad -> b84d945d58), ELPA Syncer, 2022/08/15
- [elpa] externals/denote 09232baa8d 14/17: Add comments to some functions, ELPA Syncer, 2022/08/15
- [elpa] externals/denote 96c09e65b5 15/17: Add denote--file-types-with-extension, ELPA Syncer, 2022/08/15
- [elpa] externals/denote 24e713f096 01/17: Add a File types section,
ELPA Syncer <=
- [elpa] externals/denote b84d945d58 17/17: Merge pull request #89 from jeanphilippegg/cleanup, ELPA Syncer, 2022/08/15
- [elpa] externals/denote 3d7c33e4cf 11/17: Fix denote--format-front-matter, ELPA Syncer, 2022/08/15
- [elpa] externals/denote 2d1664c276 16/17: Use when-let in denote--filetype-heuristics, ELPA Syncer, 2022/08/15
- [elpa] externals/denote e14ca11118 03/17: Implement accessor functions for denote--file-types, ELPA Syncer, 2022/08/15
- [elpa] externals/denote a270951e9b 07/17: Rename denote--retrieve-value-title and denote--retrieve-value-keywords, ELPA Syncer, 2022/08/15
- [elpa] externals/denote f9fbebd9e4 09/17: Use plists in denote-file-types, ELPA Syncer, 2022/08/15
- [elpa] externals/denote b3cd0a7d4c 02/17: Add denote--file-types, ELPA Syncer, 2022/08/15
- [elpa] externals/denote 759fe4cb4e 10/17: Fix denote--filetype-heuristics, ELPA Syncer, 2022/08/15
- [elpa] externals/denote 685152876e 08/17: Rename denote--file-types to denote-file-types, ELPA Syncer, 2022/08/15
- [elpa] externals/denote c7d8d07119 12/17: Rename save-excursion and save-restriction when using with-temp-buffer, ELPA Syncer, 2022/08/15