import sys import javax.swing as swing import java.awt as awt import java.lang as jlang from calend2 import * import string, re from calnames import * def exit(event): jlang.System.exit(0) class EventToHTML(swing.JFrame): list_names={} list_names["mnths"]=["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] list_names["years"]=[2000+i for i in range(20)] list_names["lang"]=["English", "Spanish", "French", "German", "Italian", "Dutch"] list_names["begw"]=["Sunday", "Monday"] def __init__(self, title="Event Calendar Generator 2", size=(200, 200)): "@sig public WelcomeFrame(String title, java.awt.Dimension size)" self.title = title self.windowClosing = exit self.contentPane.layout = awt.FlowLayout() self.mnths=swing.JComboBox(self.list_names["mnths"]) self.contentPane.add(self.mnths) self.years=swing.JComboBox(self.list_names["years"]) self.contentPane.add(self.years) self.lang = swing.JComboBox(self.list_names["lang"]) self.contentPane.add(self.lang) # the first entry will be 0 self.begw=0 begw_grp=swing.ButtonGroup() begw_pnl=swing.JPanel(awt.GridLayout(0,1)) begw_pnl.border = swing.BorderFactory.createTitledBorder("WeekStart") buttons = [self.createRadioButton(each, self.radioButtonPressed_begw) for each in self.list_names["begw"]] sel=1 for eachButton in buttons: eachButton.setSelected(sel) begw_grp.add(eachButton) begw_pnl.add(eachButton) sel=0 self.contentPane.add(begw_pnl) self.contentPane.add(swing.JTextField('Events:: (eg., "1/31 Dinner 7:30pm Young At Heart Club dinner at church hall")', editable=0)) self.eventtxt=swing.JTextArea(16,50) self.eventpnl=swing.JPanel() self.eventpnl.add(swing.JScrollPane(self.eventtxt)) self.contentPane.add(self.eventpnl) genButton=swing.JButton("Generate", actionPerformed=self.genButtonPressed) self.contentPane.add(genButton) self.pack() self.size=(640,500) def buttonPressed(self, event): self.field.text = self.quotes[event.source.text] def createButton(self, name): "@sig public javax.swing.JButton createButton(String name)" return swing.JButton(name, preferredSize=(100,20), actionPerformed=self.buttonPressed) def createRadioButton(self, name, doRadioPressed): return swing.JRadioButton(name, actionPerformed=doRadioPressed) def radioButtonPressed_begw(self, event): # this will return 0 for the first entry, etc. self.begw=self.list_names["begw"].index(event.source.text) def genButtonPressed(self, event): self.year =self.list_names["years"].index(self.years.getSelectedItem())+2000 self.mth =self.list_names["mnths"].index(self.mnths.getSelectedItem())+1 self.langsel =self.list_names["lang"].index(self.lang.getSelectedItem())+1 BuildHTML(self.year, self.mth, self.langsel, self.begw, self.eventtxt.text) ShowHTML() class ShowHTML(swing.JFrame): def __init__(self, title="Event Calendar Generator 2"): self.contentPane.layout = awt.FlowLayout() tabbedPane=swing.JTabbedPane() self.htmlTab=swing.JEditorPane("text/html", "", editable=0, hyperlinkUpdate=self.followHyperlink) self.f=open("evt2htm.dat","r") htmlstr=self.f.read() self.f.close() self.htmlTab.setText(htmlstr) tabbedPane.addTab("HTMLView",swing.JScrollPane(self.htmlTab, preferredSize=(720, 480))) textTab=swing.JTextArea(15,80) textTab.setText(htmlstr) tabbedPane.addTab("PlainText",swing.JScrollPane(textTab, preferredSize=(720, 480))) self.contentPane.add(tabbedPane) self.pack() self.show() def followHyperlink(self, event): if event.eventType == swing.event.HyperlinkEvent.EventType.ACTIVATED: self.statusLine = event.URL.toString() self.htmlTab.setPage(event.URL) elif event.eventType == swing.event.HyperlinkEvent.EventType.ENTERED: self.statusLine = event.URL.toString() elif event.eventType == swing.event.HyperlinkEvent.EventType.EXITED: self.statusLine = "" class BuildHTML: def __init__(self, year, month, lang, begw, eventtxt): self.cmtpat = re.compile('^ *\#') # date mm/dd self.datepat = re.compile('^ *([0-9]*[0-9]?)/([0-9][0-9]?)') # any word self.wordpat = re.compile('^ *([^ *\t*]+)') events=string.split(eventtxt, "\n") self.evt, self.evtstore, self.maxdd, self.count = self.parse_events(year,month,events) self.f=open("evt2htm.dat","w") print >> self.f, "Event Calendar Generator" self.gen_cal(year, month, lang, begw, self.maxdd, self.count, self.evt, self.evtstore) print >> self.f, '
Event calendar automatically generated by Python script', print >> self.f, ' evt2htm.cgi', print >> self.f, " found at manny juan's python page" print >> self.f, '' self.f.close def parse_events(self,year,month,events): maxdd=0 evn=0 evt={} evtstore={} count={} daysinmonth=mdays[month] if (isleap(year) & (month==2)): daysinmonth=daysinmonth+1 for day in range(daysinmonth+1): count[day]=0 for line in events: if string.strip(line) == '': #skip blank lines continue if self.cmtpat.search(line) > -1: continue dpsch=self.datepat.search(line) if dpsch > -1: xmonth , xday = dpsch.group(1,2) mth=string.atoi(xmonth) # select only the days for the month selected if mth==month: day=string.atoi(xday) line=line[dpsch.end():] # first token must be date eg. 12/31 wdsch=self.wordpat.search(line) if wdsch > -1: tag = wdsch.group(1) line=string.strip(line[wdsch.end():]) if len(line)==0: continue evn=evn+1 count[day]=count[day]+1 # keep track of cell height if (count[day]>maxdd): maxdd=count[day] # store event number and (event tag, event text) evt[(day,count[day])]=evn evtstore[evn]=(tag,line) return (evt,evtstore,maxdd,count) def gen_cal(self,year,month,lang,begw,maxdd,count,evt,evtstore): weeks=monthcalendar(year,month,begw) month_name,week_name=month_lits[lang-1] evseq=0 print >> self.f, '
' print >> self.f, ''+month_name[month-1],str(year)+'' print >> self.f, '' print >> self.f, '' for week in weeks: print >> self.f, '' for day in week: print >> self.f, '0): print >> self.f, 'width=5>'+str(day), else: print >> self.f, '>', print >> self.f, '' print >> self.f, '' print >> self.f, '' for day in week: print >> self.f, '' print >> self.f, '' print >> self.f, '
%s' % (week_name[(0+begw)%7]) print >> self.f, '%s' % (week_name[(1+begw)%7]) print >> self.f, '%s' % (week_name[(2+begw)%7]) print >> self.f, '%s' % (week_name[(3+begw)%7]) print >> self.f, '%s' % (week_name[(4+begw)%7]) print >> self.f, '%s' % (week_name[(5+begw)%7]) print >> self.f, '%s' % (week_name[(6+begw)%7]) print >> self.f, '
', if(day>0): for i in range(maxdd): if i>count[day]-1: print >> self.f, ' 
' else: evn=evt[(day,i+1)] tag,event=evtstore[evn] # this will also be the listing sequence (and link) evseq=evseq+1 print >> self.f, ''+tag+'
' print >> self.f, '
' print >> self.f, '
' # def emit_events(self,year,month,begw,maxdd,count,evt,evtstore): weeks=monthcalendar(year,month,begw) evseq=0 print >> self.f, '


' for week in weeks: for day in week: if(day>0): for i in range(maxdd): if i> self.f, '
go to top
' # use this sequence as anchor evseq=evseq+1 print >> self.f, '
'+tag+'
', print >> self.f, '%d'%month+'/'+'%02d'%day+'
' print >> self.f, event+'
' if __name__ == '__main__': EventToHTML().show()