# unicode.tcl --
# Inspect the available characters for a part of the UNICODE table
#
package require Tktable
# fillArray --
# Fill the array with unicode characters
#
# Arguments:
# array Name of the array
# norows Number of rows (number of columns is fixed to 16)
#
# Result:
# None
#
# Side effect:
# The array is filled with unicode characters: 0 to 16*norows-1
#
proc fillArray {array norows} {
upvar $array chars
set nocols 16
set chars(0,0) "Offset"
for { set col 1 } { $col <= $nocols } { incr col } {
set code [format "%x" [expr {$col-1}]]
set chars(0,$col) $code
}
set unicode 0
for { set row 1 } { $row <= $norows } { incr row } {
set code [format "%x" $unicode]
set chars($row,0) $code
for { set col 1 } { $col <= $nocols } { incr col } {
set code [format "%x" $unicode]
set chars($row,$col) [subst \\u$code]
incr unicode
}
}
}
# showArray --
# Show the table
#
# Arguments:
# w Widget that will contain the table
# array Name of the array
# norows Number of rows
#
# Result:
# None
#
# Side effect:
# The array is shown
#
proc showArray {w array norows} {
if { $w == "." } {
set t .table
set x .xscroll
set y .yscroll
} else {
set t $w.table
set x $w.xscroll
set y $w.yscroll
}
table $t -rows $norows -cols 17 \
-colwidth 6 \
-height 10 \
-titlerows 1 -titlecols 1 -variable ::$array \
-xscrollcommand "$x set" \
-yscrollcommand "$y set"
scrollbar $x -orient horizontal \
-command "$t xview"
scrollbar $y -orient vertical \
-command "$t yview"
grid $t $y
grid $x x
grid $t -sticky news
grid $x -sticky ew
grid $y -sticky ns
}
# main --
# Set up the main screen and fill it
#
global unicode_array
fillArray unicode_array 100
showArray . unicode_array 100Richard Suchenwirth 2003-01-05 - This is my first little Tcl project on the iPaq: a Unicode page browser that allows to inspect which characters are available. In a spinbox you can select which page to display (00..FF hex). Each row starts with the hex digits of the second byte of the first character in the row. Caveat: Automatic font-finding doesn't work on iPAQ, so you have to pick a font, and see only those Unicodes that it has - the below works for inspecting Korean Hangul.
set pages {}
set f {"Baekmuk Dotum" 9}
for {set i 0} {$i <=255} {incr i} {
lappend pages [format %02X $i]
}
frame .f
label .f.l -text "Unicode page"
spinbox .f.s -values $pages -width 2 -command {redo .c %s} -textvar page
set page 00
entry .f.e -textvar entry -font $f
eval pack [winfo childr .f] -side left
pack .f.e -fill x -expand 1
canvas .c -width 235 -height 215 -bg white
eval pack [winfo childr .] -anchor w
proc redo {w page} {
$w delete all
set xd [split 0123456789ABCDEF ""]
set y 10
foreach i $xd {
if !0x$page$i continue
set x 10
$w create text $x $y -text ${i}0
foreach j $xd {
incr x 13
$w create text $x $y -text [subst \\u$page$i$j] -tag char -font $::f
}
incr y 13
}
}
proc next incr {
set p [expr (0x$::page+$incr)%256]
set ::page [format %02X $p]
}
redo .c 00
bind . <Up> {redo .c [next 1]}
bind . <Down> {redo .c [next -1]}
.c bind char <1> {
append entry [.c itemcget current -text]
.f.e select range 0 end
clipboard clear
clipboard append $entry
}
focus .f.e
bind . <Left> {
exec wish $argv0 &; exit
}By clicking on a character you can copy it to the entry widget at top right, but neither selection nor clipboard appear to work to make that string available for pasting into other apps.WJP 2008-02-04: See also UnicodeDataBrowser.
TclNote
: Unicode codepoints sequence friendly text editor.

