diff options
author | JJ | 2023-05-02 20:13:08 +0000 |
---|---|---|
committer | JJ | 2023-05-02 20:13:08 +0000 |
commit | f0f5c29ec7ff009100e063f38bebf613054f44d7 (patch) | |
tree | 320d822f1faad4f3bc2d5760c4a0ac4ebe5beb26 /antiformatter/src/formatter.rkt | |
parent | ab451b3466b7f5151db9556fdf326934f86bd246 (diff) |
Add the antiformatter
Diffstat (limited to 'antiformatter/src/formatter.rkt')
-rw-r--r-- | antiformatter/src/formatter.rkt | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/antiformatter/src/formatter.rkt b/antiformatter/src/formatter.rkt new file mode 100644 index 0000000..770251f --- /dev/null +++ b/antiformatter/src/formatter.rkt @@ -0,0 +1,52 @@ +#lang racket + +(require racket/cmdline) +(provide mangle mangle-parens? mangle-indents? mangle-newlines?) + +(define (random-paren) + (match (random 0 3) + (0 (list "(" ")")) + (1 (list "[" "]")) + (2 (list "{" "}")))) + +(define (random-newline) + (make-string (random 0 3) #\newline)) + +(define (random-indentation at-least) + (make-string (+ at-least (random 0 3)) #\space)) + +(define indent 0) +(define mangle-parens? (make-parameter #t)) +(define mangle-indents? (make-parameter #f)) +(define mangle-newlines? (make-parameter #t)) + +; horrid hack +(define (mangle sexp) + (string-append "#lang racket \n" + (mangle-sexp (rest (first (rest (rest (rest (first sexp))))))))) + +(define (mangle-sexp sexp) + (set! indent (+ indent 2)) + (if (not (list? sexp)) (error 'mangle "not an s-exp") + (if (empty? sexp) "" + (let ((paren (random-paren))) + (string-append + (if (mangle-indents?) (random-indentation indent) "") + (if (mangle-parens?) (first paren) ")") + (mangle-params sexp) + (if (mangle-newlines?) (random-newline) "") + (if (mangle-indents?) (random-indentation indent) "") + (if (mangle-parens?) (last paren) ")")))))) + +(define (mangle-params sexp) + (set! indent (max (- indent 2) 0)) + (if (not (list? sexp)) (~a sexp) + (if (empty? sexp) "" + (let ((param (first sexp))) + (string-join (list + (if (list? param) + (mangle-sexp param) + (if (string? param) + (string-append "\"" (~a param) "\"") + (~a param))) + (mangle-params (rest sexp)))))))) |