rivet/packages/asciiglyphs/asciiglyphs.tcl (434 lines of code) (raw):

# hexgliphs.tcl -- # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # # The ASCII glyphs appearance was taken from Fossil # http://fossil-scm.org/ and reproduced by permission # of Richard Hipp # # Usage: # # package require AsciiGlyphs # # ::AsciiGlyphs toGlyphs <string> # namespace eval ::AsciiGlyphs:: { variable ASCIIGLYPHS variable glyphs_avail array set ASCIIGLYPHS {} proc glyph {g} { variable ASCIIGLYPHS return $ASCIIGLYPHS([string toupper $g]) } namespace export glyph proc glyph_catalog {} { variable ASCIIGLYPHS return [array names ASCIIGLYPHS] } namespace export glyph_catalog proc build_glyph {c} { variable ASCIIGLYPHS variable glyphs_avail if {[lsearch $glyphs_avail $c] < 0} { if {[string is space $c]} { set c "space" } elseif {$c == "\\"} { set c "backslash" } else { set c "*" } } #puts $c set lines [split $ASCIIGLYPHS($c) "\n"] set lines [lrange $lines 1 end-1] set l 0 foreach gliphline $lines { append hexline($l) $gliphline incr l } return [list $hexline(0) \ $hexline(1) \ $hexline(2) \ $hexline(3) \ $hexline(4) \ $hexline(5)] } proc toGlyphs {hexstring} { variable ASCIIGLYPHS variable glyphs_avail set glyphs_avail [array names ASCIIGLYPHS] set hexstring_l [split [string toupper $hexstring] ""] foreach s $hexstring_l { set s [string trim $s] set string_l [[namespace current]::build_glyph $s] for {set i 0} {$i < 6} {incr i} { lappend bigstring($i) [lindex $string_l $i] } } return [join [list [join $bigstring(0) " "] \ [join $bigstring(1) " "] \ [join $bigstring(2) " "] \ [join $bigstring(3) " "] \ [join $bigstring(4) " "] \ [join $bigstring(5) " "]] "\n"] } namespace export toGlyphs namespace ensemble create } set ::AsciiGlyphs::ASCIIGLYPHS(A) { /\ / \ / /\ \ / ____ \ /_/ \_\ } set ::AsciiGlyphs::ASCIIGLYPHS(B) { ____ | _ \ | |_) | | _ < | |_) | |____/ } set ::AsciiGlyphs::ASCIIGLYPHS(C) { _____ / ____| | | | | | |____ \_____| } set ::AsciiGlyphs::ASCIIGLYPHS(D) { _____ | __ \ | | | | | | | | | |__| | |_____/ } set ::AsciiGlyphs::ASCIIGLYPHS(E) { ______ | ____| | |__ | __| | |____ |______| } set ::AsciiGlyphs::ASCIIGLYPHS(F) { ______ | ____| | |__ | __| | | |_| } set ::AsciiGlyphs::ASCIIGLYPHS(G) { _____ / ____| | | __ | | |_ \ | |___| | \_____/ } set ::AsciiGlyphs::ASCIIGLYPHS(H) { _ _ | | | | | |_| | | _ | | | | | |_| |_| } set ::AsciiGlyphs::ASCIIGLYPHS(I) { ___ | | | | | | | | |___| } set ::AsciiGlyphs::ASCIIGLYPHS(J) { ___ | | | | _ | | | || | \____/ } set ::AsciiGlyphs::ASCIIGLYPHS(K) { _ _ | | / | | |/ / | < | |\ \ |_| \_\ } set ::AsciiGlyphs::ASCIIGLYPHS(L) { _ | | | | | | | |___ |_____| } set ::AsciiGlyphs::ASCIIGLYPHS(M) { _ _ | \ / | | \/ | | | | | | | | | |_| |_| } set ::AsciiGlyphs::ASCIIGLYPHS(N) { _ _ | \ | | | \ | | | \ \| | | |\ | |_| \__| } set ::AsciiGlyphs::ASCIIGLYPHS(O) { _____ | _ | | | | | | | | | | |_| | |_____| } set ::AsciiGlyphs::ASCIIGLYPHS(P) { ____ | _ \ | |_| | | __/ | | |_| } set ::AsciiGlyphs::ASCIIGLYPHS(Q) { _____ | _ | | | | | | |_| | |___\\| \\ } set ::AsciiGlyphs::ASCIIGLYPHS(R) { ____ | _ \ | |_| | | / | |\ \ |_| \_\ } set ::AsciiGlyphs::ASCIIGLYPHS(S) { ____ / __| | |__ \__ \ __| | |____/ } set ::AsciiGlyphs::ASCIIGLYPHS(T) { _____ |_ _| | | | | | | |_| } set ::AsciiGlyphs::ASCIIGLYPHS(U) { _ _ | | | | | | | | | | | | | |_| | \___/ } set ::AsciiGlyphs::ASCIIGLYPHS(V) { __ __ \ \ / / \ \ / / \ v / \ / v } set ::AsciiGlyphs::ASCIIGLYPHS(W) { __ __ \ \ / / \ \ /\/\ / / \ \/ \/ / \ /\ / \_/ \_/ } set ::AsciiGlyphs::ASCIIGLYPHS(X) { __ __ \ \/ / \ / / \ / /\ \ /_/ \_\ } set ::AsciiGlyphs::ASCIIGLYPHS(Y) { __ __ \ \ / / \ \/ / \ / / / /_/ } set ::AsciiGlyphs::ASCIIGLYPHS(Z) { _____ |___ | / / / / / /___ /______| } set ::AsciiGlyphs::ASCIIGLYPHS(0) { ___ / _ \ | | | | | | | | | |_| | \___/ } set ::AsciiGlyphs::ASCIIGLYPHS(1) { __ /_ | | | | | | | |_| } set ::AsciiGlyphs::ASCIIGLYPHS(2) { ___ |__ \ ) | / / / /_ |____| } set ::AsciiGlyphs::ASCIIGLYPHS(3) { ____ |___ \ __) | |__ < ___) | |____/ } set ::AsciiGlyphs::ASCIIGLYPHS(4) { _ _ | || | | || |_ |__ _| | | |_| } set ::AsciiGlyphs::ASCIIGLYPHS(5) { _____ | ____| | |__ |___ \ ___) | |____/ } set ::AsciiGlyphs::ASCIIGLYPHS(6) { __ / / / /_ | '_ \ | (_) | \___/ } set ::AsciiGlyphs::ASCIIGLYPHS(7) { ______ |____ | / / / / / / /_/ } set ::AsciiGlyphs::ASCIIGLYPHS(8) { ___ / _ \ | (_) | > _ < | (_) | \___/ } set ::AsciiGlyphs::ASCIIGLYPHS(9) { ___ / _ \ | (_) | \__, | / / /_/ } set ::AsciiGlyphs::ASCIIGLYPHS(-) { ____ |____| } set ::AsciiGlyphs::ASCIIGLYPHS(_) { ______ |______| } set ::AsciiGlyphs::ASCIIGLYPHS(:) { _ |_| _ |_| } set ::AsciiGlyphs::ASCIIGLYPHS(\;) { _ |_| _ | | |/ } set ::AsciiGlyphs::ASCIIGLYPHS(.) { _ |_| } set ::AsciiGlyphs::ASCIIGLYPHS(/) { __ / / / / / / / / /_/ } set ::AsciiGlyphs::ASCIIGLYPHS(backslash) { __ \ \ \ \ \ \ \ \ \_\ } set ::AsciiGlyphs::ASCIIGLYPHS(~) { ___ / _ \ /_/ \ \__ \__/ } set ::AsciiGlyphs::ASCIIGLYPHS(*) { \ | / _\|/_ /|\ / | \ } set ::AsciiGlyphs::ASCIIGLYPHS(space) { } package provide AsciiGlyphs 0.1