320: #line 422 "web_weaver.ipk"
321:
322:
323: def _foot(self):
324: if self._trig(0) == self._current_level():
325: self._popw()
326:
327: def _head(self,text, atext, anchor):
328: level = self._current_level()
329: if level == self._trig(1):
330: self._pushw(level,text,atext,anchor)
331: else:
332: self._ins_head(level,text,atext,anchor)
333:
334: def __del__(self):
335: if 'weavers' in self.process.trace:
336: print "WEB WEAVER DESTRUCTOR COMMENCES"
337: del self.base
338: while self.stack: del self.stack[-1]
339: oldsubdoc = self.subdoc_stack.top
340: while 0 < oldsubdoc[0]:
341: self.pattern = oldsubdoc[1]
342: self.childcount = oldsubdoc[2]
343: print 'Resetting pattern to',self.pattern,'count to',self.childcount
344: self.subdoc_stack.pop()
345: oldsubdoc = self.subdoc_stack.top
346:
347: tables = [
348: ['contents','Contents','docview',0],
349: ['funcref','Functions','docview',0],
350: ['classref','Classes','docview',0],
351: ['identref','Identifiers','docview',0],
352: ['testref','Tests','docview',0],
353: ['sectionref','Sections','docview',0],
354: ['sourceref','Source','docview',0],
355: ['metricsref','Metrics','docview',0],
356: ['noticesref','Notices','docview',0],
357: ['filestatus','Status','docview',0]
358: ]
359: for i in range(len(tables)):
360: name, descr, target, count = tables[i]
361: s = 'tables['+str(i)+'][3]=self.mk_'+name+'(self.pattern % '+repr(name)+','+repr(target)+')'
362: try:
363: exec s
364: except:
365: print 'Error generating table',name,descr
366: traceback.print_exc()
367: self.persistent_frame['contents'] = self.toc
368: self.mk_frames(self.home_file, tables)
369: if 'weavers' in self.process.trace:
370: print 'Web Weaver finished'
371: if 'weavers' in self.process.trace:
372: self.process.release_object(self)
373:
374: def format_heading_number(self, hlist, sep):
375: hnumber = ''
376: for i in range(1,len(hlist)-1):
377: hnumber = hnumber + str(hlist[i])+'.'
378: hnumber = hnumber + str(hlist[-1])
379: return hnumber
380:
381: def get_formatted_heading_number(self, sep):
382: return self.format_heading_number(self.hcount,sep)
383:
384:
385: def anchor_text(self,anchor,label,tooltip):
386: return '<A HREF="'+anchor+'" TITLE="'+tooltip+'">'+\
387: self.tr_phrase(label)+'</A>'
388:
389: def anchor_of(self, toc, ix, label):
390: if ix == None: return None
391: if 0<=ix<len(toc):
392: level, hnum, anchor, text,hcount = toc[ix]
393: return self.anchor_text(anchor, label, text)
394: else: return None
395:
396: def cal_nav(self,level):
397: toc = self.persistent_frame.get('contents',None)
398: first, last, next, prev, along, back, up, this = (None,)*8
399: n = toc and len(toc)
400: if n:
401: first = 0
402: last = n-1
403:
404: this = 0
405: for entry in toc:
406: if entry[4] == self.hcount: break
407: this = this + 1
408:
409: if this+1 < n: next = this + 1
410: if this>0: prev = this - 1
411:
412: along = this + 1
413: while along < n:
414: nlev = toc[along][0]
415: if nlev < level: along = None
416: if nlev <= level: break
417: along = along + 1
418:
419: back = this - 1
420: while back >= 0:
421: nlev = toc[back][0]
422: if nlev < level: back = None
423: if nlev <= level: break
424: back = back - 1
425:
426: up = this -1
427: while up >= 0:
428: nlev = toc[up][0]
429: if nlev < level: break
430: up = up - 1
431:
432: return toc, this, first, last, next, prev, along, back, up
433:
434: def mk_nav(self, lasttoc, this, first, last, next, prev, along, back, up):
435: home = self.home_anchor
436: up = self.anchor_of(lasttoc,up,'Up')
437: prev = self.anchor_of(lasttoc,prev,'Prev')
438: next = self.anchor_of(lasttoc,next,'Next')
439: along = self.anchor_of(lasttoc,along,'Along')
440: back = self.anchor_of(lasttoc,back,'Back')
441: this = self.anchor_of(lasttoc,this,'This')
442:
443: nav = ''
444: if next : nav = nav + next+' '
445: if prev : nav = nav + prev+' '
446: if along : nav = nav + along+' '
447: if back : nav = nav + back+' '
448: if up : nav = nav + up+' '
449: if home: nav = nav + home+' '
450: if this: nav = nav + this+' '
451: nav = nav + '<SMALL>['+self.original_filename+']</SMALL>'
452:
453: hnav = '<DIV CLASS="NAVIGATION">'+nav+'<BR><HR></DIV>'
454: fnav = '<DIV CLASS="NAVIGATION"><BR><HR>'+nav+'</DIV>'
455: return hnav, fnav
456:
457: def _popw(self):
458: if 'weavers' in self.process.trace:
459: print 'Terminating weaver',self.stack[-1].name
460: del self.stack[-1]
461: self.base = [self.stack[-1]]
462:
463: def _new_child(self):
464: self.childcount = self.childcount + 1
465: return self.pattern % ('%04d' % self.childcount)
466:
467: def _pushw(self,level,text,atext,label):
468: filename = self._new_child()
469: if label:
470: anchor = self.pattern%('%04d'%(self.childcount))
471: self.register_anchor(label, anchor)
472:
473:
474:
475:
476:
477:
478:
479: self.base = [self.stack[-1]]
480: hn = self.get_formatted_heading_number('.')+'.'
481: hnum = self.get_formatted_heading_number('_')
482: h = hn + ' '+text
483: self.toc.append([level,hnum,filename,h,self.hcount[:]])
484: self._ensuremode('P')
485: self._writeline( '<BR><A HREF="'+filename+'">'+h+'</A>')
486:
487: lasttoc, this, first, last, next, prev, along, back, up = self.cal_nav(level)
488: hnav, fnav = self.mk_nav(lasttoc, this, first, last, next, prev, along, back, up)
489:
490: extra = ''
491:
492:
493:
494:
495:
496:
497:
498:
499:
500: sink = named_file_sink(self.pass_frame, self.basedir + filename, self.master.weaver_prefix, self.eol)
501: child = html_weaver(
502: self.pass_frame, sink,
503: title = h,
504: pagehead = hnav,
505: pagefoot=fnav,
506: heading_prefix=hn,
507: head_extra=extra,
508: anchor=label,
509: language=self.language)
510: self.base = [child]
511: self.stack.append(child)
512:
513: def _trig(self,offset=0):
514: doc_level = len(self.stack)-1
515: return self.break_list[doc_level+offset]
516:
517: def _ins_head(self,level,text,atext,anchor):
518: adjusted_level = level - self._trig()
519: if anchor == '':
520: anchor = 'a'+str(self.acount)
521: self.acount = self.acount + 1
522: hn = self.get_formatted_heading_number('.')+'.'
523: hnum = self.get_formatted_heading_number('_')
524: h = hn + ' '+text
525: filename = self.pattern%('%04d'%self.childcount)
526: self.register_anchor(anchor,filename+'#'+anchor)
527: self.toc.append([level,hnum,filename+'#'+anchor,h,self.hcount[:]])
528: for weaver in self.base:
529: weaver.head(adjusted_level,text,atext,anchor)
530: