代码: 全选
python rv.py
代码: 全选
#!/usr/bin/env python
#
# file: rv.py
# A program to show regex matches in time, using pygtk.
# Tony CHEN, South China University of Technology, <chwentong@gmail.com>
# Looking for a job related with python program, can you help me?
#
import pygtk
import gtk
import re
pygtk.require('2.0')
class MatchTextView(gtk.TextView):
def __init__(self):
gtk.TextView.__init__(self)
def mark_match_text(self, pattern):
buffer = self.get_buffer()
buffer.remove_all_tags(buffer.get_start_iter(),
buffer.get_end_iter())
matchTag = buffer.create_tag(None, background='yellow')
def match_case(match):
s, e = match.span()
startIter = buffer.get_iter_at_offset(s)
stopIter = buffer.get_iter_at_offset(e)
buffer.apply_tag(matchTag, startIter, stopIter)
pattern.sub(match_case, buffer.get_text(buffer.get_start_iter(),
buffer.get_end_iter()))
class RV:
def select_file(self, widget):
'''File Chooser Handler function'''
fileSel = gtk.FileChooserDialog('Select a file for input text',
None,
gtk.FILE_CHOOSER_ACTION_OPEN,
(gtk.STOCK_OPEN, gtk.RESPONSE_OK,
gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
r = fileSel.run()
if r == gtk.RESPONSE_OK:
fileName = fileSel.get_filename()
buffer = self.textView.get_buffer()
buffer.set_text(open(fileName).read())
fileSel.destroy()
def refresh(self, widget):
'''Refresh display handler function'''
pattern = self.regexEntry.get_text()
flags = 0
for (check, v) in self.checkList:
if check.get_active():
flags = flags | v
pattern = re.compile(pattern, flags)
self.textView.mark_match_text(pattern)
def clear_text(self, widget):
'''Clear match text view'''
buffer = self.textView.get_buffer()
buffer.set_text('')
def demo(self, w):
'''Demo handler'''
try:
import rvtest
except ImportError:
self.textView.get_buffer().set_text('Import rvtest error! \nNeed file "rvtest.py" for this demo!')
return
self.textView.get_buffer().set_text(rvtest.testText)
self.regexEntry.set_text(rvtest.testRegex)
for (check, v) in self.checkList:
if v == re.MULTILINE:
check.set_active(True)
elif v == re.DOTALL:
check.set_active(True)
elif v == re.VERBOSE:
check.set_active(True)
pattern = re.compile(self.regexEntry.get_text(),
re.MULTILINE | re.DOTALL | re.VERBOSE)
self.textView.mark_match_text(pattern)
def __init__(self):
###################################################################
# Main window
###################################################################
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect('destroy', lambda w: gtk.main_quit())
self.window.set_title("Regex View 1.0")
self.window.set_border_width(5)
self.window.set_resizable(False)
vbox = gtk.VBox(False, 5)
hbox = gtk.HBox(False, 5)
self.window.add(hbox)
###################################################################
# Regex Entry Frame
###################################################################
regexFrame = gtk.Frame('Regex Entry')
self.regexEntry = gtk.Entry()
self.regexEntry.connect('activate', self.refresh)
regexFrame.add(self.regexEntry)
###################################################################
# Match Text View Frame
###################################################################
textFrame = gtk.Frame('Match Text View')
scrollWindow = gtk.ScrolledWindow()
scrollWindow.set_size_request(500, 400)
scrollWindow.set_border_width(5)
scrollWindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
self.textView = MatchTextView()
self.textView.set_wrap_mode(gtk.WRAP_WORD_CHAR)
scrollWindow.add(self.textView)
textFrame.add(scrollWindow)
###################################################################
# Left VBox group
###################################################################
label = gtk.Label('Note: Not support unicode chars!')
vbox.pack_start(regexFrame, False, False, 0)
vbox.pack_start(textFrame, False, False, 0)
vbox.pack_start(label, False, False, 0)
hbox.pack_start(vbox, False, False, 0)
###################################################################
# Regex Flags Frame
###################################################################
vbox = gtk.VBox(False, 5)
vbox.set_border_width(2)
checkboxFrame = gtk.Frame('Regex Flags')
checkboxFrame.add(vbox)
self.checkList = []
check = gtk.CheckButton('DOTALL')
check.set_tooltip_text('Make . match any character, including newlines.')
vbox.pack_start(check, False, False, 0)
check.connect('toggled', self.refresh)
self.checkList.append((check, 16))
check = gtk.CheckButton('MULTILINE')
check.set_tooltip_text('Multi-line matching, affecting ^ and $.')
vbox.pack_start(check, False, False, 0)
check.connect('toggled', self.refresh)
self.checkList.append((check, 8))
check = gtk.CheckButton('VERBOSE')
check.set_tooltip_text('Enable verbose REs, which can be organized more cleanly and understandably.')
vbox.pack_start(check, False, False, 0)
check.connect('toggled', self.refresh)
self.checkList.append((check, 64))
check = gtk.CheckButton('IGNORECASE')
check.set_tooltip_text('Do case-insensitive matches.')
vbox.pack_start(check, False, False, 0)
check.connect('toggled', self.refresh)
self.checkList.append((check, 2))
check = gtk.CheckButton('LOCALE')
check.set_tooltip_text('Do a locale-aware match.')
vbox.pack_start(check, False, False, 0)
check.connect('toggled', self.refresh)
self.checkList.append((check, 4))
check = gtk.CheckButton('UNICODE')
check.set_tooltip_text('Makes several escapes like \w, \b, \s and \d dependent on the Unicode character database.')
vbox.pack_start(check, False, False, 0)
check.set_inconsistent(True)
self.checkList.append((check, 32))
###################################################################
# Button group
###################################################################
openFileButton = gtk.Button('_Open File')
openFileButton.connect('clicked', self.select_file)
refreshButton = gtk.Button('_Refresh')
refreshButton.connect('clicked', self.refresh)
clearButton = gtk.Button('_Clear Text')
clearButton.connect('clicked', self.clear_text)
demoButton = gtk.Button('_Demo')
demoButton.connect('clicked', self.demo)
exitButton = gtk.Button('E_xit')
exitButton.connect('clicked', gtk.main_quit)
###################################################################
# Right VBox group
###################################################################
vbox = gtk.VBox()
vbox.pack_start(checkboxFrame, False, False, 0)
vbox.pack_start(openFileButton, False, False, 5)
vbox.pack_start(refreshButton, False, False, 2)
vbox.pack_start(clearButton, False, False, 2)
vbox.pack_start(demoButton, False, False, 2)
vbox.pack_end(exitButton, False, False, 0)
hbox.pack_start(vbox)
self.window.show_all()
if __name__ == '__main__':
app = RV()
gtk.main()
代码: 全选
#
# file: rvtest.py
# Tony CHEN, South China University of Technology, <chwentong@gmail.com>
#
testText = '''
/*
* sortm.h
*
* Created on: 22 Sep 2009
* Author: tony
*/
#ifndef SORTM_H_
#define SORTM_H_
namespace sortm { // Begin namespace sortm
typedef void (*SORTM)(int [], int);
void swap(int &, int &);
void t_sort(SORTM sortm);
void inssort(int d[], int n); // Insertion sorting algorithm
void bubsort(int d[], int n); // Bubble sorting algorithm
void selsort(int d[], int n); // Selection sorting algorithm
} // End namespace sortm
#endif /* SORTM_H_ */
'''
testRegex = '(/\*.*?\*/) | (//.*?$)'