~ruther/guix-local

3a09e1d2e8ef976e5d5e35d47fcb92ae501a651e — Cyrill Schenkel 11 years ago ebc32b3
ui: Fix handling of periods by fill-paragraph.

Fixes <http://bugs.gnu.org/17468>.

* guix/ui.scm (fill-paragraph): Two spaces after period and no spaces before newline.
* tests/ui.scm: New test case.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2 files changed, 20 insertions(+), 10 deletions(-)

M guix/ui.scm
M tests/ui.scm
M guix/ui.scm => guix/ui.scm +15 -10
@@ 393,15 393,17 @@ converted to a space; sequences of more than one line break are preserved."
         ((#\newline)
          `(,column ,(+ 1 newlines) ,chars))
         (else
          (let ((chars  (case newlines
                          ((0) chars)
                          ((1) (cons #\space chars))
                          (else
                           (append (make-list newlines #\newline) chars))))
                (column (case newlines
                          ((0) column)
                          ((1) (+ 1 column))
                          (else 0))))
          (let* ((spaces (if (and (pair? chars) (eqv? (car chars) #\.)) 2 1))
                 (chars  (case newlines
                           ((0) chars)
                           ((1)
                            (append (make-list spaces #\space) chars))
                           (else
                            (append (make-list newlines #\newline) chars))))
                 (column (case newlines
                           ((0) column)
                           ((1) (+ spaces column))
                           (else 0))))
            (let ((chars  (cons chr chars))
                  (column (+ 1 column)))
              (if (> column width)


@@ 414,7 416,10 @@ converted to a space; sequences of more than one line break are preserved."
                          0
                          ,(if (null? after)
                               before
                               (append before (cons #\newline (cdr after)))))
                               (append before
                                       (cons #\newline
                                             (drop-while (cut eqv? #\space <>)
                                                         after)))))
                        `(,column 0 ,chars)))     ; unbreakable
                  `(,column 0 ,chars)))))))))


M tests/ui.scm => tests/ui.scm +5 -0
@@ 67,6 67,11 @@ interface, and powerful string processing.")
                   10)
   #\newline))

(test-equal "fill-paragraph, two spaces after period"
  "First line.  Second line"
  (fill-paragraph "First line.
Second line" 24))

(test-equal "package-specification->name+version+output"
  '(("guile" #f "out")
    ("guile" "2.0.9" "out")