Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions goldfish/srfi/srfi-13.scm
Original file line number Diff line number Diff line change
Expand Up @@ -412,9 +412,8 @@
) ;define

(define (string-contains str sub-str)
(if (= (string-length sub-str) 0)
#t
(if (string-position sub-str str) #t #f)))
(if (= (string-length sub-str) 0) #t (if (string-position sub-str str) #t #f))
) ;define

(define (string-count str char/pred? . start+end)
(when (not (string? str))
Expand Down
163 changes: 92 additions & 71 deletions tools/fmt/liii/goldfmt-format.scm
Original file line number Diff line number Diff line change
Expand Up @@ -377,12 +377,16 @@
) ;define

(define (format-reader-vector-inline datum)
(let ((prefix (if (byte-vector? datum) "#u8(" "#(")))
(let loop
((i 0) (pieces '()))
(let ((out (open-output-string)))
(display (if (byte-vector? datum) "#u8(" "#(") out)
(let loop ((i 0))
(if (>= i (vector-length datum))
(string-append prefix (string-join (reverse pieces) " ") ")")
(loop (+ i 1) (cons (format-reader-datum-inline (vector-ref datum i)) pieces))
(begin (display ")" out) (get-output-string out))
(begin
(if (> i 0) (display " " out))
(display (format-reader-datum-inline (vector-ref datum i)) out)
(loop (+ i 1))
) ;begin
) ;if
) ;let
) ;let
Expand Down Expand Up @@ -452,30 +456,40 @@
) ;define

(define (format-reader-pair-inline datum)
(let loop
((current datum) (pieces '()))
(cond ((pair? current)
(loop (cdr current) (cons (format-reader-datum-inline (car current)) pieces))
) ;
((null? current) (string-append "(" (string-join (reverse pieces) " ") ")"))
(else (string-append "("
(string-join (reverse pieces) " ")
" . "
(format-reader-datum-inline current)
")"
) ;string-append
) ;else
) ;cond
(let ((out (open-output-string)))
(display "(" out)
(let loop
((current datum) (first #t))
(cond ((pair? current)
(if first
(begin (display (format-reader-datum-inline (car current)) out) (loop (cdr current) #f))
(begin (display " " out) (display (format-reader-datum-inline (car current)) out) (loop (cdr current) #f))
) ;if
) ;
((null? current) (display ")" out) (get-output-string out))
(else (display " . " out)
(display (format-reader-datum-inline current) out)
(display ")" out)
(get-output-string out)
) ;else
) ;cond
) ;let
) ;let
) ;define

(define (reader-append-selected result selected)
(let loop
((items selected) (text result))
(if (null? items)
text
(loop (cdr items) (string-append text " " (reader-selected-text (car items))))
) ;if
(let ((out (open-output-string)))
(display result out)
(let loop ((items selected))
(if (null? items)
(get-output-string out)
(begin
(display " " out)
(display (reader-selected-text (car items)) out)
(loop (cdr items))
) ;begin
) ;if
) ;let
) ;let
) ;define

Expand All @@ -497,41 +511,43 @@
) ;define

(define (reader-append-rest current result rest-indent prefix-ready? close-indent)
(cond ((pair? current)
(let ((item (car current)))
(if (newline-marker-datum? item)
(reader-append-rest (cdr current)
(string-append result (reader-newlines (cadr item)) (spaces rest-indent))
rest-indent
#t
close-indent
) ;reader-append-rest
(reader-append-rest (cdr current)
(string-append result
(if prefix-ready? "" (string-append "\n" (spaces rest-indent)))
(format-reader-datum-at item
(if prefix-ready? (last-line-column result) rest-indent)
) ;format-reader-datum-at
) ;string-append
rest-indent
#f
close-indent
) ;reader-append-rest
) ;if
) ;let
) ;
((null? current) (reader-append-close result close-indent))
(else (reader-append-close (let* ((prefix (if prefix-ready? "" (string-append "\n" (spaces rest-indent))))
(before-tail (string-append result prefix ". "))
) ;
(string-append before-tail
(format-reader-datum-at current (last-line-column before-tail))
) ;string-append
) ;let*
close-indent
) ;reader-append-close
) ;else
) ;cond
(let ((out (open-output-string)))
(display result out)
(let loop ((current current) (prefix-ready? prefix-ready?) (last-result result))
(cond ((pair? current)
(let ((item (car current)))
(if (newline-marker-datum? item)
(begin
(display (reader-newlines (cadr item)) out)
(display (spaces rest-indent) out)
(loop (cdr current) #t (spaces rest-indent))
) ;begin
(let ((prefix (if prefix-ready? "" (string-append "\n" (spaces rest-indent)))))
(display prefix out)
(let ((text (format-reader-datum-at item
(if prefix-ready? (last-line-column last-result) rest-indent))))
(display text out)
(loop (cdr current) #f text)
) ;let
) ;let
) ;if
) ;let
) ;
((null? current)
(reader-append-close (get-output-string out) close-indent))
(else
(let* ((prefix (if prefix-ready? "" (string-append "\n" (spaces rest-indent))))
(before-tail (string-append (get-output-string out) prefix ". "))
) ;
(reader-append-close
(string-append before-tail
(format-reader-datum-at current (last-line-column before-tail)))
close-indent)
) ;let*
) ;else
) ;cond
) ;let
) ;let
) ;define

(define (format-reader-pair-multiline datum indent)
Expand Down Expand Up @@ -738,17 +754,22 @@

(define (emit-string! writer text)
(display text (writer-port writer))
(let loop
((i 0) (line (writer-line writer)) (column (writer-column writer)))
(if (>= i (string-length text))
(begin
(set-writer-line! writer line)
(set-writer-column! writer column)
) ;begin
(if (char=? (string-ref text i) #\newline)
(loop (+ i 1) (+ line 1) 0)
(loop (+ i 1) line (+ column 1))
) ;if
(let ((nl (string-position "\n" text)))
(if nl
(let loop
((i 0) (line (writer-line writer)) (column (writer-column writer)))
(if (>= i (string-length text))
(begin
(set-writer-line! writer line)
(set-writer-column! writer column)
) ;begin
(if (char=? (string-ref text i) #\newline)
(loop (+ i 1) (+ line 1) 0)
(loop (+ i 1) line (+ column 1))
) ;if
) ;if
) ;let
(set-writer-column! writer (+ (writer-column writer) (string-length text)))
) ;if
) ;let
) ;define
Expand Down
72 changes: 0 additions & 72 deletions tools/fmt/liii/goldfmt-record.scm
Original file line number Diff line number Diff line change
Expand Up @@ -71,32 +71,6 @@

;; ; 使用具名参数构造 atom
(define* (make-atom (depth 0) (indent -1) (left-line 0) (right-line 0) (value #f))
;; ; 参数校验
(when (not (integer? depth))
(value-error "make-atom in liii/goldfmt-record: depth must be an integer")
) ;when
(when (< depth 0)
(value-error "make-atom in liii/goldfmt-record: depth must be non-negative")
) ;when
(when (not (integer? indent))
(value-error "make-atom in liii/goldfmt-record: indent must be an integer")
) ;when
(when (< indent -1)
(value-error "make-atom in liii/goldfmt-record: indent must be >= -1")
) ;when
(when (not (integer? left-line))
(value-error "make-atom in liii/goldfmt-record: left-line must be an integer")
) ;when
(when (< left-line 0)
(value-error "make-atom in liii/goldfmt-record: left-line must be non-negative")
) ;when
(when (not (integer? right-line))
(value-error "make-atom in liii/goldfmt-record: right-line must be an integer")
) ;when
(when (< right-line 0)
(value-error "make-atom in liii/goldfmt-record: right-line must be non-negative"
) ;value-error
) ;when
(%make-atom depth indent left-line right-line value)
) ;define*

Expand All @@ -108,14 +82,6 @@
) ;define-record-type

(define* (make-raw-string-literal (source "") (value ""))
(when (not (string? source))
(value-error "make-raw-string-literal in liii/goldfmt-record: source must be a string"
) ;value-error
) ;when
(when (not (string? value))
(value-error "make-raw-string-literal in liii/goldfmt-record: value must be a string"
) ;value-error
) ;when
(%make-raw-string-literal source value)
) ;define*

Expand All @@ -127,13 +93,6 @@
) ;define-record-type

(define* (make-char-literal (source "") (value #\space))
(when (not (string? source))
(value-error "make-char-literal in liii/goldfmt-record: source must be a string"
) ;value-error
) ;when
(when (not (char? value))
(value-error "make-char-literal in liii/goldfmt-record: value must be a char")
) ;when
(%make-char-literal source value)
) ;define*

Expand All @@ -146,37 +105,6 @@
(right-line 0)
(value #f)
) ;make-env
;; ; 参数校验
(when (not (or (string? tag-name) (eq? tag-name #f)))
(value-error "make-env in liii/goldfmt-record: tag-name must be a string or #f")
) ;when
(when (not (integer? depth))
(value-error "make-env in liii/goldfmt-record: depth must be an integer")
) ;when
(when (< depth 0)
(value-error "make-env in liii/goldfmt-record: depth must be non-negative")
) ;when
(when (not (integer? indent))
(value-error "make-env in liii/goldfmt-record: indent must be an integer")
) ;when
(when (< indent -1)
(value-error "make-env in liii/goldfmt-record: indent must be >= -1")
) ;when
(when (not (or (vector? children) (eq? children #f)))
(value-error "make-env in liii/goldfmt-record: children must be a vector or #f")
) ;when
(when (not (integer? left-line))
(value-error "make-env in liii/goldfmt-record: left-line must be an integer")
) ;when
(when (< left-line 0)
(value-error "make-env in liii/goldfmt-record: left-line must be non-negative")
) ;when
(when (not (integer? right-line))
(value-error "make-env in liii/goldfmt-record: right-line must be an integer")
) ;when
(when (< right-line 0)
(value-error "make-env in liii/goldfmt-record: right-line must be non-negative")
) ;when
(%make-env tag-name depth indent children left-line right-line value)
) ;define*

Expand Down
10 changes: 6 additions & 4 deletions tools/fmt/liii/goldfmt-scan.scm
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
;;

(define-library (liii goldfmt-scan)
(export scan scan-string scan-file)
(export scan scan-string scan-file scan-content)
(import (liii base)
(liii path)
(liii raw-string)
Expand Down Expand Up @@ -718,9 +718,8 @@
"\n"
) ;string-join
) ;define
(define (scan-file path)
(let* ((raw-content (path-read-text path))
(scanned (source-tokenize raw-content))
(define (scan-content raw-content)
(let* ((scanned (source-tokenize raw-content))
(leading-blanks (let loop
((i 0) (count 0))
(if (>= i (string-length raw-content))
Expand Down Expand Up @@ -750,5 +749,8 @@
(scan-string processed-content)
) ;let*
) ;define

(define (scan-file path)
(scan-content (path-read-text path)))
) ;begin
) ;define-library
Loading
Loading