X-Git-Url: http://git.kpe.io/?p=kmrcl.git;a=blobdiff_plain;f=strings.lisp;h=732e8f075b9ac501e94443ae0b0324c778b23781;hp=8eb08f74e9faa7ac1b243ee78988db6b2a239444;hb=ab5f800e2939665c968b9e97519d99bddb39251d;hpb=37c6b4baf974335c53828b760ed023f37098cf19 diff --git a/strings.lisp b/strings.lisp index 8eb08f7..732e8f0 100644 --- a/strings.lisp +++ b/strings.lisp @@ -552,11 +552,24 @@ for characters in a string" (defun string-maybe-shorten (str maxlen) - (let ((len (length str))) - (if (<= len maxlen) - str - (concatenate 'string (subseq str 0 (- maxlen 3)) "...")))) + (string-elide str maxlen :end)) +(defun string-elide (str maxlen position) + (declare (fixnum maxlen)) + (let ((len (length str))) + (declare (fixnum len)) + (cond + ((<= len maxlen) + str) + ((<= maxlen 3) + "...") + ((eq position :middle) + (multiple-value-bind (mid remain) (truncate maxlen 2) + (let ((end1 (- mid 1)) + (start2 (- len (- mid 2) remain))) + (concatenate 'string (subseq str 0 end1) "..." (subseq str start2))))) + ((or (eq position :end) t) + (concatenate 'string (subseq str 0 (- maxlen 3)) "..."))))) (defun shrink-vector (str size) #+allegro