initial commit of bin scripts into git
This commit is contained in:
187
tkbib1.0/search.tcl
Normal file
187
tkbib1.0/search.tcl
Normal file
@@ -0,0 +1,187 @@
|
||||
# search dialog
|
||||
# Copyright (c) 2000 Patrick H. Madden
|
||||
# SUNY Binghamton Computer Science Dept
|
||||
# pmadden@cs.binghamton.edu
|
||||
# http://vlsicad.cs.binghamton.edu/~pmadden
|
||||
# The latest version should be available at
|
||||
# http://vlsicad.cs.binghamton.edu/~pmadden/tkbib
|
||||
|
||||
#
|
||||
# This file is part of tkbib
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; see the file COPYING. If not, write to
|
||||
# the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||
# Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
# Global search results
|
||||
set search_results { }
|
||||
#CLIP+open_search+TEXT+30+2000/01/29 13:12:08+8.0+#
|
||||
# open_search -- Creates the window for searching, and adds
|
||||
# the buttons to allow us to filter/merge/etc.
|
||||
proc open_search { } {
|
||||
toplevel .search
|
||||
# Not allowed to delete search window
|
||||
wm protocol .search WM_DELETE_WINDOW {
|
||||
# No operations
|
||||
}
|
||||
wm title .search "tkbib Search"
|
||||
|
||||
entry .search.e
|
||||
frame .search.fb
|
||||
button .search.fb.s -text "Search" -command search
|
||||
button .search.fb.f -text "Filter" -command filter
|
||||
button .search.fb.m -text "Merge" -command merge
|
||||
button .search.fb.save -text "Save" -command save_search_res
|
||||
|
||||
frame .search.rf
|
||||
listbox .search.rf.l -yscrollcommand ".search.rf.s set"
|
||||
scrollbar .search.rf.s -command ".search.rf.l yview"
|
||||
pack .search.rf.l -in .search.rf -side left -expand 1 -fill both
|
||||
pack .search.rf.s -in .search.rf -side right -fill y
|
||||
|
||||
bind .search.rf.l <Double-Button-1> "edit article \[selection get\]"
|
||||
|
||||
pack .search.e -side top
|
||||
pack .search.fb.s .search.fb.f .search.fb.m .search.fb.save -side left
|
||||
pack .search.fb
|
||||
pack .search.rf -side bottom -expand 1 -fill both
|
||||
}
|
||||
#CLIP+search+TEXT+61+2000/01/21 13:23:39+4.37+#
|
||||
# search -- Runs through all entries, checking to see if anything
|
||||
# in the entry matches the search key. Some day, this'll be field-sensitive,
|
||||
# and allow regular expressions.... Results are listed in the search
|
||||
# list, and the global search_results
|
||||
proc search { } {
|
||||
global entries search_results
|
||||
|
||||
set search_results { }
|
||||
|
||||
# Remove anything from the current list
|
||||
.search.rf.l delete 0 end
|
||||
|
||||
set kw [.search.e get]
|
||||
|
||||
# Check each entry, and if it matches, add it in to the list
|
||||
foreach e $entries {
|
||||
set found 0
|
||||
foreach p $e {
|
||||
if {[string first $kw [lindex $p 1]] > -1} {
|
||||
set found 1
|
||||
}
|
||||
}
|
||||
if {$found} {
|
||||
# puts "Match [lindex [lindex $e 0] 1]"
|
||||
lappend search_results [lindex [lindex $e 0] 1]
|
||||
}
|
||||
}
|
||||
|
||||
foreach cite $search_results {
|
||||
.search.rf.l insert end $cite
|
||||
}
|
||||
}
|
||||
#CLIP+filter+TEXT+94+2000/01/21 13:24:23+2.59+#
|
||||
# filter -- Similar to search, but will only list entries that match the
|
||||
# current term, and were also listed by the previous search
|
||||
proc filter { } {
|
||||
global entries search_results
|
||||
|
||||
set old_search_results $search_results
|
||||
set search_results { }
|
||||
|
||||
# Remove anything from the current list
|
||||
.search.rf.l delete 0 end
|
||||
|
||||
set kw [.search.e get]
|
||||
|
||||
# Check each entry, and if it matches, add it in to the list
|
||||
foreach e $entries {
|
||||
set found 0
|
||||
foreach p $e {
|
||||
if {[string first $kw [lindex $p 1]] > -1} {
|
||||
set found 1
|
||||
}
|
||||
}
|
||||
# If this element was not in the old search results, mark it
|
||||
# as "not found"
|
||||
if {[lsearch $old_search_results [lindex [lindex $e 0] 1]] == -1} {
|
||||
set found 0
|
||||
}
|
||||
if {$found} {
|
||||
# puts "Match [lindex [lindex $e 0] 1]"
|
||||
lappend search_results [lindex [lindex $e 0] 1]
|
||||
}
|
||||
}
|
||||
|
||||
foreach cite $search_results {
|
||||
.search.rf.l insert end $cite
|
||||
}
|
||||
}
|
||||
#CLIP+merge+TEXT+131+2000/01/21 13:24:48+2.50+#
|
||||
# merge -- Similar to search, but does additive listing (so the
|
||||
# old search results are merged with the new ones)
|
||||
proc merge { } {
|
||||
global entries search_results
|
||||
|
||||
set old_search_results $search_results
|
||||
set search_results { }
|
||||
|
||||
# Remove anything from the current list
|
||||
.search.rf.l delete 0 end
|
||||
|
||||
set kw [.search.e get]
|
||||
|
||||
# Check each entry, and if it matches, add it in to the list
|
||||
foreach e $entries {
|
||||
set found 0
|
||||
foreach p $e {
|
||||
if {[string first $kw [lindex $p 1]] > -1} {
|
||||
set found 1
|
||||
}
|
||||
}
|
||||
# If this element was in the old search results, mark it as found
|
||||
if {[lsearch $old_search_results [lindex [lindex $e 0] 1]] >= 0} {
|
||||
set found 1
|
||||
}
|
||||
if {$found} {
|
||||
# puts "Match [lindex [lindex $e 0] 1]"
|
||||
lappend search_results [lindex [lindex $e 0] 1]
|
||||
}
|
||||
}
|
||||
|
||||
foreach cite $search_results {
|
||||
.search.rf.l insert end $cite
|
||||
}
|
||||
}
|
||||
#CLIP+save_search_res+TEXT+167+2000/01/21 13:25:28+3.0+#
|
||||
# save_search_res -- After figuring out the set of entries that we're
|
||||
# interested in, we can save them. Severe abuse of global vars should
|
||||
# be cleaned up at some point.
|
||||
proc save_search_res { } {
|
||||
global entries search_results
|
||||
|
||||
set tmp_entries $entries
|
||||
|
||||
set entries { }
|
||||
foreach e $tmp_entries {
|
||||
if {[lsearch $search_results [lindex [lindex $e 0] 1]] >= 0} {
|
||||
lappend entries $e
|
||||
}
|
||||
}
|
||||
|
||||
save_bib
|
||||
|
||||
set entries $tmp_entries
|
||||
}
|
||||
#CLIP+pre+TEXT+1+2000/01/21 13:22:17+29.22+#
|
||||
Reference in New Issue
Block a user