(Arne Babenhauserheide)
2013-12-04: finished the basic encoder compotent. Only missing part: The finished the basic encoder compotent. Only missing part: The commandline handling.
diff --git a/examples/kit-encode.w b/examples/kit-encode.w --- a/examples/kit-encode.w +++ b/examples/kit-encode.w @@ -3,6 +3,8 @@ use-modules srfi srfi-1 + rnrs io ports + rnrs bytevectors define base60chars . "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ_abcdefghijkmnopqrstuvwxyz" @@ -39,6 +41,7 @@ define testnumbers define : displaywithnewline foo + setlocale LC_ALL "" display foo newline ; map displaywithnewline @@ -49,6 +52,8 @@ define : displaywithnewline foo ; map base60encode ; map inexact->exact testnumbers +; This logo is a registered trademark by the Karlsruhe Institute of +; Technology (KIT). Remove this comment at your own risk. define kitlogo " ...... ................. ............... ................................... @@ -75,6 +80,8 @@ define kitlogo " ...................................................... ................. ............... ............... " +; This logo is a registered trademark by the Karlsruhe Institute of +; Technology (KIT). Remove this comment at your own risk. define kitlogosmall " ... .... .... .... ........ ... ... .... .... ........ @@ -187,14 +194,64 @@ define : unkittify text map base60decode base60numbers -display : kittify : map inexact->exact : take testnumbers 35 -newline -display : unkittify : kittify : map inexact->exact : take testnumbers 35 -newline -display : map inexact->exact : take testnumbers 35 -newline +; displaywithnewline : kittify : map inexact->exact : take testnumbers 35 +; displaywithnewline : unkittify : kittify : map inexact->exact : take testnumbers 35 +; displaywithnewline : map inexact->exact : take testnumbers 35 -; TODO: Final step: Take files, read them as bytevectors, turn the bytevectors into ints and encode them. Same in reverse. Then we can encode any file in kitty-style - uh I mean KIT-style :) +; Take files, read them as bytevectors, turn the bytevectors into ints and encode them. Same in reverse. Then we can encode any file in kitty-style - uh I mean KIT-style :) +; first some prior work: Optimization for plain text files (to get most regular characters into the 0-60 range). +define : shiftbytedownfortext number + . "Reduce a number by 65 (A becomes code number 0). If the result is negative, add 256." + let* + : reduced : - number 65 + if : >= reduced 0 + . reduced + + reduced 256 +define : shiftbyteupfortext number + . "Reduce a number by 65 (A becomes code number 0). If the result is negative, add 256." + let* + : reduced : + number 65 + if : < reduced 256 + . reduced + - reduced 256 + +define* : kittyfile filepath #:optional (text #f) + . "Kittify the contents of the file at FILEPATH, as individual bytes. + +If TEXT is #t, transform the numbers to optimize for text." + let* + : file : open-file-input-port filepath + bv : get-bytevector-all file + numbers : bytevector->u8-list bv + numbers : if text (map shiftbytedownfortext numbers) numbers + kittify numbers + +define : kittytextfile filepath + . "Kittify the contents of the file at FILEPATH, with a transformation to optimize for text files." + kittyfile filepath #t + +define* : unkittyfile filepath #:optional (text #f) + . "Un-Kittify the contents of the file at FILEPATH, returning it as bytevector. + +If TEXT is #t, transform the numbers to undo the optimization for text." + let* + : file : open-file-input-port filepath + bv : get-bytevector-all file + text : utf8->string bv + numbers : unkittify text + numbers : if text (map shiftbyteupfortext numbers) numbers + u8-list->bytevector numbers + +define : unkittytextfile filepath + . "Un-Kittify the contents of the file at FILEPATH, undoing the transformation for text and rendering at utf8-text." + utf8->string : unkittyfile filepath #t + +; displaywithnewline : kittytextfile "examples/kit-encode.w" +; displaywithnewline : kittyfile ".hg/store/00changelog.i" +displaywithnewline : unkittytextfile "1.kit" + +; TODO: Final step: Add commandline handling which allows to write into files and set the text flag and so on. +; ./kit-encode [-e|--encode|-d|--decode] [--text] [--template file] [--killstring "stringtoremove"] [-o|--output file] [file|-]