seonglae's picture
feat: wordnet 3.0 added for standalone
cb1c1cb
#!/bin/sh
# the following line is evaluated by sh but ignored by tcl \
wishwn "$0" "$@" &
# the following line is evaluated by sh but ignored by tcl \
exec true
# the preceding lines make this script self-executing on unix systems
##########################################################################
# #
# A Tcl/Tk interface for WordNet #
# by David Slomin (dgslomin@princeton.edu) - 6/97 #
# based upon the X-Windows version by Brian Gustafson - 5/91 #
# #
##########################################################################
if {$tcl_platform(platform) == "windows"} {
package require registry 1.1
}
### Default Configuration
set showcontextualhelp 0
set showglosses 1
set wordwrap 1
set showfileinfo 0
set showbyteoffset 0
set showsenseflag 0
set maxhistorylength 10
set fontname times
set fontsize 2
set fontsizelist {100 120 140 180 240}
### Indentation constants
# "->" # "=>"
set fontpt1offset(times,1) 20; set fontpt2offset(times,1) 20
set fontpt1offset(times,2) 20; set fontpt2offset(times,2) 20
set fontpt1offset(times,3) 26; set fontpt2offset(times,3) 26
set fontpt1offset(courier,1) 23; set fontpt2offset(courier,1) 23
set fontpt1offset(courier,2) 28; set fontpt2offset(courier,2) 28
set fontpt1offset(courier,3) 34; set fontpt2offset(courier,3) 34
set fontpt1offset(helvetica,1) 19; set fontpt2offset(helvetica,1) 19
set fontpt1offset(helvetica,2) 24; set fontpt2offset(helvetica,2) 24
set fontpt1offset(helvetica,3) 27; set fontpt2offset(helvetica,3) 27
# "HAS PART:" # "PART OF:"
set fonthpoffset(times,1) 66; set fontpooffset(times,1) 58
set fonthpoffset(times,2) 77; set fontpooffset(times,2) 66
set fonthpoffset(times,3) 100; set fontpooffset(times,3) 87
set fonthpoffset(courier,1) 71; set fontpooffset(courier,1) 64
set fonthpoffset(courier,2) 91; set fontpooffset(courier,2) 82
set fonthpoffset(courier,3) 111; set fontpooffset(courier,3) 100
set fonthpoffset(helvetica,1) 70; set fontpooffset(helvetica,1) 62
set fonthpoffset(helvetica,2) 80; set fontpooffset(helvetica,2) 70
set fonthpoffset(helvetica,3) 102; set fontpooffset(helvetica,3) 90
# "HAS MEMBER:" # "MEMBER OF:"
set fonthmoffset(times,1) 74; set fontmooffset(times,1) 81
set fonthmoffset(times,2) 85; set fontmooffset(times,2) 92
set fonthmoffset(times,3) 108; set fontmooffset(times,3) 118
set fonthmoffset(courier,1) 75; set fontmooffset(courier,1) 79
set fonthmoffset(courier,2) 96; set fontmooffset(courier,2) 102
set fonthmoffset(courier,3) 118; set fontmooffset(courier,3) 124
set fonthmoffset(helvetica,1) 77; set fontmooffset(helvetica,1) 84
set fonthmoffset(helvetica,2) 87; set fontmooffset(helvetica,2) 95
set fonthmoffset(helvetica,3) 111; set fontmooffset(helvetica,3) 121
# "HAS SUBSTANCE:" # "SUBSTANCE OF:"
set fonthsoffset(times,1) 105; set fontsooffset(times,1) 97
set fonthsoffset(times,2) 124; set fontsooffset(times,2) 113
set fonthsoffset(times,3) 157; set fontsooffset(times,3) 146
set fonthsoffset(courier,1) 106; set fontsooffset(courier,1) 98
set fonthsoffset(courier,2) 136; set fontsooffset(courier,2) 127
set fonthsoffset(courier,3) 166; set fontsooffset(courier,3) 155
set fonthsoffset(helvetica,1) 111; set fontsooffset(helvetica,1) 103
set fonthsoffset(helvetica,2) 127; set fontsooffset(helvetica,2) 117
set fonthsoffset(helvetica,3) 166; set fontsooffset(helvetica,3) 156
# " " # "[0-9]"
set fontspoffset(times,1) 3; set fontNUMoffset(times,1) 6
set fontspoffset(times,2) 3; set fontNUMoffset(times,2) 7
set fontspoffset(times,3) 4; set fontNUMoffset(times,3) 10
set fontspoffset(courier,1) 7; set fontNUMoffset(courier,1) 8
set fontspoffset(courier,2) 9; set fontNUMoffset(courier,2) 11
set fontspoffset(courier,3) 11; set fontNUMoffset(courier,3) 13
set fontspoffset(helvetica,1) 4; set fontNUMoffset(helvetica,1) 7
set fontspoffset(helvetica,2) 4; set fontNUMoffset(helvetica,2) 8
set fontspoffset(helvetica,3) 5; set fontNUMoffset(helvetica,3) 9
# ". "
set fontsp2offset(times,1) 6;
set fontsp2offset(times,2) 6;
set fontsp2offset(times,3) 7;
set fontsp2offset(courier,1) 12;
set fontsp2offset(courier,2) 15;
set fontsp2offset(courier,3) 19;
set fontsp2offset(helvetica,1) 7;
set fontsp2offset(helvetica,2) 7;
set fontsp2offset(helvetica,3) 11;
set labonly 0
set version "3.0"
if {$tcl_platform(platform) == "unix"} {
if {[lsearch -exact [array names env] WNHOME] == -1} {
set resourcedir "/usr/local/WordNet-3.0/lib/wnres"
} else {
set resourcedir "$env(WNHOME)/lib/wnres"
}
set configfile "$env(HOME)/.wnrc"
if [ file exists $configfile ] {
source $configfile
}
set printcommand "lpr"
}
if {$tcl_platform(platform) == "windows"} {
set UserRegPath "HKEY_CURRENT_USER\\Software\\WordNet\\3.0"
if { [registry values $UserRegPath "wnrc" ] != "" } {
eval [ registry get $UserRegPath "wnrc" ]
}
if { [registry values $UserRegPath "WNHome"] != "" } {
append resourcedir [registry get $UserRegPath "WNHome"] "/lib/wnres"
} else {
set MachineRegPath "HKEY_LOCAL_MACHINE\\Software\\WordNet\\3.0"
if { [registry values $MachineRegPath "WNHome" ] != "" } {
append resourcedir [registry get $MachineRegPath "WNHome"] "/lib/wnres"
} else {
set resourcedir "C:/Program Files/WordNet/3.0/lib/wnres"
}
}
}
### Startup
wm title . "WordNet 3.0 Browser"
### Primary Functions
proc displayvalidsearchmenus {searchword} {
global posmenu
blackout 1
set gotone 0
pack forget .wordframe.overview
for {set posnumber 1} {$posnumber <= 4} {incr posnumber} {
set pos [lindex {noun verb adj adv} [expr $posnumber - 1]]
pack forget .posmenubar.$pos
set bitfield [findvalidsearches [fixword $searchword] $posnumber]
if {$bitfield != 0} {
pack \
.posmenubar.$pos \
-side left \
-padx 2 \
-pady 2 \
-before .posmenubar.senselabel
.posmenubar.$pos.menu delete 0 end
foreach line $posmenu($posnumber) {
set label [lindex $line 0]
regsub -nocase "this" $label $searchword label
set searchtypenumber [lindex $line 1]
set abssearchtypenumber [expr abs($searchtypenumber)]
set action "\
searchanddisplay \"$searchword\" \"\$g_senses\" $posnumber \
$searchtypenumber; \
history_add \"$searchword\" \"\$g_senses\" $posnumber \
$searchtypenumber; \
pack .wordframe.overview \
-side right \
-padx 5 \
-pady 1
"
if {[expr $bitfield & [bit $abssearchtypenumber]]} {
.posmenubar.$pos.menu add command \
-label $label \
-command $action
}
}
set gotone 1
}
}
if {!$gotone} {
.statusbar.status configure \
-text "No matches found."
}
blackout 0
return $gotone
}
proc displayoverview {searchword} {
global showfileinfo
global showbyteoffset
global showsenseflag
global wordwrap
global fontNUMoffset
global fontsize
global fontname
global fontsp2offset
set fontNUMsize $fontNUMoffset($fontname,$fontsize)
set fontsp2size $fontsp2offset($fontname,$fontsize)
if {$showfileinfo == 2} {fileinfo 1} else {fileinfo 0}
if {$showbyteoffset == 2} {byteoffset 1} else {byteoffset 0}
if {$showsenseflag == 2} {senseflag 1} else {senseflag 0}
blackout 1
.results.text configure \
-state normal
.results.text delete 1.0 end
pack forget .wordframe.overview
set gotone 0
for {set posnumber 1} {$posnumber <= 4} {incr posnumber} {
set bitfield [findvalidsearches [fixword $searchword] $posnumber]
if {$bitfield != 0} {
# The 31 in the following line should correspond to the value of
# OVERVIEW defined in wnconsts.h in the WordNet library
set buf [search [fixword $searchword] $posnumber 31 -1]
set morphedword ""
set numspaces 0
set iter 0
set buflines [split $buf "\n"]
foreach line $buflines {
.results.text mark set begofline \
[.results.text index "end - 2 char"]
.results.text insert end "$line\n"
regexp -nocase -- \
"The (noun|verb|adj|adv) (.*) has \[0-9\]+ senses?" \
$line dummy dummy morphedword
set index [string first " --" $line]
if {$index != -1} {
set line [string range $line 0 [expr $index - 1]]
}
if {[regexp -indices -nocase -- \
"\[\})>,\] ($morphedword)\[0-9\]*(#\[0-9\]+)?(,|\$)" \
$line dummy indices]} {
.results.text tag add overviewhighlight \
"end - 2 lines linestart + [lindex $indices 0] chars" \
"end - 2 lines linestart + [expr \
[lindex $indices 1] + 1] chars"
} elseif {[regexp -indices -nocase -- \
"\[0-9\]+\. ($morphedword)\[0-9\]*(#\[0-9\]+)?(,|\$)" \
$line dummy indices]} {
.results.text tag add overviewhighlight \
"end - 2 lines linestart + [lindex $indices 0] chars" \
"end - 2 lines linestart + [expr \
[lindex $indices 1] + 1] chars"
}
set indent [string first "." $line]
if {$indent != -1} {
set numspaces [expr $indent * $fontNUMsize + $fontsp2size]
} else {set numspaces 0}
.results.text mark set endofline [.results.text index \
"end - 1 char"]
.results.text tag configure indent$posnumber$iter \
-lmargin2 $numspaces
.results.text tag add indent$posnumber$iter \
begofline endofline
.results.text mark set begofline [.results.text index \
"end - 2 char"]
incr iter
}
.results.text delete "end - 1 lines" end
set gotone 1
}
}
.results.text configure \
-state disabled
if {$gotone} {
.statusbar.status configure \
-text "Overview of $searchword"
}
blackout 0
setwordwrap $wordwrap
focus .results.text
return $gotone
}
proc searchanddisplay {searchword senses posnumber searchtypenumber} {
global posmenu
global showcontextualhelp
global showglosses
global showfileinfo
global showbyteoffset
global showsenseflag
blackout 1
glosses $showglosses
if {$showfileinfo > 0} {fileinfo 1} else {fileinfo 0}
if {$showbyteoffset > 0} {byteoffset 1} else {byteoffset 0}
if {$showsenseflag > 0} {senseflag 1} else {senseflag 0}
set longpos [lindex {noun verb adjective adverb} [expr $posnumber - 1]]
.results.text configure \
-state normal
.results.text delete 0.0 end
.statusbar.status configure \
-text "Searching... (press escape to abort)"
update idletasks
if {$showcontextualhelp} {
foreach line $posmenu($posnumber) {
if {[lindex $line 1] == $searchtypenumber} {
set linenumber [lsearch $posmenu($posnumber) $line]
}
}
.results.text insert end "\n[contextualhelp $posnumber $linenumber]"
.results.text mark set endofhelp [.results.text index "end - 1 char"]
.results.text tag add helpstyle 1.0 endofhelp
}
foreach sense [getsenselist $senses] {
global fontsize
global fontpt1offset
global fontpt2offset
global fonthpoffset
global fontpooffset
global fonthmoffset
global fontmooffset
global fonthsoffset
global fontsooffset
global fontspoffset
global fontname
global wordwrap
if {$wordwrap} {
set searchlines [split [search [fixword $searchword] $posnumber \
$searchtypenumber $sense] "\n"]
.results.text mark set begofline [.results.text index "end - 2 char"]
### Set indentation levels ###
set fontpt1size $fontpt1offset($fontname,$fontsize)
set fontpt2size $fontpt2offset($fontname,$fontsize)
set fonthpsize $fonthpoffset($fontname,$fontsize)
set fontposize $fontpooffset($fontname,$fontsize)
set fonthmsize $fonthmoffset($fontname,$fontsize)
set fontmosize $fontmooffset($fontname,$fontsize)
set fonthssize $fonthsoffset($fontname,$fontsize)
set fontsosize $fontsooffset($fontname,$fontsize)
set fontspsize $fontspoffset($fontname,$fontsize)
.statusbar.status configure \
-text "Formatting... (press escape to abort)"
set iter 0
set morphedword ""
set mword ""
foreach i $searchlines {
.results.text insert end $i\n
.results.text mark set endofline [.results.text index \
"end - 1 char"]
# added by RIT
regexp -nocase -- \
"\[0-9\]+ (senses|sense) of (.+)" \
$i dummy dummy mword
set morphedword [string trimright $mword]
set index [string first " --" $i]
set schar [string first " " $i]
if {$index != -1 && $schar != 0} {
set line [string range $i 0 [expr $index - 1]]
if {[regexp -indices -nocase -- \
"(\[\.\})>,\] |^|, )($morphedword)\[0-9\]*(#\[0-9\]+)?( \[(\]|,|$\)" \
$line dummy dummy indices]} {
.results.text tag add overviewhighlight \
"end - 2 lines linestart + [lindex $indices 0] chars" \
"end - 2 lines linestart + [expr \
[lindex $indices 1] + 1] chars"
}
}
set numspaces 0
set idx [string first "->" $i]
if {$idx != -1} {set numspaces \
[expr $fontpt1size + $idx * $fontspsize - 1]} \
else {set idx [string first "=>" $i]
if {$idx != -1} {set numspaces \
[expr $fontpt2size + $idx * $fontspsize]} \
else {set idx [string first "HAS PART:" $i]
if {$idx != -1} {set numspaces \
[expr $fonthpsize + $idx * $fontspsize - 1]} \
else {set idx [string first "PART OF:" $i]
if {$idx != -1} {set numspaces \
[expr $fontposize + $idx * $fontspsize - 1]} \
else {set idx [string first "HAS MEMBER:" $i]
if {$idx != -1} {set numspaces \
[expr $fonthmsize + $idx * $fontspsize - 1]} \
else {set idx [string first "MEMBER OF:" $i]
if {$idx != -1} {set numspaces \
[expr $fontmosize + $idx * $fontspsize - 1]} \
else {set idx [string first "HAS SUBSTANCE:" $i]
if {$idx != -1} {set numspaces \
[expr $fonthssize + $idx * $fontspsize]} \
else {set idx [string first "SUBSTANCE OF:" $i]
if {$idx != -1} {set numspaces \
[expr $fontsosize + $idx * $fontspsize]} \
} } } } } } }
.results.text tag configure indentstyle$iter -lmargin2 $numspaces
.results.text tag add indentstyle$iter begofline endofline
.results.text mark set begofline [.results.text index \
"end - 2 char"]
incr iter
}
} else {
.results.text insert end [search [fixword $searchword] $posnumber \
$searchtypenumber $sense]
}
setwordwrap $wordwrap
}
foreach line $posmenu($posnumber) {
if {[lindex $line 1] == $searchtypenumber} {
set label "\"[lindex $line 0]\" search for $longpos \"$searchword\""
eval [lindex $line 2]
break
}
}
.results.text configure \
-state disabled
.statusbar.status configure \
-text $label
blackout 0
}
proc history_add {searchword senses posnumber searchtypenumber} {
global posmenu
global maxhistorylength
if {$posnumber == 0} {
set label "$searchword - Overview"
set action " \
set g_searchword \"$searchword\"; \
set g_senses \"\"; \
displayvalidsearchmenus \"$searchword\"; \
displayoverview \"$searchword\"; \
.posmenubar.label configure \
-text \"Searches for $searchword:\" \
"
} else {
set longpos [lindex {Noun Verb Adjective Adverb} [expr $posnumber - 1]]
foreach line $posmenu($posnumber) {
if {[lindex $line 1] == $searchtypenumber} {
if {$senses == ""} {
set label "$searchword - $longpos / [lindex $line 0]"
} else {
set label \
"$searchword - $longpos / [lindex $line 0] / $senses"
}
break
}
}
set action " \
set g_searchword \"$searchword\"; \
set g_senses \"$senses\"; \
displayvalidsearchmenus \"$searchword\"; \
searchanddisplay \"$searchword\" \"$senses\" $posnumber \
$searchtypenumber; \
pack .wordframe.overview \
-side right \
-padx 5 \
-pady 1; \
.posmenubar.label configure \
-text \"Searches for $searchword:\" \
"
}
.menubar.history.menu insert 0 command \
-label $label \
-command $action
if {[.menubar.history.menu index end] == $maxhistorylength} {
.menubar.history.menu delete end
}
}
proc saveoptions { } {
global tcl_platform
global UserRegPath
global showcontextualhelp
global showglosses
global wordwrap
global showfileinfo
global showbyteoffset
global showsenseflag
global maxhistorylength
global fontname
global fontsize
global fontsizelist
global configfile
# Under Unix, write options settings to ".wnrc" file in user's
# home directory.
# Under Windows, write to "wnrc" key in registry.
if {$tcl_platform(platform) == "unix"} {
set c [open $configfile w]
puts $c "set showcontextualhelp $showcontextualhelp"
puts $c "set showglosses $showglosses"
puts $c "set wordwrap $wordwrap"
puts $c "set showfileinfo $showfileinfo"
puts $c "set showbyteoffset $showbyteoffset"
puts $c "set showsenseflag $showsenseflag"
puts $c "set maxhistorylength $maxhistorylength"
puts $c "set fontname $fontname"
puts $c "set fontsize $fontsize"
puts $c "set fontsizelist \{ $fontsizelist \}"
} elseif {$tcl_platform(platform) == "windows"} {
set c ""
append c "set showcontextualhelp $showcontextualhelp\n"
append c "set showglosses $showglosses\n"
append c "set wordwrap $wordwrap\n"
append c "set showfileinfo $showfileinfo\n"
append c "set showbyteoffset $showbyteoffset\n"
append c "set showsenseflag $showsenseflag\n"
append c "set maxhistorylength $maxhistorylength\n"
append c "set fontname $fontname\n"
append c "set fontsize $fontsize\n"
append c "set fontsizelist \{ $fontsizelist \}\n"
registry set $UserRegPath "wnrc" $c
}
}
proc showhelpwidget {w filename windowtitle} {
if {[winfo exist .$w]} {raise .$w; return}
toplevel .$w
wm title .$w $windowtitle
grid \
[frame .$w.top \
-relief raised \
-borderwidth 1] \
-row 0 \
-column 0 \
-sticky nsew
grid \
[frame .$w.buttons \
-relief raised \
-borderwidth 1] \
-row 1 \
-column 0 \
-sticky nsew
grid rowconfigure .$w 0 -weight 1
grid rowconfigure .$w 1 -weight 0
grid columnconfigure .$w 0 -weight 1
text .$w.top.text \
-wrap word \
-relief sunken \
-borderwidth 2 \
-font -adobe-courier-medium-r-normal-*-*-120-*-*-*-*-*-* \
-state disabled \
-yscrollcommand ".$w.top.scrolly set" \
-width 80 \
-height 25 \
-background White \
-foreground Black
scrollbar .$w.top.scrolly \
-command ".$w.top.text yview" \
-relief sunken \
-width 12
grid .$w.top.text \
-row 0 \
-column 0 \
-sticky nsew
grid .$w.top.scrolly \
-row 0 \
-column 1 \
-sticky nsew
grid rowconfigure .$w.top 0 -weight 1
grid rowconfigure .$w.top 1 -weight 0
grid columnconfigure .$w.top 0 -weight 1
grid columnconfigure .$w.top 1 -weight 0
pack \
[button .$w.buttons.dismiss \
-text "Dismiss" \
-command "destroy .$w"] \
-side top \
-padx 1 \
-pady 1
.$w.top.text configure \
-state normal
set fileid [open $filename "r"]
set filetext [read $fileid]
close $fileid
regsub -all ".\b" $filetext "" filetext
.$w.top.text insert end $filetext
.$w.top.text configure \
-state disabled
}
proc printtext {whattoprint} {
# The following line is a hack to get the passed argument to be
# recognised in bound actions, like button presses.
global printtext_whattoprint; set printtext_whattoprint $whattoprint
global tcl_platform
switch $tcl_platform(platform) {
unix {
global printcommand
toplevel .printtxt
wm title .printtxt "Print WordNet Results"
wm transient .printtxt .
scan [wm geometry .] "%dx%d+%d+%d" geom_h geom_w geom_x geom_y
wm geometry .printtxt +[expr $geom_x+50]+[expr $geom_y+50]
wm resizable .printtxt 0 0
grab set .printtxt
pack \
[frame .printtxt.top] \
[frame .printtxt.bottom] \
-side top \
-padx 10 \
-pady 10
pack \
[label .printtxt.top.label \
-text "Print command:"] \
[entry .printtxt.top.entry \
-textvariable printcommand \
-background White \
-foreground Black] \
-side left
focus .printtxt.top.entry
pack \
[button .printtxt.bottom.print \
-text "Print" \
-command {
set fileId [open "| $printcommand" w]
switch $printtext_whattoprint {
"main" {
puts $fileId [.results.text get 1.0 end]
}
"grep" {
puts $fileId [join \
[.grepwidget.results.frame.list \
get 0 end] "\n"]
}
default {}
}
close $fileId
destroy .printtxt
}] \
[button .printtxt.bottom.cancel \
-text "Cancel" \
-command {
destroy .printtxt
}] \
-side left
bind .printtxt <Return> {
.printtxt.bottom.print flash
.printtxt.bottom.print invoke
}
}
windows {
bell
}
}
}
proc savetext {whattosave} {
# The following line is a hack to get the passed argument to be
# recognised in bound actions, like button presses.
global tcl_platform
global savetext_whattosave; set savetext_whattosave $whattosave
toplevel .saveas
wm title .saveas "Save WordNet Results To File"
wm transient .saveas .
scan [wm geometry .] "%dx%d+%d+%d" geom_h geom_w geom_x geom_y
wm geometry .saveas +[expr $geom_x+50]+[expr $geom_y+50]
wm resizable .saveas 0 0
grab set .saveas
pack \
[frame .saveas.top] \
[frame .saveas.bottom] \
-side top \
-padx 10 \
-pady 10
pack \
[label .saveas.top.label \
-text "Filename:"] \
[entry .saveas.top.entry \
-textvariable filename \
-background White \
-foreground Black] \
-side left
focus .saveas.top.entry
pack \
[button .saveas.bottom.save \
-text "Save" \
-command {
if [file exists $filename] {
toplevel .savewarning
wm title .savewarning "Wordnet Warning"
wm transient .savewarning .saveas
scan [wm geometry .saveas] "%dx%d+%d+%d" \
geom_h geom_w geom_x geom_y
wm geometry .savewarning +[expr $geom_x+50]+[expr $geom_y+50]
wm resizable .savewarning 0 0
grab set .savewarning
pack \
[message .savewarning.message \
-text "The file \"$filename\" already exists.\
Choose \"append\" to add the new search results onto\
the end of the old ones. Choose \"replace\" to\
discard the old search results and store the new ones\
in their place. If you choose \"cancel,\" you will\
have the opportunity to select a different file." \
-width 300] \
[frame .savewarning.bottom] \
-side top \
-padx 10 \
-pady 10
pack \
[button .savewarning.bottom.append \
-text "Append" \
-command {
set fileId [open $filename "a"]
switch $savetext_whattosave {
"main" {
puts $fileId [.results.text get 1.0 end]
}
"grep" {
puts $fileId [join \
[.grepwidget.results.frame.list \
get 0 end] "\n"]
}
default {}
}
close $fileId
destroy .saveas
destroy .savewarning
}] \
[button .savewarning.bottom.replace \
-text "Replace" \
-command {
set fileId [open $filename "w"]
switch $savetext_whattosave {
"main" {
puts $fileId [.results.text get 1.0 end]
}
"grep" {
puts $fileId [join \
[.grepwidget.results.frame.list \
get 0 end] "\n"]
}
default {}
}
close $fileId
destroy .saveas
destroy .savewarning
}] \
[button .savewarning.bottom.cancel \
-text "Cancel" \
-command {
destroy .savewarning
}] \
-side left
bind .savewarning <Return> {
.savewarning.bottom.append flash
.savewarning.bottom.append invoke
}
} else {
set fileId [open $filename "w"]
switch $savetext_whattosave {
"main" {
puts $fileId [.results.text get 1.0 end]
}
"grep" {
puts $fileId [join [.grepwidget.results.frame.list \
get 0 end] "\n"]
}
default {}
}
close $fileId
destroy .saveas
}
}] \
[button .saveas.bottom.cancel \
-text "Cancel" \
-command {destroy .saveas}] \
-side left
bind .saveas <Return> {
.saveas.bottom.save flash
.saveas.bottom.save invoke
}
}
proc setmaxhistorylength {} {
global maxhistorylength
global tcl_platform
toplevel .histlen
wm title .histlen "Set Maximum WordNet Browser History Length"
wm transient .histlen .
scan [wm geometry .] "%dx%d+%d+%d" geom_h geom_w geom_x geom_y
wm geometry .histlen +[expr $geom_x+50]+[expr $geom_y+50]
wm resizable .histlen 0 0
grab set .histlen
pack \
[frame .histlen.f \
-relief raised \
-borderwidth 1] \
-side top \
-fill both \
-expand true
pack \
[frame .histlen.f.top] \
[frame .histlen.f.bottom] \
-side top \
-padx 10 \
-pady 10
pack \
[label .histlen.f.top.label \
-text "Maximum history length:"] \
[entry .histlen.f.top.entry \
-textvariable maxhistorylength \
-background White \
-foreground Black] \
-side left
focus .histlen.f.top.entry
pack \
[button .histlen.f.bottom.ok \
-text "Ok" \
-command {
if {[.menubar.history.menu index end] >= $maxhistorylength} {
.menubar.history.menu delete $maxhistorylength end
}
destroy .histlen
}] \
-side left
bind .histlen <Return> {
.histlen.f.bottom.ok flash
.histlen.f.bottom.ok invoke
}
}
proc showaboutbox {} {
global resourcedir
if {[winfo exist .aboutbox]} {raise .aboutbox; return}
toplevel .aboutbox
wm title .aboutbox "About WordNet Browser"
wm resizable .aboutbox 0 0
pack \
[frame .aboutbox.top \
-relief raised \
-borderwidth 1] \
[frame .aboutbox.bottom \
-relief raised \
-borderwidth 1] \
-side top \
-fill x \
-ipadx 3 \
-ipady 3
pack \
[frame .aboutbox.top.left \
-relief flat] \
[frame .aboutbox.top.right \
-relief flat] \
-side left \
-fill x \
-ipadx 3 \
-ipady 3
pack \
[label .aboutbox.top.left.icon \
-bitmap @$resourcedir/wn.xbm] \
-side left \
-padx 10
pack \
[label .aboutbox.top.right.text1 \
-anchor w \
-justify left \
-font "-adobe-helvetica-medium-r-*-*-*-180-*-*-*-*-*-*" \
-text "WordNet Browser"] \
[label .aboutbox.top.right.text2 \
-anchor w \
-justify left \
-font "-adobe-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*" \
-text "A graphical interface to the\nWordNet online lexical\
database."] \
[label .aboutbox.top.right.text3 \
-anchor w \
-justify left \
-font "-adobe-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*" \
-text "This Tcl/Tk version by David Slomin and Randee Tengi."] \
[label .aboutbox.top.right.text4 \
-anchor w \
-justify left \
-font "-adobe-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*" \
-text "Based upon an earlier X Window version by\nBrian Gustafson."] \
[label .aboutbox.top.right.text5 \
-anchor w \
-justify left \
-font "-adobe-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*" \
-text "Copyright 1991-2006\nPrinceton University Cognitive Science Lab"] \
[label .aboutbox.top.right.text6 \
-anchor w \
-justify left \
-font "-adobe-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*" \
-text "All Rights Reserved"] \
-side top \
-fill x
pack \
[button .aboutbox.bottom.ok \
-text "Dismiss" \
-command {destroy .aboutbox}] \
-side top \
-padx 3 \
-pady 2
}
proc grepword {greptype} {
global g_greptype; set g_greptype $greptype;
global g_searchword
global grepstr
global tcl_platform
if {[winfo exist .grepwidget]} {raise .grepwidget; return}
set grepstr $g_searchword
toplevel .grepwidget
switch $g_greptype {
"substring" { wm title .grepwidget "Substring search (grep)"}
"ending" { wm title .grepwidget "Ending string search (grep)"}
}
grid \
[frame .grepwidget.inputs \
-relief raised \
-borderwidth 1] \
-row 0 \
-column 0 \
-sticky nsew
grid \
[frame .grepwidget.results \
-relief raised \
-borderwidth 1] \
-row 1 \
-column 0 \
-sticky nsew
grid \
[frame .grepwidget.status \
-relief raised \
-borderwidth 1] \
-row 2 \
-column 0 \
-sticky nsew
grid \
[frame .grepwidget.buttons \
-relief raised \
-borderwidth 1] \
-row 3 \
-column 0 \
-sticky nsew
grid rowconfigure .grepwidget 0 -weight 0
grid rowconfigure .grepwidget 1 -weight 1
grid rowconfigure .grepwidget 2 -weight 0
grid rowconfigure .grepwidget 3 -weight 0
grid columnconfigure .grepwidget 0 -weight 1
tk_optionMenu .grepwidget.inputs.pos greppos Noun Verb Adjective Adverb
grid \
[label .grepwidget.inputs.label \
-text "Substring:"] \
-row 0 \
-column 0 \
-sticky ew \
-padx 2 \
-pady 2
grid \
[entry .grepwidget.inputs.word \
-textvariable grepstr \
-width 15 \
-foreground Black \
-background White] \
-row 0 \
-column 1 \
-sticky ew \
-padx 2 \
-pady 2
focus .grepwidget.inputs.word
grid \
.grepwidget.inputs.pos \
-row 0 \
-column 2 \
-sticky ew \
-padx 2 \
-pady 2
grid rowconfigure .grepwidget.inputs 0 -weight 1
grid columnconfigure .grepwidget.inputs 0 -weight 0
grid columnconfigure .grepwidget.inputs 1 -weight 1
grid columnconfigure .grepwidget.inputs 2 -weight 0
pack \
[frame .grepwidget.results.frame] \
-side top \
-fill both \
-expand true \
-padx 8 \
-pady 8
grid \
[listbox .grepwidget.results.frame.list \
-yscrollcommand ".grepwidget.results.frame.yscroll set" \
-foreground Black \
-background White \
-highlightthickness 0] \
-row 0 \
-column 0 \
-sticky nsew
grid \
[scrollbar .grepwidget.results.frame.yscroll \
-command ".grepwidget.results.frame.list yview" \
-width 12 \
-highlightthickness 0] \
-row 0 \
-column 1 \
-sticky nsew
grid rowconfigure .grepwidget.results.frame 0 -weight 1
grid columnconfigure .grepwidget.results.frame 0 -weight 1
grid columnconfigure .grepwidget.results.frame 1 -weight 0
pack \
[label .grepwidget.status.label \
-text ""] \
-side top
pack \
[frame .grepwidget.buttons.frame] \
-side top
grid \
[button .grepwidget.buttons.frame.search \
-text "Search" \
-command {
if {[.grepwidget.buttons.frame.search cget -text] == "Search"} {
if {[string length $grepstr] >= 3} {
.grepwidget.buttons.frame.search configure \
-text "Abort"
.grepwidget.status.label configure \
-text "Searching... (press escape to abort)"
bind .grepwidget <Escape> {
.grepwidget.buttons.frame.search flash
.grepwidget.buttons.frame.search invoke
}
.grepwidget.results.frame.list delete 0 end
update
set posnumber [lsearch {{} Noun Verb Adjective Adverb} \
$greppos]
set clockstart [clock seconds]
switch $g_greptype {
"substring" {
set buf [search [fixword $grepstr] $posnumber 30 0]
}
"ending" {
set buf [fixgrep [search [fixword $grepstr] $posnumber 30 0] [fixword $grepstr]]
}
}
set clockstop [clock seconds]
set buflines [split $buf \n]
foreach line $buflines {
.grepwidget.results.frame.list insert end $line
}
.grepwidget.buttons.frame.search configure \
-text "Search"
.grepwidget.status.label configure -text ""
bind .grepwidget <Escape> {}
} else {
bell
set line "Error: search string less than 3 characters\n"
.grepwidget.results.frame.list delete 0 end
.grepwidget.results.frame.list insert end $line
}
} else {
bell
abortsearch
}
}] \
-row 0 \
-column 0 \
-sticky nsew \
-padx 2 \
-pady 2
grid \
[button .grepwidget.buttons.frame.save \
-text "Save" \
-command "savetext grep"] \
-row 0 \
-column 1 \
-sticky nsew \
-padx 2 \
-pady 2
# Printing only works on Unix systems, so don't offer the option on
# other platforms.
if {$tcl_platform(platform) == "unix"} {
grid \
[button .grepwidget.buttons.frame.print \
-text "Print" \
-command "printtext grep"] \
-row 0 \
-column 2 \
-sticky nsew \
-padx 2 \
-pady 2
}
grid \
[button .grepwidget.buttons.frame.dismiss \
-text "Dismiss" \
-command "destroy .grepwidget"] \
-row 0 \
-column 3 \
-sticky nsew \
-padx 2 \
-pady 2
grid rowconfigure .grepwidget.buttons.frame 0 -weight 0
grid columnconfigure .grepwidget.buttons.frame 0 -weight 1
grid columnconfigure .grepwidget.buttons.frame 1 -weight 1
grid columnconfigure .grepwidget.buttons.frame 2 -weight 1
grid columnconfigure .grepwidget.buttons.frame 3 -weight 1
bind .grepwidget.results.frame.list <ButtonRelease-1> {
set chosengrep [.grepwidget.results.frame.list curselection]
if {$chosengrep != {}} {
set chosengrepword [.grepwidget.results.frame.list get \
[lindex $chosengrep 0]]
set g_searchword $chosengrepword
set g_senses {}
golookup
}
}
bind .grepwidget <Return> {
.grepwidget.buttons.frame.search flash
.grepwidget.buttons.frame.search invoke
}
}
### Utility functions
proc setwordwrap {wrap} {
if {$wrap} {
.results.text configure -wrap word
grid forget .results.scrollx
} else {
.results.text configure -wrap none
grid .results.scrollx -row 1 -column 0 -sticky nsew
}
}
proc golookup {} {
global g_searchword
global g_senses
if {[fixword $g_searchword] == ""} return
.results.text configure \
-state normal
.results.text delete 1.0 end
.results.text configure \
-state disabled
set g_senses {}
.posmenubar.label configure \
-text "Searches for $g_searchword:"
if {[displayvalidsearchmenus $g_searchword]} {
displayoverview $g_searchword
history_add $g_searchword {} 0 0
}
}
proc fixword {word} {
regsub "^ *" $word "" word ; # remove leading spaces
regsub " *$" $word "" word ; # remove trailing spaces
regsub -all " " $word "_" word ; # change other spaces to underscores
return $word
}
proc fixgrep {grepbuf word} {
set greplines [split $grepbuf "\n"]
foreach line $greplines {
if { ([regexp -nocase "$word\$" $line]) && !([regexp " " $line]) } {
append retbuf $line
append retbuf "\n"
}
}
return $retbuf
}
proc updatefonts {} {
global fontsizelist
global fontname
global fontsize
.results.text configure \
-font "-adobe-$fontname-medium-r-*-*-*-[lindex \
$fontsizelist $fontsize]-*-*-*-*-*-*"
.results.text tag configure helpstyle \
-font "-adobe-$fontname-medium-r-*-*-*-[lindex $fontsizelist \
[expr $fontsize - 1]]-*-*-*-*-*-*" \
-foreground Blue \
-lmargin1 20
.results.text tag configure overviewhighlight \
-font "-adobe-$fontname-bold-r-*-*-*-[lindex $fontsizelist \
$fontsize]-*-*-*-*-*-*" \
-foreground Red
}
proc clearall {} {
global g_searchword
global g_senses
set g_searchword {}
set g_senses {}
.results.text configure \
-state normal
.results.text delete 1.0 end
.results.text configure \
-state disabled
foreach pos {noun verb adj adv} { pack forget .posmenubar.$pos }
pack forget .wordframe.overview
.statusbar.status configure \
-text "Enter search word and press return."
.posmenubar.label configure \
-text ""
}
proc generaterange {low high} {
for {set i $low} {$i <= $high} {incr i} {lappend res $i}
return $res
}
proc getsenselist {senses} {
regsub -all {[^0-9*]+} $senses " " senses
regsub "^ *" $senses "" senses
regsub "\ +$" $senses "" senses
if {[regexp {\*} $senses] || ($senses == {})} { set senses 0 }
return $senses
}
proc blackout {q} {
set objectlist {
.menubar.file
.menubar.history
.menubar.options
.menubar.help
.wordframe.entry
.wordframe.overview
.posmenubar.noun
.posmenubar.verb
.posmenubar.adj
.posmenubar.adv
.posmenubar.entry
}
if {$q} {
bind . <KeyPress-Escape> {bell; abortsearch}
bind .wordframe.entry <Return> {}
bind .results.text <Shift-Button-1> {}
bind .results.text <Button-2> {}
bind . <Control-s> {}
foreach object $objectlist {
$object configure \
-state disabled
}
} else {
bind . <KeyPress-Escape> {}
bind .wordframe.entry <Return> golookup
bind .results.text <Shift-Button-1> {shiftclickhandler %x %y}
bind .results.text <Button-2> {shiftclickhandler %x %y}
bind . <Control-s> controlshandler
foreach object $objectlist {
$object configure \
-state normal
}
}
}
proc shiftclickhandler {x y} {
global g_searchword
set newsearchword [.results.text get "@$x,$y wordstart" "@$x,$y wordend"]
if {$newsearchword != "\n"} {
set g_searchword $newsearchword
golookup
}
}
proc controlshandler {} {
global g_searchword
if {[catch {selection get} newsearchword]} {
bell
return
}
if {$newsearchword != ""} {
set g_searchword $newsearchword
golookup
}
}
### Visual Components
grid \
[frame .menubar \
-relief raised \
-borderwidth 1] \
-row 0 \
-column 0 \
-sticky ew
grid \
[frame .wordframe \
-relief raised \
-borderwidth 1] \
-row 1 \
-column 0 \
-sticky ew
grid \
[frame .posmenubar \
-relief raised \
-borderwidth 1] \
-row 2 \
-column 0 \
-sticky ew
grid \
[frame .results \
-relief raised \
-borderwidth 1] \
-row 3 \
-column 0 \
-sticky nsew \
-ipadx 3 \
-ipady 3
grid \
[frame .statusbar \
-relief raised \
-borderwidth 1] \
-row 4 \
-column 0 \
-sticky ew
grid rowconfigure . 0 -weight 0
grid rowconfigure . 1 -weight 0
grid rowconfigure . 2 -weight 0
grid rowconfigure . 3 -weight 1
grid rowconfigure . 4 -weight 0
grid columnconfigure . 0 -weight 1
pack \
[menubutton .menubar.file \
-text "File" \
-menu .menubar.file.menu \
-relief flat] \
[menubutton .menubar.history \
-text "History" \
-menu .menubar.history.menu \
-relief flat] \
[menubutton .menubar.options \
-text "Options" \
-menu .menubar.options.menu \
-relief flat] \
[menubutton .menubar.help \
-text "Help" \
-menu .menubar.help.menu \
-relief flat] \
-side left
pack \
[label .wordframe.label \
-text "Search Word:"] \
[entry .wordframe.entry \
-textvariable g_searchword \
-width 40 \
-background White \
-foreground Black] \
-side left \
-padx 2 \
-pady 2
focus .wordframe.entry
button .wordframe.overview \
-text "Redisplay Overview" \
-padx 3 \
-pady 1 \
-highlightthickness 0 \
-relief raised \
-command {
set g_senses {}
displayoverview $g_searchword
history_add $g_searchword {} 0 0
}
pack \
[label .posmenubar.label \
-text ""] \
-side left \
-padx 2 \
-pady 2
menubutton .posmenubar.noun \
-text "Noun" \
-menu .posmenubar.noun.menu \
-relief raised
menubutton .posmenubar.verb \
-text "Verb" \
-menu .posmenubar.verb.menu \
-relief raised
menubutton .posmenubar.adj \
-text "Adjective" \
-menu .posmenubar.adj.menu \
-relief raised
menubutton .posmenubar.adv \
-text "Adverb" \
-menu .posmenubar.adv.menu \
-relief raised
pack \
[entry .posmenubar.entry \
-textvariable g_senses \
-width 10 \
-background White \
-foreground Black] \
[label .posmenubar.senselabel \
-text "Senses:"] \
-side right \
-padx 2 \
-pady 2
grid \
[text .results.text \
-wrap word \
-relief sunken \
-borderwidth 2 \
-state disabled \
-yscrollcommand ".results.scrolly set" \
-xscrollcommand ".results.scrollx set" \
-background White \
-foreground Black \
-width 80 \
-height 25 \
-highlightthickness 0] \
-row 0 \
-column 0 \
-sticky nsew
updatefonts
grid \
[scrollbar .results.scrolly \
-command ".results.text yview" \
-width 12 \
-relief sunken \
-borderwidth 2 \
-highlightthickness 0] \
-row 0 \
-column 1 \
-sticky nsew
grid \
[scrollbar .results.scrollx \
-orient horizontal \
-command ".results.text xview" \
-width 12 \
-relief sunken \
-borderwidth 2 \
-highlightthickness 0] \
-row 1 \
-column 0 \
-sticky nsew
if {$wordwrap} {grid forget .results.scrollx}
grid rowconfigure .results 0 -weight 1
grid rowconfigure .results 1 -weight 0
grid columnconfigure .results 0 -weight 1
grid columnconfigure .results 1 -weight 0
pack \
[label .statusbar.status \
-text "Enter search word and press return."] \
-side left \
-padx 2
### Regular Menus
if {$labonly} {
menu .menubar.file.menu \
-tearoff false
menu .menubar.history.menu \
-tearoff false
menu .menubar.options.menu \
-tearoff false
menu .menubar.options.menu.font \
-tearoff false
menu .menubar.help.menu \
-tearoff false
.menubar.file.menu add command \
-label "Find keywords by substring" \
-command "grepword substring"
.menubar.file.menu add command \
-label "Find keywords by ending" \
-command "grepword ending"
.menubar.file.menu add separator
.menubar.file.menu add command \
-label "Save current display (specify path)" \
-command "savetext main"
} else {
menu .menubar.file.menu \
-tearoff false
menu .menubar.history.menu \
-tearoff false
menu .menubar.options.menu \
-tearoff false
menu .menubar.options.menu.font \
-tearoff false
menu .menubar.help.menu \
-tearoff false
.menubar.file.menu add command \
-label "Find keywords by substring" \
-command "grepword substring"
.menubar.file.menu add separator
.menubar.file.menu add command \
-label "Save current display (specify path)" \
-command "savetext main"
}
# Printing only works on Unix systems, so don't offer the option on
# other platforms.
if {$tcl_platform(platform) == "unix"} {
.menubar.file.menu add command \
-label "Print current display" \
-command "printtext main"
}
.menubar.file.menu add command \
-label "Clear current display" \
-command clearall
.menubar.file.menu add separator
if {$labonly} {
.menubar.file.menu add command \
-label "Reopen database" \
-command reopendb
.menubar.file.menu add separator
}
.menubar.file.menu add command \
-label "Exit" \
-command { destroy . }
.menubar.options.menu add checkbutton \
-label "Show help with each search" \
-variable showcontextualhelp
.menubar.options.menu add checkbutton \
-label "Show descriptive gloss" \
-variable showglosses \
-command { glosses $showglosses }
.menubar.options.menu add checkbutton \
-label "Wrap lines" \
-variable wordwrap \
-command {.menubar.history.menu invoke 0}
.menubar.options.menu add separator
.menubar.options.menu add command \
-label "Set advanced search options..." \
-command {
toplevel .adviewopt
wm title .adviewopt "Advanced search options"
wm transient .adviewopt .
scan [wm geometry .] "%dx%d+%d+%d" geom_h geom_w geom_x geom_y
wm geometry .adviewopt +[expr $geom_x+50]+[expr $geom_y+50]
wm resizable .adviewopt 0 0
grab set .adviewopt
pack \
[frame .adviewopt.fileinfo \
-relief raised \
-borderwidth 1] \
[frame .adviewopt.byteoffset \
-relief raised \
-borderwidth 1] \
[frame .adviewopt.senseflag \
-relief raised \
-borderwidth 1] \
[frame .adviewopt.bottom \
-relief raised \
-borderwidth 1] \
-side top \
-fill both \
-expand true
pack \
[frame .adviewopt.fileinfo.f \
-relief flat \
-borderwidth 10] \
-side top \
-fill both \
-expand true
pack \
[label .adviewopt.fileinfo.f.label \
-text "Lexical file information"] \
[radiobutton .adviewopt.fileinfo.f.opt0 \
-text "Don't show" \
-variable showfileinfo \
-value 0] \
[radiobutton .adviewopt.fileinfo.f.opt1 \
-text "Show with searches" \
-variable showfileinfo \
-value 1] \
[radiobutton .adviewopt.fileinfo.f.opt2 \
-text "Show with searches and overview" \
-variable showfileinfo \
-value 2] \
-side top \
-anchor w
pack \
[frame .adviewopt.byteoffset.f \
-relief flat \
-borderwidth 10] \
-side top \
-fill both \
-expand true
pack \
[label .adviewopt.byteoffset.f.label \
-text "Synset location in database file"] \
[radiobutton .adviewopt.byteoffset.f.opt0 \
-text "Don't show" \
-variable showbyteoffset \
-value 0] \
[radiobutton .adviewopt.byteoffset.f.opt1 \
-text "Show with searches" \
-variable showbyteoffset \
-value 1] \
[radiobutton .adviewopt.byteoffset.f.opt2 \
-text "Show with searches and overview" \
-variable showbyteoffset \
-value 2] \
-side top \
-anchor w
pack \
[frame .adviewopt.senseflag.f \
-relief flat \
-borderwidth 10] \
-side top \
-fill both \
-expand true
pack \
[label .adviewopt.senseflag.f.label \
-text "Sense number"] \
[radiobutton .adviewopt.senseflag.f.opt0 \
-text "Don't show" \
-variable showsenseflag \
-value 0] \
[radiobutton .adviewopt.senseflag.f.opt1 \
-text "Show with searches" \
-variable showsenseflag \
-value 1] \
[radiobutton .adviewopt.senseflag.f.opt2 \
-text "Show with searches and overview" \
-variable showsenseflag \
-value 2] \
-side top \
-anchor w
pack \
[button .adviewopt.bottom.ok \
-text "Ok" \
-command "destroy .adviewopt"] \
-side top \
-pady 5
}
.menubar.options.menu add command \
-label "Set maximum history length..." \
-command setmaxhistorylength
.menubar.options.menu add command \
-label "Set font..." \
-command {
toplevel .fontopt
wm title .fontopt "Font"
wm transient .fontopt .
scan [wm geometry .] "%dx%d+%d+%d" geom_h geom_w geom_x geom_y
wm geometry .fontopt +[expr $geom_x+50]+[expr $geom_y+50]
wm resizable .fontopt 0 0
grab set .fontopt
pack \
[frame .fontopt.top] \
[frame .fontopt.bottom \
-relief raised \
-borderwidth 1] \
-side top \
-fill both \
-expand true
pack \
[frame .fontopt.top.face \
-relief raised \
-borderwidth 1] \
[frame .fontopt.top.size \
-relief raised \
-borderwidth 1] \
-side left \
-fill both \
-expand true
pack \
[frame .fontopt.top.face.f \
-relief flat \
-borderwidth 10] \
-side top \
-fill both \
-expand true
pack \
[label .fontopt.top.face.f.label \
-text "Typeface"] \
[radiobutton .fontopt.top.face.f.courier \
-text "Courier" \
-variable fontname \
-value courier] \
[radiobutton .fontopt.top.face.f.helvetica \
-text "Helvetica" \
-variable fontname \
-value helvetica] \
[radiobutton .fontopt.top.face.f.times \
-text "Times" \
-variable fontname \
-value times] \
-side top \
-anchor w
pack \
[frame .fontopt.top.size.f \
-relief flat \
-borderwidth 10] \
-side top \
-fill both \
-expand true
pack \
[label .fontopt.top.size.f.label \
-text "Size"] \
[radiobutton .fontopt.top.size.f.small \
-text "Small" \
-variable fontsize \
-value 1] \
[radiobutton .fontopt.top.size.f.medium \
-text "Medium" \
-variable fontsize \
-value 2] \
[radiobutton .fontopt.top.size.f.large \
-text "Large" \
-variable fontsize \
-value 3] \
-side top \
-anchor w
pack \
[button .fontopt.bottom.ok \
-text "Ok" \
-command {
updatefonts
destroy .fontopt
.menubar.history.menu invoke 0
}] \
-side top \
-pady 5
}
.menubar.options.menu add separator
.menubar.options.menu add command \
-label "Save current options as default" \
-command {saveoptions}
.menubar.help.menu add command \
-label "Help on using the WordNet browser" \
-command {showhelpwidget helpwidget_xwn $resourcedir/wnb.man "WordNet Browser Help"}
.menubar.help.menu add command \
-label "Help on WordNet terminology" \
-command {showhelpwidget helpwidget_wngloss $resourcedir/wngloss.man "WordNet Glossary"}
.menubar.help.menu add command \
-label "Display the WordNet license" \
-command {showhelpwidget helpwidget_license $resourcedir/license.txt "WordNet License"}
.menubar.help.menu add separator
.menubar.help.menu add command \
-label "About the WordNet browser" \
-command showaboutbox
### Dynamic menus (for each part of speech)
### The numbers here are from wnconsts.h in the Wordnet library.
### Unfortunately, Tcl doesn't recognise #defined constants.
### Please be sure to keep them synchronised.
menu .posmenubar.noun.menu \
-tearoff false
menu .posmenubar.verb.menu \
-tearoff false
menu .posmenubar.adj.menu \
-tearoff false
menu .posmenubar.adv.menu \
-tearoff false
set posmenu(1) {
{ "Synonyms, ordered by estimated frequency" 2 {} }
{ "Synonyms, grouped by similarity" 27 {} }
{ "Antonyms" 1 {} }
{ "Coordinate Terms" 26 {} }
{ "Hypernyms (this is a kind of...)" -2 {} }
{ "Hyponyms (...is a kind of this), brief" 3 {} }
{ "Hyponyms (...is a kind of this), full" -3 {} }
{ "Holonyms (this is a part of...), regular" 13 {} }
{ "Holonyms (this is a part of...), inherited" -29 {} }
{ "Meronyms (parts of this), regular" 12 {} }
{ "Meronyms (parts of this), inherited" -28 {} }
{ "Derivationally related forms" 20 {} }
{ "Attributes (...is a value of this)" 18 {} }
{ "Domain" 21 {} }
{ "Domain Terms" 22 {} }
{ "Familiarity" 24 {} }
}
set posmenu(2) {
{ "Synonyms, ordered by estimated frequency" 2 {} }
{ "Synonyms, grouped by similarity" 27 {} }
{ "Antonyms" 1 {} }
{ "Coordinate Terms" 26 {} }
{ "Hypernyms (this is one way to...)" -2 {} }
{ "Troponyms (particular ways to...), brief" 3 {} }
{ "Troponyms (particular ways to...), full" -3 {} }
{ "This entails doing..." 4 {} }
{ "This causes..." 14 {} }
{ "Derivationally related forms" 20 {} }
{ "Sentence frames" 25 {} }
{ "Domain" 21 {} }
{ "Domain Terms" 22 {} }
{ "Familiarity" 24 {} }
}
set posmenu(3) {
{ "Synonyms" 5 {} }
{ "Antonyms" 1 {} }
{ "Related Noun" 17 {} }
{ "This is a value of..." 18 {} }
{ "Derivationally related forms" 20 {} }
{ "Domain" 21 {} }
{ "Domain Terms" 22 {} }
{ "Familiarity" 24 {} }
}
set posmenu(4) {
{ "Synonyms" 23 {} }
{ "Antonyms" 1 {} }
{ "Base Adjective" 17 {} }
{ "Derivationally related forms" 20 {} }
{ "Domain" 21 {} }
{ "Domain Terms" 22 {} }
{ "Familiarity" 24 {} }
}
### Bindings
bind .wordframe.entry <Return> golookup
bind .results.text <Shift-Button-1> {shiftclickhandler %x %y}
bind .results.text <Button-2> {shiftclickhandler %x %y}
bind . <Control-s> controlshandler
bind . <Control-g> "grepword substring"
set g_searchword [lindex $argv 0]
golookup