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

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

[nongnu] elpa/gptel b634f05fe5 218/273: gptel: Tweak markdown to org con


From: ELPA Syncer
Subject: [nongnu] elpa/gptel b634f05fe5 218/273: gptel: Tweak markdown to org conversion
Date: Wed, 1 May 2024 10:02:29 -0400 (EDT)

branch: elpa/gptel
commit b634f05fe50712f98b1e49a8bc0a3316e228a850
Author: Karthik Chikmagalur <karthikchikmagalur@gmail.com>
Commit: Karthik Chikmagalur <karthikchikmagalur@gmail.com>

    gptel: Tweak markdown to org conversion
    
    gptel.el (gptel--convert-markdown->org,
    gptel--stream-convert-markdown->org): Handle the case of Markdown
    bullet lists that begin with a "*", which the Gemini LLMs produce
    often.  Address #238.
---
 gptel.el | 62 +++++++++++++++++++++++++++++++++++---------------------------
 1 file changed, 35 insertions(+), 27 deletions(-)

diff --git a/gptel.el b/gptel.el
index cbd5094edd..5f573caeb4 100644
--- a/gptel.el
+++ b/gptel.el
@@ -1298,23 +1298,28 @@ elements."
                 (delete-char 1))
                ((looking-back "\\(?:[[:word:]]\\|\s\\)\\*\\{2\\}"
                               (max (- (point) 3) (point-min)))
-                (backward-delete-char 1))))
+                (delete-char -1))))
         ("*"
-         (if (save-match-data
-               (and (looking-back "\\(?:[[:space:]]\\|\s\\)\\(?:_\\|\\*\\)"
-                                  (max (- (point) 2) (point-min)))
-                    (not (looking-at "[[:space:]]\\|\s"))))
-             ;; Possible beginning of italics
-             (and
-              (save-excursion
-                (when (and (re-search-forward (regexp-quote (match-string 0)) 
nil t)
-                           (looking-at "[[:space]]\\|\s")
-                           (not (looking-back 
"\\(?:[[:space]]\\|\s\\)\\(?:_\\|\\*\\)"
-                                              (max (- (point) 2) 
(point-min)))))
-                  (backward-delete-char 1)
-                  (insert "/") t))
-              (progn (backward-delete-char 1)
-                     (insert "/")))))))
+         (cond
+          ((save-match-data
+             (and (looking-back "\\(?:[[:space:]]\\|\s\\)\\(?:_\\|\\*\\)"
+                                (max (- (point) 2) (point-min)))
+                  (not (looking-at "[[:space:]]\\|\s"))))
+           ;; Possible beginning of emphasis
+           (and
+            (save-excursion
+              (when (and (re-search-forward (regexp-quote (match-string 0))
+                                            (line-end-position) t)
+                         (looking-at "[[:space]]\\|\s")
+                         (not (looking-back 
"\\(?:[[:space]]\\|\s\\)\\(?:_\\|\\*\\)"
+                                            (max (- (point) 2) (point-min)))))
+                (delete-char -1) (insert "/") t))
+            (progn (delete-char -1) (insert "/"))))
+          ((save-excursion
+             (ignore-errors (backward-char 2))
+             (looking-at "\\(?:$\\|\\`\\)\n\\*[[:space:]]"))
+           ;; Bullet point, replace with hyphen
+           (delete-char -1) (insert "-"))))))
     (buffer-string)))
 
 (defun gptel--stream-convert-markdown->org ()
@@ -1363,18 +1368,21 @@ text stream."
                    (delete-char 1))
                   ((looking-back "\\(?:[[:word:]]\\|\s\\)\\*\\{2\\}"
                                  (max (- (point) 3) (point-min)))
-                   (backward-delete-char 1))))
+                   (delete-char -1))))
                 ((and "*" (guard (not in-src-block)))
-                 (when (save-match-data
-                         (save-excursion
-                           (backward-char 2)
-                           (or
-                            (looking-at
-                             
"[^[:space:][:punct:]\n]\\(?:_\\|\\*\\)\\(?:[[:space:][:punct:]]\\|$\\)")
-                            (looking-at
-                             
"\\(?:[[:space:][:punct:]]\\)\\(?:_\\|\\*\\)\\([^[:space:][:punct:]]\\|$\\)"))))
-                   (backward-delete-char 1)
-                   (insert "/"))))))
+                 (save-match-data
+                   (save-excursion
+                     (ignore-errors (backward-char 2))
+                     (cond
+                      ((or (looking-at
+                            
"[^[:space:][:punct:]\n]\\(?:_\\|\\*\\)\\(?:[[:space:][:punct:]]\\|$\\)")
+                           (looking-at
+                            
"\\(?:[[:space:][:punct:]]\\)\\(?:_\\|\\*\\)\\([^[:space:][:punct:]]\\|$\\)"))
+                       ;; Emphasis, replace with slashes
+                       (forward-char 2) (delete-char -1) (insert "/"))
+                      ((looking-at "\\(?:$\\|\\`\\)\n\\*[[:space:]]")
+                       ;; Bullet point, replace with hyphen
+                       (forward-char 2) (delete-char -1) (insert "-")))))))))
           (if noop-p
               (buffer-substring (point) start-pt)
             (prog1 (buffer-substring (point) (point-max))



reply via email to

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