wisp
 
(Arne Babenhauserheide)
2013-12-03: kittify works. Now we only need to implement unkittity.

kittify works. Now we only need to implement unkittity.

diff --git a/examples/kit-encode.w b/examples/kit-encode.w
--- a/examples/kit-encode.w
+++ b/examples/kit-encode.w
@@ -1,7 +1,10 @@
 #!./wisp-multiline.sh
 ; !#
 
-define base60chars 
+use-modules 
+  srfi srfi-1
+
+define base60chars
   . "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ_abcdefghijkmnopqrstuvwxyz"
 
 define : base60encode number
@@ -9,42 +12,138 @@ define : base60encode number
     if : < quotient 60
       string-append (substring base60chars quotient (+ 1 quotient)) base60
       let : : remainder : floor-remainder quotient 60
-        moddown 
-          string-append 
+        moddown
+          string-append
             substring base60chars remainder : + 1 remainder
             . base60
           floor-quotient quotient 60
 
-define : base60decode string 
+define : base60decode string
   let decode : (number 0) (rest string)
     if : = 1 : string-length rest
        + (* number 60) : string-index base60chars : string-ref rest 0
-       decode 
+       decode
          + (* number 60) : string-index base60chars : string-ref rest 0
          string-drop rest 1
 
-define testnumbers 
-  let 
+define testnumbers
+  let
     : start : list 0 1 10 60 59 61 100 1000 1e4 1e5 1e6 1e7 1e8 1e9 64 128
       multiplesof256 1000
     let loop : (numbers start) (exponent 1)
       if : > exponent multiplesof256
         . numbers
-        loop 
+        loop
           append numbers : list : expt 256 exponent
           + 1 exponent
-        
+
 
 define : displaywithnewline foo
   display foo
   newline
-; map displaywithnewline 
-;     map base60encode 
+; map displaywithnewline
+;     map base60encode
 ;         map inexact->exact testnumbers
-; map displaywithnewline 
-;   map base60decode 
-;     map base60encode 
+; map displaywithnewline
+;   map base60decode
+;     map base60encode
 ;         map inexact->exact testnumbers
 
-displaywithnewline 
-  base60encode : list-ref testnumbers : - (length testnumbers) 1
+define kitlogo "
+
+                                                     ......                   .................   ...............   ...................................
+                                              .............                 .................     ...............   ...................................
+                                   .          .............               .................       ...............   ...................................
+                              ........         ............             .................         ...............   ...................................
+                          .............         ...........           .................           ...............   ...................................
+                         ...............        ...........         .................             ...............   ...................................
+                           ..............        ..........       .................               ...............             ...............
+                             .............        .........     ..................                ...............             ...............
+                ...            ............       .........   .................                   ...............             ...............
+              ........           ............      ........   ...............                     ...............             ...............
+             ............          ...........      .......   .............                       ...............             ...............
+           .................         .. .......     .......   .............                       ...............             ...............
+          .....................        .........     ......   ...............                     ...............             ...............
+               ...................       ........    ......   .................                   ...............             ...............
+                    .................      ........   .....     .................                 ...............             ...............
+                          ..............     .......   ....       .................               ...............             ...............
+      ..                       ............    ......  ....         .................             ...............             ...............
+      ...........                   ..........   .....  ...           .................           ...............             ...............
+     ......................               .......   ...  ..             .................         ...............             ...............
+     ................................          .....  .. ..               .................       ...............             ...............
+     ..........................................       . . .                 .................     ...............             ...............
+     ......................................................                   .................   ...............             ...............
+
+"
+define kitlogosmall "
+     ...  ....    .... .... ........
+      ...  ...  ....   .... ........
+ ....   .. .......     ....   ....
+    .... .. .......    ....   ....
+....    .... .  ....   ....   ....
+..............    .... ....   ....
+Karlsruher Institut fuer Technologie
+
+"
+
+define : kittify numbers
+  . "Display a list of numbers as Text in a KIT Logo."
+  let* 
+    : base60numbers : map base60encode numbers
+      requiredletters : + (length base60numbers) : apply + : map string-length base60numbers
+      logo kitlogosmall
+      charsinlogo : string-count logo #\.
+      requiredlogos : ceiling-quotient requiredletters charsinlogo
+      text : xsubstring logo 0 : * requiredlogos : string-length logo
+    let logofyer
+      : kittified "" ; the new logo with the numbers
+        rawlogo text ; the template
+        nums base60numbers ; the numbers to add to the logo
+        justadded #f ; did I just add a number, in that case, keep one .
+      if : equal? rawlogo ""
+         . kittified
+         let : : s : substring rawlogo 0 1
+           if : not : equal? s "."
+              logofyer 
+                string-append kittified s
+                string-drop rawlogo 1
+                . nums
+                . justadded
+              ; else: we have a .
+              if justadded ; need one more . to separate numbers
+                 logofyer
+                   string-append kittified s
+                   string-drop rawlogo 1
+                   . nums
+                   . #f
+                 if : = 0 : length nums ; no more numbers to add, just add a .
+                   logofyer
+                     string-append kittified s
+                     string-drop rawlogo 1
+                     . nums
+                     . #f
+                   ; check whether the last number was completely
+                   ; added. In that case drop the number and note that
+                   ; we just added a number
+                   if : = 0 : string-length : list-ref nums 0
+                     logofyer
+                       . kittified
+                       . rawlogo
+                       drop nums 1
+                       . #t
+                     ; otherwise add the first char of the number to
+                     ; kittified and take it away from the number.
+                     let : : firstnum : list-ref nums 0
+                       logofyer
+                         string-append kittified : substring firstnum 0 1
+                         string-drop rawlogo 1
+                         append (list (string-drop firstnum 1)) : drop nums 1
+                         . #f ; not yet done
+
+
+
+                     
+display : kittify : map inexact->exact testnumbers
+newline
+
+; TODO: unkittify: first take out "Karlsruher Institut fuer Technologie" and all spaces, then split by . and base60decode the result.