X-Git-Url: https://git.hcoop.net/clinton/lisp-on-lines.git/blobdiff_plain/9f2bdea87849c3feab566d6cd49c67bb31cc1f36..d2882889dc2234eef5882eeaa79e83e4e0d638a3:/src/slot-presentations.lisp
diff --git a/src/slot-presentations.lisp b/src/slot-presentations.lisp
index 19927f9..8dff900 100644
--- a/src/slot-presentations.lisp
+++ b/src/slot-presentations.lisp
@@ -1,5 +1,11 @@
+;; i know this is horrible, but it works wonders.
+(declaim (optimize (speed 0) (space 3) (safety 0)))
+
+
(in-package :lisp-on-lines)
+
+;;;; I dont think i'm using these anymore.
(defun multiple-value-funcall->list (function &rest args)
"The function to be called by m-v-bf"
(multiple-value-call #'list (apply function args)))
@@ -16,10 +22,24 @@
(defslot-presentation text-slot-presentation ()
((rows :initarg :rows :accessor rows :initform 5)
(columns :initarg :columns :accessor columns :initform 40)
- (escape-html-p :initarg :escape-html-p :accessor escape-html-p :initform nil))
+ (escape-html-p :initarg :escape-html-p :accessor escape-html-p :initform nil)
+ (convert-newlines-p :initarg :convert-newlines-p :accessor convert-newlines-p :initform nil))
(:type-name text))
(defmethod present-slot ((slot text-slot-presentation) instance)
+ (flet ((maybe-convert-newline-and-escape-html-then-print ()
+ (let ((string (if (convert-newlines-p slot)
+ (with-output-to-string (new-string)
+ (with-input-from-string
+ (s (presentation-slot-value slot instance))
+ (loop for line = (read-line s nil)
+ while line
+ do (format new-string "~A~A" line "
"))))
+ (presentation-slot-value slot instance))))
+ (if (escape-html-p slot)
+ (<:as-html string)
+ (<:as-is string)))))
+
(if (editablep slot)
(