/[cvs]/nfo/patches/glimmer/scripts/FunctionSelector.py
ViewVC logotype

Contents of /nfo/patches/glimmer/scripts/FunctionSelector.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (show annotations)
Tue Nov 12 20:14:48 2002 UTC (21 years, 9 months ago) by jonen
Branch: MAIN
CVS Tags: v005-1
Changes since 1.2: +11 -6 lines
File MIME type: text/x-python
+ php functions maybe prefixed by a '&'. fixed sigpart regex.
+ forgot 'class' (php) after all. fixed regex.
+ renamed regex_perl to regex_noparenthesis
+ perl subs with an space after the first '{' weren't regognized. fixed regex.

1 ##################################################
2 # $Id: FunctionSelector.py,v 1.2 2002/11/08 02:37:25 jonen Exp $
3 # small plugin for glimmer
4 #
5 # Authors:
6 # Andreas Motl<andreas.motl@ilo.de>
7 # Sebastian Utz<su@tunemedia.de>
8 #
9 # ToDo:
10 # - Bug: FunctionList doesn't refresh on new opened files by its own
11 # - tune regex for more languages
12 #
13 # Changelog:
14 # $Log: FunctionSelector.py,v $
15 # Revision 1.2 2002/11/08 02:37:25 jonen
16 # + added cvs header
17 # + added hook for refresh on "save-file"
18 # suggested by Mark McAulay
19 #
20 #
21 ##################################################
22
23 import glimmer
24 import string
25 import re
26 import sys
27 import os
28 sys.argv=[]
29 sys.argv.append("null")
30 from gtk import *
31 import _gtk
32 import _gnome
33 import _gnomeui
34 from gnome.ui import *
35 import gnome.config
36
37 global row_number
38
39 row_number = []
40
41 # ---------------------------------------------------------
42 # some regular expressions to scan for
43 # class/function/sub/packages signatures
44 # in source code
45 prefix_pattern = '^[|\s]*'
46 sigpart = '\s+([\w|:|&]+?)\s*'
47 regex_universal=re.compile(prefix_pattern + '(?:\w+?)\*??' + sigpart + '\(.*?\)[\s|:|{]*\s*$')
48 regex_noparenthesis=re.compile(prefix_pattern + '(?:package|sub|class)' + sigpart + '[;|{]\s*$')
49
50 def get_functionNameFromLine(str):
51 for regex in (regex_universal, regex_noparenthesis):
52 match=regex.search(str)
53 if match:
54 str = match.group(1)
55 return str
56
57 def get_allFunctionNames(content):
58 names=[]
59 lines=string.split(content, "\n")
60 count=1
61 for line in lines:
62 funcname=get_functionNameFromLine(line)
63 if funcname:
64 names.append((funcname, count))
65 count=count+1
66 return names
67
68 # ---------------------------------------------------------
69
70 def get_current_text():
71 start = 0
72 end = glimmer.buffer_size()
73 str = glimmer.get_text(start, end)
74 return str
75
76 def functionlist_init ():
77 title = "Functions:"
78 functionlist.set_column_title(0, title)
79 functionlist.clear()
80
81 def functionlist_append(label):
82 listentry=[]
83 listentry.append(label)
84 listentry.append("")
85 functionlist.append(listentry)
86
87 def our_main():
88 global row_number
89 gettext = get_current_text()
90 if gettext:
91 entries=get_allFunctionNames(gettext)
92 functionlist_init()
93 row_number=[]
94 for entry in entries:
95 label=entry[0]
96 rownum=entry[1]
97 functionlist_append(label)
98 row_number.append(rownum)
99
100 def select_row_callback(clist, row, col, event, data):
101 import glimmer
102 import string
103 global row_number
104 num = row_number[row]
105 glimmer.move_to_line(num)
106 glimmer.move_to(glimmer.line_start())
107 del glimmer
108 del string
109
110
111 def close_function_selector(button, citem, fbox):
112 citem.destroy()
113 glimmer.remove_paned_object("FunctionSelector")
114
115
116 def refresh_function_selector(refresh):
117 our_main()
118
119 def callback_change():
120 our_main()
121
122 functionbox = GtkVBox(FALSE, 0)
123 functionbox.show()
124 titleframe = GtkFrame()
125 functionbox.pack_start(titleframe, FALSE, FALSE, 2)
126 titleframe.show()
127 buttonbox = GtkHBox(FALSE, 0)
128 titleframe.add(buttonbox)
129 buttonbox.show()
130 optionsbutton = GtkButton()
131 optionsbutton.set_relief(RELIEF_NONE)
132 buttonbox.pack_start(optionsbutton, FALSE, FALSE, 2)
133 optionsbutton.show()
134 optionsbuttonbox = GtkHBox(FALSE, 0)
135 optionsbutton.add(optionsbuttonbox)
136 optionsbuttonbox.pack_start(GtkLabel("Refresh List"), FALSE, FALSE, 0)
137 optionsbuttonbox.show_all()
138
139 _gtk.gtk_signal_connect(optionsbutton._o, "clicked", refresh_function_selector)
140 closebutton = GtkButton()
141 closebutton.set_relief(RELIEF_NONE)
142 closebutton.add(GnomeStock("Close"))
143 closebutton.set_usize(22, 22)
144 buttonbox.pack_end(closebutton, FALSE, FALSE, 2)
145 closebutton.show_all()
146 functionwindow = GtkScrolledWindow()
147 functionbox.pack_start(functionwindow, TRUE, TRUE, 2)
148 functionwindow.set_usize(130, 500)
149 functionwindow.show()
150 functionlist = GtkCList(1)
151 functionwindow.add(functionlist)
152 functionlist.show()
153 #functionlist.column_titles_show(1)
154 glimmer.add_paned_object(functionbox._o, "FunctionSelector", 0)
155 our_main()
156 checkitem = GtkCheckMenuItem("Function Selector")
157 checkitem.set_active(TRUE)
158 checkitem.show()
159 glimmer.add_widget_to_menu("_View/Status Bar", checkitem._o)
160
161 glimmer.register_signal_hook("open-file", callback_change)
162
163 glimmer.register_signal_hook("change-file", callback_change)
164
165 glimmer.register_signal_hook("save-file", callback_change)
166
167 args = (checkitem, functionbox, )
168 _gtk.gtk_signal_connect(closebutton._o, "clicked", close_function_selector, args)
169 args = (None, )
170 _gtk.gtk_signal_connect(functionlist._o, "select_row", select_row_callback, args)

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed