«m:;; »«x:-*- racket-indent-sequence-depth: 100; racket-indent-curly-as-sequence: t; -*-
»
«m:;;; »«x:NOTE: After changing this file you will need to M-x faceup-write-file
»«m:;;; »«x:to regenerate the .faceup test comparison file.
»«m:;;;»«x:
»«m:;;; »«x:NOTE: You may need to disable certain features -- for example
»«m:;;; »«x:global-paren-face-mode -- during the M-x faceup-write-file.
»
«k:#lang» «v:racket»

(«k:require» xml)
(«k:provide» valid-bucket-name?)

«m:;; »«x:Various def* forms are font-locked:
»
(«k:define» («f:function» foo)
  «:racket-selfeval-face:#t»)

(«k:define» ((«f:curried-function» x) y)
  («b:list» x y))

(«k:define» «v:a-var» «:racket-selfeval-face:10»)

(«b:define/contract» («f:f2» x)
  («b:any/c» . «b:->» . «b:any»)
  «:racket-selfeval-face:#t»)

(«k:define-values» («v:1st-var 2nd-var») («b:values» «:racket-selfeval-face:1» «:racket-selfeval-face:2»))

(define-thing «v:foo»)  «m:;»«x:bug 276
»
«m:;; »«x:let: font-lock identifiers
»
(«k:let» ([«v:foo» «:racket-selfeval-face:10»]
      [«v:bar» «:racket-selfeval-face:20»])
  foo)

(«k:let» «f:loop» ([«v:x» «:racket-selfeval-face:10»])
  («k:unless» («b:zero?» x)
    (loop («b:sub1» x))))

(«k:let*» ([«v:foo» «:racket-selfeval-face:10»]
       [«v:bar» «:racket-selfeval-face:20»])
  foo)

(«k:let-values» ([(«v:a» «v:b») («b:values» «:racket-selfeval-face:1» «:racket-selfeval-face:2»)])
  («b:values» a b))

(«k:let*-values» ([(«v:a» «v:b») («b:values» «:racket-selfeval-face:1» «:racket-selfeval-face:2»)])
  («b:values» a b))

(«k:letrec-values» ([(«v:a» «v:b») («b:values» «:racket-selfeval-face:1» «:racket-selfeval-face:2»)])
  («b:values» a b))

(«k:let-syntax» ([«v:foo» #«:racket-selfeval-face:'foo»])
  foo)

(«k:letrec-syntax» ([«v:foo» #«:racket-selfeval-face:'foo»])
  foo)

(«k:let-syntaxes» ([(«v:foo») #«:racket-selfeval-face:'foo»])
  foo)

(«k:letrec-syntaxes» ([(«v:foo») #«:racket-selfeval-face:'foo»])
  foo)

(«k:letrec-syntaxes+values» ([(«v:foo») #«:racket-selfeval-face:'foo»])
                        ([(a b) («b:values» «:racket-selfeval-face:1» «:racket-selfeval-face:2»)])
  foo)

«m:;; »«x:for/fold is indented correctly:
»(«k:for/fold» ([str «s:""»])
          ([ss '(«s:"a"» «s:"b"» «s:"c"»)])
  («b:string-append» str ss))

«m:;; »«x:Auto-converts word `lambda` to `λ`:
»(«k:lambda» (x) «:racket-selfeval-face:#t»)

«m:;; »«x:Or use M-C-y to insert to insert `λ` char.
»
«m:;; »«x:Smart indentation for quoted lists:
»'(«:racket-selfeval-face:1» «:racket-selfeval-face:2»
  «:racket-selfeval-face:3» «:racket-selfeval-face:4»)

«m:;; »«x:Smart indentation for vector literals:
»#(«:racket-selfeval-face:1» «:racket-selfeval-face:2»
  «:racket-selfeval-face:3» «:racket-selfeval-face:4»)

«m:;; »«x:Smart indentation for Rackjure dict literals:
»(«k:module» «f:x» «v:rackjure»
  {«:racket-selfeval-face:'a» «:racket-selfeval-face:0»
   «:racket-selfeval-face:'b» «:racket-selfeval-face:2»})

«m:;; »«x:Silly test submodule example.
»«m:;; »«x:Try using C-c C-f to Fold (hide) it, and C-c C-u to Unfold it.
»(«k:module+» «f:test»
  («k:require» rackunit)
  (check-true «:racket-selfeval-face:#t»))

«m:;; »«x:Single line comment
»
«x:#|

Multi-line
comment

|#»

«m:#;»«x:(sexpr comment)»

«m:;; »«x:Nested sexpr comments
»
(«b:list» «:racket-selfeval-face:2»
      «m:#;»«x:2»)

(«b:list» «:racket-selfeval-face:1»
      «m:#;»«x:4»
      «m:#;»«x:(3)»)

(«k:let» («m:#;»«x:[x #;1]»
      [«v:y» «:racket-selfeval-face:2»])
  y)

(«k:define» «v:x» «:racket-here-string-face:#<<FOO
asdfasdf
asdfasdf
asdfasdf
FOO
»  )

«m:#;»«x:(define x #<<BAR
asdfasdf
asdfasdf
asdfasdf
BAR
    )»

|identifier with spaces|

|;no comment|

| #|no comment|# |

(«k:define» («f:a-function» x «:racket-keyword-argument-face:#:keyword» [y «:racket-selfeval-face:0»])
  («k:and» («b:append» («b:car» '(«:racket-selfeval-face:1» «:racket-selfeval-face:2» «:racket-selfeval-face:3»))))
  («b:regexp-match?» «:racket-selfeval-face:#rx»«s:"foobar"» «s:"foobar"»)
  («b:regexp-match?» «:racket-selfeval-face:#px»«s:"foobar"» «s:"foobar"»)
  («k:define» «v:a» «:racket-selfeval-face:1»)
  («k:let» ([«v:a» «s:"foo"»]
        [«v:b» «s:"bar"»])
    («b:displayln» b))
  («k:let*» ([«v:a» «s:"foo"»]
         [«v:b» «s:"bar"»])
    («b:displayln» b))
  («k:let-values» ([(«v:a» «v:b») («b:values» «:racket-selfeval-face:1» «:racket-selfeval-face:2»)])
    «:racket-selfeval-face:#t»)
  («k:for/list» ([x («k:in-list» («b:list» «:racket-selfeval-face:1» «:racket-selfeval-face:2» («b:list» «:racket-selfeval-face:3» «:racket-selfeval-face:4»)))])
    («k:cond» [(«b:pair?» x) («b:car» x)]
          [«k:else» x])))

«m:;; »«x:Issue 261
»«s:"@|widget-id|"» @|foo|

«m:;; »«x:Issue 298
»(«k:define» «v:x» («k:begin» «s:"|"» '\|))

(«k:define» («f:foo»)
  («k:let» ([«v:x» «:racket-selfeval-face:10»])
    «:racket-selfeval-face:#t»)

  («k:let» ([«v:x» «:racket-selfeval-face:1»]
        [«v:y» «:racket-selfeval-face:2»])
    «:racket-selfeval-face:#t»)

  («k:define» «v:1/2-the-way» «:racket-selfeval-face:0»)
  («k:define» «v:less-than-1/2» «:racket-selfeval-face:0»)

  «m:;; »«x:Self-eval examples
»  («b:values»
   1/2-the-way                            «m:;»«x:should NOT be self-eval
»   less-than-1/2                          «m:;»«x:should NOT be self-eval
»   «:racket-selfeval-face:+inf.0»
   «:racket-selfeval-face:-inf.0»
   «:racket-selfeval-face:+nan.0»
   «:racket-selfeval-face:#t»
   «:racket-selfeval-face:#f»
   «:racket-selfeval-face:1»
   «:racket-selfeval-face:1.0»
   «:racket-selfeval-face:1/2»
   «:racket-selfeval-face:-1/2»
   «:racket-selfeval-face:#b100»
   «:racket-selfeval-face:#o123»
   «:racket-selfeval-face:#d123»
   «:racket-selfeval-face:#x7f7f»
   «:racket-selfeval-face:'symbol»
   «:racket-selfeval-face:'|symbol with spaces|»
   «:racket-selfeval-face:'|;no comment|»
   «:racket-selfeval-face:'| #|no comment|# |»
   «:racket-selfeval-face:'symbol-with-no-alpha/numeric-chars»
   «:racket-selfeval-face:#\c»
   «:racket-selfeval-face:#\space»
   «:racket-selfeval-face:#\newline»

   «m:;; »«x:Literal number examples
»
   «m:;; »«x:#b
»   «:racket-selfeval-face:#b1.1»
   «:racket-selfeval-face:#b-1.1»
   «:racket-selfeval-face:#b1e1»
   «:racket-selfeval-face:#b0/1»
   «:racket-selfeval-face:#b1/1»
   «:racket-selfeval-face:#b1e-1»
   «:racket-selfeval-face:#b101»

   «m:;; »«x:#d
»   «:racket-selfeval-face:#d-1.23»
   «:racket-selfeval-face:#d1.123»
   «:racket-selfeval-face:#d1e3»
   «:racket-selfeval-face:#d1e-22»
   «:racket-selfeval-face:#d1/2»
   «:racket-selfeval-face:#d-1/2»
   «:racket-selfeval-face:#d1»
   «:racket-selfeval-face:#d-1»

   «m:;; »«x:No # reader prefix -- same as #d
»   «:racket-selfeval-face:-1.23»
   «:racket-selfeval-face:1.123»
   «:racket-selfeval-face:1e3»
   «:racket-selfeval-face:1e-22»
   «:racket-selfeval-face:1/2»
   «:racket-selfeval-face:-1/2»
   «:racket-selfeval-face:1»
   «:racket-selfeval-face:-1»

   «m:;; »«x:#e
»   «:racket-selfeval-face:#e-1.23»
   «:racket-selfeval-face:#e1.123»
   «:racket-selfeval-face:#e1e3»
   «:racket-selfeval-face:#e1e-22»
   «:racket-selfeval-face:#e1»
   «:racket-selfeval-face:#e-1»
   «:racket-selfeval-face:#e1/2»
   «:racket-selfeval-face:#e-1/2»

   «m:;; »«x:#i always float
»   «:racket-selfeval-face:#i-1.23»
   «:racket-selfeval-face:#i1.123»
   «:racket-selfeval-face:#i1e3»
   «:racket-selfeval-face:#i1e-22»
   «:racket-selfeval-face:#i1/2»
   «:racket-selfeval-face:#i-1/2»
   «:racket-selfeval-face:#i1»
   «:racket-selfeval-face:#i-1»

   «m:;; »«x:#o
»   «:racket-selfeval-face:#o777.777»
   «:racket-selfeval-face:#o-777.777»
   «:racket-selfeval-face:#o777e777»
   «:racket-selfeval-face:#o777e-777»
   «:racket-selfeval-face:#o3/7»
   «:racket-selfeval-face:#o-3/7»
   «:racket-selfeval-face:#o777»
   «:racket-selfeval-face:#o-777»

   «m:;; »«x:#x
»   «:racket-selfeval-face:#x-f.f»
   «:racket-selfeval-face:#xf.f»
   «:racket-selfeval-face:#x-f»
   «:racket-selfeval-face:#xf»
   ))

(«b:define/contract» («f:valid-bucket-name?» s «:racket-keyword-argument-face:#:keyword» [dns-compliant? «:racket-selfeval-face:#t»])
  ((«b:string?») («:racket-keyword-argument-face:#:keyword» «b:boolean?») . «b:->*» . «b:boolean?»)
  («k:cond»
    [dns-compliant?
     («k:and» («b:<=» «:racket-selfeval-face:3» («b:string-length» s)) («b:<=» («b:string-length» s) «:racket-selfeval-face:63»)
          («b:not» («b:regexp-match» «:racket-selfeval-face:#px»«s:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"» s))
          («k:for/and» ([s («b:regexp-split» «:racket-selfeval-face:#rx»«s:"\\."» s)])
            («k:define» («f:valid-first-or-last?» c)
              («k:or» («b:char-lower-case?» («b:string-ref» s «:racket-selfeval-face:0»))
                  («b:char-numeric?» («b:string-ref» s «:racket-selfeval-face:0»))))
            («k:define» («f:valid-mid?» c)
              («k:or» (valid-first-or-last? c)
                  («b:equal?» c «:racket-selfeval-face:#\-»)))
            («k:define» «v:len» («b:string-length» s))
            («k:and» («b:<» «:racket-selfeval-face:0» len)
                 (valid-first-or-last? («b:string-ref» s «:racket-selfeval-face:0»))
                 (valid-first-or-last? («b:string-ref» s («b:sub1» len)))
                 («k:or» («b:<=» len «:racket-selfeval-face:2»)
                     («k:for/and» ([c («b:substring» s «:racket-selfeval-face:1» («b:sub1» len))])
                       (valid-mid? c))))))]
    [«k:else»
     («k:and» («b:<=» («b:string-length» s) «:racket-selfeval-face:255»)
          («k:for/and» ([c s])
            («k:or» («b:char-numeric?» c)
                («b:char-lower-case?» c)
                («b:char-upper-case?» c)
                («b:equal?» c «:racket-selfeval-face:#\.»)
                («b:equal?» c «:racket-selfeval-face:#\-»)
                («b:equal?» c «:racket-selfeval-face:#\_»))))]))

(«b:displayln» «s:"I'm running!"»)
