1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 11:40:18 +02:00

Remove remaining "display" uses in (web http)

* module/web/http.scm (header-writer): Default to calling put-string.
  (put-list): Rename from write-list, take the port first, and call the
  put-item function with port then value.  Adapt all callers.
  (write-date): Rename display-digits to put-digits.
  (put-challenge): Rename from write-challenge, adapt arguments to put
  convention, and adapt callers.
  (declare-symbol-list-header!): Use put-symbol.
  (declare-integer-header!): Use put-non-negative-integer.o
  (declare-entity-tag-list-header!): Use put-entity-tag-list.
  ("If-Range", "Etag"): Adapt to put-entity-tag.
  (make-chunked-output-port): Use put-char.
This commit is contained in:
Andy Wingo 2017-02-08 08:58:46 +01:00
parent 96b994b6f8
commit ecdff904cb

View file

@ -145,11 +145,12 @@ is string?."
(define (header-writer sym) (define (header-writer sym)
"Return a procedure that writes values for headers named SYM to a "Return a procedure that writes values for headers named SYM to a
port. The resulting procedure takes two arguments: a value and a port. port. The resulting procedure takes two arguments: a value and a port.
The default writer is display." The default writer will call put-string."
(let ((decl (lookup-header-decl sym))) (let ((decl (lookup-header-decl sym)))
(if decl (if decl
(header-decl-writer decl) (header-decl-writer decl)
display))) (lambda (val port)
(put-string port val)))))
(define (read-header-line port) (define (read-header-line port)
"Read an HTTP header line and return it without its final CRLF or LF. "Read an HTTP header line and return it without its final CRLF or LF.
@ -308,7 +309,7 @@ as an ordered alist."
(list-of? val string?)) (list-of? val string?))
(define (write-list-of-strings val port) (define (write-list-of-strings val port)
(write-list val port display ", ")) (put-list port val put-string ", "))
(define (split-header-names str) (define (split-header-names str)
(map string->header (split-and-trim str))) (map string->header (split-and-trim str)))
@ -317,10 +318,10 @@ as an ordered alist."
(list-of? val symbol?)) (list-of? val symbol?))
(define (write-header-list val port) (define (write-header-list val port)
(write-list val port (put-list port val
(lambda (x port) (lambda (port x)
(put-string port (header->string x))) (put-string port (header->string x)))
", ")) ", "))
(define (collect-escaped-string from start len escapes) (define (collect-escaped-string from start len escapes)
(let ((to (make-string len))) (let ((to (make-string len)))
@ -357,24 +358,24 @@ as an ordered alist."
(lp (1+ i) (1+ qi) escapes))) (lp (1+ i) (1+ qi) escapes)))
(bad-header-component 'qstring str)))) (bad-header-component 'qstring str))))
(define (write-list items port write-item delim) (define (put-list port items put-item delim)
(match items (match items
(() (values)) (() (values))
((item . items) ((item . items)
(write-item item port) (put-item port item)
(let lp ((items items)) (let lp ((items items))
(match items (match items
(() (values)) (() (values))
((item . items) ((item . items)
(put-string port delim) (put-string port delim)
(write-item item port) (put-item port item)
(lp items))))))) (lp items)))))))
(define (write-qstring str port) (define (write-qstring str port)
(put-char port #\") (put-char port #\")
(if (string-index str #\") (if (string-index str #\")
;; optimize me ;; optimize me
(write-list (string-split str #\") port display "\\\"") (put-list port (string-split str #\") put-string "\\\"")
(put-string port str)) (put-string port str))
(put-char port #\")) (put-char port #\"))
@ -460,15 +461,15 @@ as an ordered alist."
(_ #f))) (_ #f)))
(define (write-quality-list l port) (define (write-quality-list l port)
(write-list l port (put-list port l
(lambda (x port) (lambda (port x)
(let ((q (car x)) (let ((q (car x))
(str (cdr x))) (str (cdr x)))
(put-string port str) (put-string port str)
(when (< q 1000) (when (< q 1000)
(put-string port ";q=") (put-string port ";q=")
(write-quality q port)))) (write-quality q port))))
",")) ","))
(define* (parse-non-negative-integer val #:optional (start 0) (define* (parse-non-negative-integer val #:optional (start 0)
(end (string-length val))) (end (string-length val)))
@ -544,9 +545,9 @@ as an ordered alist."
(define* (write-key-value-list list port #:optional (define* (write-key-value-list list port #:optional
(val-writer default-val-writer) (delim ", ")) (val-writer default-val-writer) (delim ", "))
(write-list (put-list
list port port list
(lambda (x port) (lambda (port x)
(match x (match x
((k . #f) ((k . #f)
(put-symbol port k)) (put-symbol port k))
@ -630,9 +631,9 @@ as an ordered alist."
(define* (write-param-list list port #:optional (define* (write-param-list list port #:optional
(val-writer default-val-writer)) (val-writer default-val-writer))
(write-list (put-list
list port port list
(lambda (item port) (lambda (port item)
(write-key-value-list item port val-writer ";")) (write-key-value-list item port val-writer ";"))
",")) ","))
@ -840,7 +841,7 @@ as an ordered alist."
(parse-asctime-date str))))) (parse-asctime-date str)))))
(define (write-date date port) (define (write-date date port)
(define (display-digits n digits port) (define (put-digits port n digits)
(define zero (char->integer #\0)) (define zero (char->integer #\0))
(let lp ((tens (expt 10 (1- digits)))) (let lp ((tens (expt 10 (1- digits))))
(when (> tens 0) (when (> tens 0)
@ -855,7 +856,7 @@ as an ordered alist."
((0) "Sun, ") ((1) "Mon, ") ((2) "Tue, ") ((0) "Sun, ") ((1) "Mon, ") ((2) "Tue, ")
((3) "Wed, ") ((4) "Thu, ") ((5) "Fri, ") ((3) "Wed, ") ((4) "Thu, ") ((5) "Fri, ")
((6) "Sat, ") (else (error "bad date" date)))) ((6) "Sat, ") (else (error "bad date" date))))
(display-digits (date-day date) 2 port) (put-digits port (date-day date) 2)
(put-string port (put-string port
(case (date-month date) (case (date-month date)
((1) " Jan ") ((2) " Feb ") ((3) " Mar ") ((1) " Jan ") ((2) " Feb ") ((3) " Mar ")
@ -863,13 +864,13 @@ as an ordered alist."
((7) " Jul ") ((8) " Aug ") ((9) " Sep ") ((7) " Jul ") ((8) " Aug ") ((9) " Sep ")
((10) " Oct ") ((11) " Nov ") ((12) " Dec ") ((10) " Oct ") ((11) " Nov ") ((12) " Dec ")
(else (error "bad date" date)))) (else (error "bad date" date))))
(display-digits (date-year date) 4 port) (put-digits port (date-year date) 4)
(put-char port #\space) (put-char port #\space)
(display-digits (date-hour date) 2 port) (put-digits port (date-hour date) 2)
(put-char port #\:) (put-char port #\:)
(display-digits (date-minute date) 2 port) (put-digits port (date-minute date) 2)
(put-char port #\:) (put-char port #\:)
(display-digits (date-second date) 2 port) (put-digits port (date-second date) 2)
(put-string port " GMT"))) (put-string port " GMT")))
;; Following https://tools.ietf.org/html/rfc7232#section-2.3, an entity ;; Following https://tools.ietf.org/html/rfc7232#section-2.3, an entity
@ -903,7 +904,7 @@ as an ordered alist."
(((? string?) . _) #t) (((? string?) . _) #t)
(_ #f))) (_ #f)))
(define (write-entity-tag val port) (define (put-entity-tag port val)
(match val (match val
((tag . strong?) ((tag . strong?)
(unless strong? (put-string port "W/")) (unless strong? (put-string port "W/"))
@ -928,8 +929,8 @@ as an ordered alist."
(define (entity-tag-list? val) (define (entity-tag-list? val)
(list-of? val entity-tag?)) (list-of? val entity-tag?))
(define (write-entity-tag-list val port) (define (put-entity-tag-list port val)
(write-list val port write-entity-tag ", ")) (put-list port val put-entity-tag ", "))
;; credentials = auth-scheme #auth-param ;; credentials = auth-scheme #auth-param
;; auth-scheme = token ;; auth-scheme = token
@ -1030,7 +1031,7 @@ as an ordered alist."
((((? symbol?) . (? key-value-list?)) ...) #t) ((((? symbol?) . (? key-value-list?)) ...) #t)
(_ #f))) (_ #f)))
(define (write-challenge val port) (define (put-challenge port val)
(match val (match val
((scheme . params) ((scheme . params)
(put-symbol port scheme) (put-symbol port scheme)
@ -1038,7 +1039,7 @@ as an ordered alist."
(write-key-value-list params port)))) (write-key-value-list params port))))
(define (write-challenges val port) (define (write-challenges val port)
(write-list val port write-challenge ", ")) (put-list port val put-challenge ", "))
@ -1258,7 +1259,7 @@ treated specially, and is just returned as a plain string."
(lambda (v) (lambda (v)
(list-of? v symbol?)) (list-of? v symbol?))
(lambda (v port) (lambda (v port)
(write-list v port display ", ")))) (put-list port v put-symbol ", "))))
;; emacs: (put 'declare-header-list-header! 'scheme-indent-function 1) ;; emacs: (put 'declare-header-list-header! 'scheme-indent-function 1)
(define (declare-header-list-header! name) (define (declare-header-list-header! name)
@ -1268,7 +1269,8 @@ treated specially, and is just returned as a plain string."
;; emacs: (put 'declare-integer-header! 'scheme-indent-function 1) ;; emacs: (put 'declare-integer-header! 'scheme-indent-function 1)
(define (declare-integer-header! name) (define (declare-integer-header! name)
(declare-header! name (declare-header! name
parse-non-negative-integer non-negative-integer? display)) parse-non-negative-integer non-negative-integer?
(lambda (val port) (put-non-negative-integer port val))))
;; emacs: (put 'declare-uri-header! 'scheme-indent-function 1) ;; emacs: (put 'declare-uri-header! 'scheme-indent-function 1)
(define (declare-uri-header! name) (define (declare-uri-header! name)
@ -1319,7 +1321,7 @@ treated specially, and is just returned as a plain string."
(lambda (val port) (lambda (val port)
(if (eq? val '*) (if (eq? val '*)
(put-string port "*") (put-string port "*")
(write-entity-tag-list val port))))) (put-entity-tag-list port val)))))
;; emacs: (put 'declare-credentials-header! 'scheme-indent-function 1) ;; emacs: (put 'declare-credentials-header! 'scheme-indent-function 1)
(define (declare-credentials-header! name) (define (declare-credentials-header! name)
@ -1405,13 +1407,13 @@ treated specially, and is just returned as a plain string."
split-header-names split-header-names
list-of-header-names? list-of-header-names?
(lambda (val port) (lambda (val port)
(write-list val port (put-list port val
(lambda (x port) (lambda (port x)
(put-string port (put-string port
(if (eq? x 'close) (if (eq? x 'close)
"close" "close"
(header->string x)))) (header->string x))))
", "))) ", ")))
;; Date = "Date" ":" HTTP-date ;; Date = "Date" ":" HTTP-date
;; e.g. ;; e.g.
@ -1504,9 +1506,9 @@ treated specially, and is just returned as a plain string."
(or (not date) (date? date)))) (or (not date) (date? date))))
(_ #f))))) (_ #f)))))
(lambda (val port) (lambda (val port)
(write-list (put-list
val port port val
(lambda (w port) (lambda (port w)
(match w (match w
((code host text date) ((code host text date)
(put-non-negative-integer port code) (put-non-negative-integer port code)
@ -1652,9 +1654,9 @@ treated specially, and is just returned as a plain string."
(() (values)) (() (values))
(args (args
(put-string port ";") (put-string port ";")
(write-list (put-list
args port port args
(lambda (pair port) (lambda (port pair)
(match pair (match pair
((k . v) ((k . v)
(put-symbol port k) (put-symbol port k)
@ -1806,7 +1808,7 @@ treated specially, and is just returned as a plain string."
(lambda (val port) (lambda (val port)
(if (date? val) (if (date? val)
(write-date val port) (write-date val port)
(write-entity-tag val port)))) (put-entity-tag port val))))
;; If-Unmodified-Since = HTTP-date ;; If-Unmodified-Since = HTTP-date
;; ;;
@ -1862,9 +1864,9 @@ treated specially, and is just returned as a plain string."
((unit . ranges) ((unit . ranges)
(put-symbol port unit) (put-symbol port unit)
(put-char port #\=) (put-char port #\=)
(write-list (put-list
ranges port port ranges
(lambda (range port) (lambda (port range)
(match range (match range
((start . end) ((start . end)
(when start (put-non-negative-integer port start)) (when start (put-non-negative-integer port start))
@ -1907,7 +1909,8 @@ treated specially, and is just returned as a plain string."
(declare-header! "ETag" (declare-header! "ETag"
parse-entity-tag parse-entity-tag
entity-tag? entity-tag?
write-entity-tag) (lambda (val port)
(put-entity-tag port val)))
;; Location = URI-reference ;; Location = URI-reference
;; ;;
@ -2051,7 +2054,7 @@ KEEP-ALIVE? is true."
(let ((len (q-length queue))) (let ((len (q-length queue)))
(put-string port (number->string len 16)) (put-string port (number->string len 16))
(put-string port "\r\n") (put-string port "\r\n")
(q-for-each (lambda (elem) (write-char elem port)) (q-for-each (lambda (elem) (put-char port elem))
queue) queue)
(put-string port "\r\n")))) (put-string port "\r\n"))))
(define (close) (define (close)