fable-words.rkt
#lang racket
(require slideshow
         slideshow/play)

(define LaTeX (hbl-append (t "L")
                          (inset (lift-above-baseline (scale/improve-new-text (t "A") .8) 4)
                                 -6 0 -4 0)
                          (t "T")
                          (inset (lift-above-baseline (t "E") -6) -4 0 0 0)
                          (t "X")))

(define C (t "C"))
(define is-well-known (t " is well-known to be an effective programming"))
(define is-well-known2 (launder is-well-known))
(define building-systems-software (t "building systems software."))
(define typesetting-technical-papers (t "typesetting technical papers."))
(define first-template
  (vl-append (vl-append
              (lbl-superimpose
               (hbl-append (ghost C) (ghost is-well-known))
               (hbl-append (ghost LaTeX) (ghost is-well-known2)))
              (hbl-append
               (t "language for ")
               (lbl-superimpose (ghost building-systems-software)
                                (ghost typesetting-technical-papers))))))

(define performance (t "performance"))
(define beautiful-output (t "beautiful output"))
(define and-provides (t " and provides"))
(define and-provides2 (launder and-provides))

(define is-designed-for (t " is designed for "))
(define is-designed-for2 (launder is-designed-for))

(define maintain-invariants (t "maintain invariants or detect errors early."))
(define check-formulas (t "check formulas or to run examples."))

(define second-template
  (vl-append 
   (hbl-append
    (t "After all, ")
    (lbl-superimpose
     (hbl-append (ghost C)
                 (ghost is-designed-for)
                 (ghost performance)
                 (ghost and-provides))
     (hbl-append (ghost LaTeX)
                 (ghost is-designed-for2)
                 (ghost beautiful-output)
                 (ghost and-provides2))))
   (hbl-append (t "no help to ")
               (lbl-superimpose (ghost maintain-invariants)
                                (ghost check-formulas)))))

(slide 
 (vl-append 100 
            (pin-over
             (pin-over
              (pin-over
               first-template
               building-systems-software lt-find building-systems-software)
              is-well-known lt-find is-well-known)
             C lt-find C)
            (ghost second-template)))

(play-n
 #:steps 20
 (λ (n12 n34)
   (define-values (n1 n2) (split-phase n12))
   (define-values (n3 n4) (split-phase n34))
   
   (vl-append 100
              (slide-pict 
               (pin-over
                (pin-over
                 first-template
                 building-systems-software
                 lt-find
                 (fade-pict n2
                            (lt-superimpose building-systems-software
                                            (ghost typesetting-technical-papers))
                            (lt-superimpose (ghost building-systems-software)
                                            typesetting-technical-papers)))
                C
                lt-find
                (fade-pict n2 (lt-superimpose C (ghost LaTeX)) LaTeX))
               is-well-known 
               is-well-known is-well-known2
               n1)
              
              (slide-pict 
               (slide-pict 
                (slide-pict 
                 (pin-over
                  (pin-over
                   second-template
                   maintain-invariants
                   lt-find
                   (fade-pict n4
                              (lbl-superimpose maintain-invariants
                                               (ghost check-formulas))
                              (lbl-superimpose (ghost maintain-invariants)
                                               check-formulas)))
                  C
                  lt-find
                  (fade-pict n4 (lt-superimpose C (ghost LaTeX)) LaTeX))
                 (fade-pict n4
                            (lbl-superimpose performance (ghost beautiful-output))
                            (lbl-superimpose (ghost performance) beautiful-output))
                 performance beautiful-output
                 n3)
                is-designed-for
                is-designed-for is-designed-for2
                n3)
               and-provides
               and-provides and-provides2
               n3))))