diff --git a/src/gemini/gemini-parser.lisp b/src/gemini/gemini-parser.lisp index b69ee62..652b77f 100644 --- a/src/gemini/gemini-parser.lisp +++ b/src/gemini/gemini-parser.lisp @@ -175,7 +175,8 @@ list-item quote-line text-line - cr-lf))) + cr-lf)) + (:function first)) (define-constant +h1-underline+ #\━ :test #'char=) @@ -495,17 +496,20 @@ (write-string (linkify link-value link-value) stream)))))))))) (defun parse-gemini-file (data) - (let* ((was-raw-mode *raw-mode*) - (actual-data (if (and (string-not-empty-p data) - (char/= (last-elt data) #\Newline)) - (strcat data (string #\Newline)) - data)) - (parsed (parse 'gemini-file actual-data :junk-allowed t))) - (if was-raw-mode - (if *raw-mode* - (list (html-utils:make-tag-node :as-is nil data)) - parsed) - parsed))) + (let* ((lines (if (string= (format nil "~%") data) + (list (format nil "~%")) + (mapcar (lambda (a) + (strcat a (string #\Newline))) + (split-lines data))))) + (loop for line in lines + collect + (let ((was-raw-mode *raw-mode*) + (parsed-line (parse 'gemini-file line :junk-allowed t))) + (if was-raw-mode + (if *raw-mode* + (html-utils:make-tag-node :as-is nil line) + parsed-line) + parsed-line))))) ;; response header