X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=elpher.git;a=blobdiff_plain;f=elpher.el;h=b169f76540dd50a30c5dded2eae815865740f922;hp=034618a4abaf9372744e41c790ccec273bbb8c0c;hb=4a477550ca8d932e0708b961be515b0a64aeef69;hpb=fd2db28a9a5db37572b5b55a10d0eb130a2fa021 diff --git a/elpher.el b/elpher.el index 034618a..b169f76 100644 --- a/elpher.el +++ b/elpher.el @@ -222,6 +222,10 @@ the time when the text is rendered." '((t :inherit bold :height 1.2)) "Face used for gemini heading level 3.") +(defface elpher-gemini-preformatted + '((t :inherit fixed-pitch)) + "Face used for pre-formatted gemini text blocks.") + ;;; Model ;; @@ -1142,6 +1146,18 @@ by HEADER-LINE." (_ 'default))) "\n")))) +(defun elpher-gemini-insert-text (text-line) + "Insert a plain non-preformatted TEXT-LINE into a text/gemini document. +This function uses Emacs' auto-fill to wrap text sensibly to a maximum +width defined by elpher-gemini-max-fill-width." + (insert (elpher-process-text-for-display text-line)) + (let* ((prefix-end-idx (string-match "[^ \t*]" text-line)) + (fill-prefix (if prefix-end-idx + (let ((raw-prefix (substring text-line 0 prefix-end-idx))) + (replace-regexp-in-string "\*" " " raw-prefix)) + nil))) + (newline))) + (defun elpher-render-gemini-map (data _parameters) "Render DATA as a gemini map file, PARAMETERS is currently unused." (elpher-with-clean-buffer @@ -1151,10 +1167,12 @@ by HEADER-LINE." (dolist (line (split-string data "\n")) (cond ((string-prefix-p "```" line) (setq preformatted (not preformatted))) - (preformatted (insert (elpher-process-text-for-display line) "\n")) + (preformatted (insert (elpher-process-text-for-display + (propertize line 'face 'elpher-gemini-preformatted)) + "\n")) ((string-prefix-p "=>" line) (elpher-gemini-insert-link line)) ((string-prefix-p "#" line) (elpher-gemini-insert-header line)) - (t (insert (elpher-process-text-for-display line)) (newline))))) + (t (elpher-gemini-insert-text line))))) (elpher-cache-content (elpher-page-address elpher-current-page) (buffer-string))))