1: #line 87 "web_weaver.ipk" 2: from interscript.weavers.multiplexor import multiplexor 3: from interscript.weavers.html import html_weaver 4: from interscript.weavers.html import cvt_code, cvt_text 5: from interscript.drivers.sinks.bufdisk import named_file_sink 6: from interscript.drivers.sinks.disk import simple_named_file_sink 7: import string 8: import traceback 9: 10: 11: class stacking_weaver(multiplexor): 12: def mk_head(self, sink): 13: w = sink.writeline 14: w('<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">') 15: w( '<HTML>') 16: w( '<HEAD>') 17: 18: w('<TITLE>'+self.title+'</TITLE>') 19: 20: w( '<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">') 21: if self.keywords.has_key('author'): 22: author =self.keywords['author'] 23: self.frames_sink.writeline( '<META NAME="Author" CONTENT="'+author+'">') 24: version = self.process.global_frame.version 25: 26: w( '<META NAME="Generator" CONTENT="Interscript '+version+'">') 27: w( '</HEAD>') 28: 29: def mk_frame(self,name, orientation, subframes): 30: print 'Making frame',name 31: filename = self.pattern % name 32: sink = named_file_sink( 33: self.pass_frame, 34: self.basedir+filename, 35: self.master.weaver_prefix, 36: eol=self.eol) 37: self.mk_head(sink) 38: pc = '' 39: for frame_name,frame_percent,frame_src in subframes: 40: pc = pc + str(frame_percent)+'%,' 41: pc = pc[:-1] 42: w = sink.writeline 43: w( '<FRAMESET '+orientation+'="'+pc+'" scrolling="yes">') 44: for frame_name,frame_percent,frame_src in subframes: 45: w( '<FRAME NAME="'+frame_name+'" SRC="'+frame_src+'">') 46: w( '</FRAMESET>') 47: w( '</HTML>') 48: 49: def mk_frames(self, doc): 50: top = self.pattern % 'top' # top level frame 51: indexview = self.pattern % 'indexview' 52: indexnav = self.pattern % 'indexnav' 53: contents = self.pattern % 'toc' 54: classref = self.pattern % 'classref' 55: funcref = self.pattern % 'funcref' 56: identref = self.pattern % 'identref' 57: testref = self.pattern % 'testref' 58: filestatus = self.pattern % 'filestatus' 59: sectionref = self.pattern % 'sectionref' 60: 61: self.mk_frame('indexview','ROWS', ( 62: ('indexnav',20,indexnav), 63: ('indexdat',80,contents))) 64: self.mk_frame('top','COLS',( 65: ('indexview',30,indexview), 66: ('docview',70,doc))) 67: 68: nav = ''; 69: for filename, description in [ 70: (contents, 'Contents'), 71: (classref, 'Classes'), 72: (funcref, 'Functions'), 73: (identref, 'Identifiers'), 74: (testref, 'Tests'), 75: (filestatus, 'Status'), 76: (sectionref, 'Sections') 77: ]: 78: nav = nav + '<A HREF="'+filename+'" TARGET="indexdat">'+description+'</A> ' 79: nav = '<DIV CLASS="NAVIGATION">'+nav+'</DIV>' 80: 81: filename = self.pattern % 'indexnav' 82: sink = named_file_sink( 83: self.pass_frame, 84: self.basedir+filename, 85: self.master.weaver_prefix, 86: eol=self.eol) 87: self.mk_head(sink) 88: w = sink.writeline 89: w ('<BODY>') 90: w (nav) 91: w ('</BODY>') 92: w ('</HTML>') 93: 94: 95: def print_table(self,dict,sink): 96: keys = dict.keys() 97: keys.sort() 98: w = sink.writeline 99: w('<TABLE COLS="2" BORDER="1" CELLPADDING="2">') 100: for k in keys: 101: refs = dict[k] 102: w('<TR><TD VALIGN="Top"><CODE> '+k+' </CODE></TD><TD> ') 103: old_df = '' 104: for sf,sc,df,dc in refs: 105: key = (sf, sc) 106: if self.anchor_file.has_key(key): 107: child = self.anchor_file[key] 108: else: 109: child = '' 110: anchor = '<A HREF='+child+'#'+sf+':'+str(sc)+' TARGET="docview">'+str(dc)+'</A>' 111: 112: if old_df != '': w(', ') 113: if old_df != df: 114: w(df+': '+ anchor ) 115: old_df = df 116: else: 117: w(anchor) 118: w('</TD></TR>') 119: w('</TABLE>') 120: 121: def __init__(self,parent_weaver, pattern='', break_list=None, **kwds): 122: self.pass_frame = parent_weaver.pass_frame 123: self.master = self.pass_frame.master 124: self.process = self.pass_frame.process 125: 126: self.sequence = self.pass_frame.get_new_sequence_number() 127: self.persistent_frame = self.master.get_persistent_frame(self.sequence) 128: 129: self.verbosity = self.pass_frame.verbosity 130: self.debug_missing_methods = 0 131: self.keywords = kwds 132: 133: self.original_filename = 'Unknown' 134: 135: self.toc_depth = self.keywords.get('toc_depth',99) 136: self.base = [parent_weaver] 137: parent_sink = parent_weaver.sink.name 138: self.basedir = string.join(string.split(parent_sink,'/')[:-1],'/')+'/' 139: if self.basedir == '/': self.basedir = '' 140: print 'Base directory for stacking weaver is',self.basedir 141: self.home_file = string.split(parent_sink,'/')[-1] 142: if kwds.has_key('title'): 143: self.title = kwds['title'] 144: elif hasattr(parent_weaver,'title'): 145: self.title = parent_weaver.title 146: else: 147: self.title = self.home_file 148: self.pattern = pattern 149: if string.find(pattern,'%') == -1: 150: self.pattern = self.pattern+'_%s.html' 151: # break list 152: self.break_list = [0] 153: if break_list: 154: for b in break_list: self.break_list.append(b) 155: else: 156: for i in range(1,40): self.break_list.append(i) 157: 158: self.stack = [parent_weaver] 159: self.childcount = 0 160: self.debug = 0 161: self.protocol = 'stacking weaver' 162: self.hcount = [1,0] 163: self.acount = 0 164: self.anchor_file = {} 165: self.name = 'stacking weaver' 166: self.eol = parent_weaver.sink.eol 167: 168: # table of contents 169: self.toc = [] 170: 171: self.home_anchor = '<A HREF="'+self.home_file+'">Home</A>' 172: self.home_nav = '<DIV CLASS="NAVIGATION">'+self.home_anchor+'<BR><HR></DIV>' 173: 174: self.mk_frames(self.home_file) 175: 176: # cheat here, guess next exists :-) 177: next = self.pattern%('%04d'%(self.childcount+1)) 178: next = '<A HREF="'+next+'">Next</A>' 179: 180: nav = '' 181: if next : nav = nav + next+' ' 182: 183: hnav = '<HR><DIV CLASS="NAVIGATION">'+nav+'<BR><HR></DIV>' 184: parent_weaver._writeline(hnav) 185:
6.4.6.2.1. reference processor
6.4.6.2.2. section processor
6.4.6.2.3. heading processor
6.4.6.2.4. document control
6.4.6.2.5. Table of contents
6.4.6.2.6. Identifier Cross references