6.4.6.2. Code

6.4.6.2. Code

Start python section to interscript/weavers/web.py[1]
     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: 
End python section to interscript/weavers/web.py[1]


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