6.14.7.2.4. document control

The break level of a page is the level of it title, so the top level content of that page is 1 more than its break level.
Comienzo python section to interscript/weavers/web.py[5 /8 ] Siguiente Previo Primero Ăšltimo
   320: #line 422 "web_weaver.ipk"
   321:   # if the current page has a break level equal to the current level pop it
   322:   # (we'd print a footer first if we used them)
   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:     #up = string.split(self.base[0].sink.name,'/')[-1]
   474:     #up_anchor = '<A HREF="'+up+'">'+self.tr_phrase('Up')+'</A>'
   475:     #this = self.pattern%('%04d'%(self.childcount))
   476:     #this = '<A HREF="'+this+'">'+self.tr_phrase('This')+'</A>'
   477:     #print 'Spawning Weaver',filename,'for',text
   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:     #extra = '<LINK type="text/html" rel="Contents" href="'+self.pattern % 'contents' +'">\r\n'
   492:     #extra = '<LINK type="text/html" rel="Identifiers" href="'+self.pattern % 'identref'+'">\r\n'
   493:     #extra = '<LINK type="text/html" rel="Classes" href="'+self.pattern % 'classref'+'">\r\n'
   494:     #extra = '<LINK type="text/html" rel="Functions" href="'+self.pattern % 'funcref'+'">\r\n'
   495:     #extra = extra + '<LINK type="text/html" rel="Start" href="'+self.home_file+'">\r\n'
   496:     #if next: extra = extra + '<LINK type="text/html" rel="Next" href="'+next+'">\r\n'
   497:     #if prev: extra = extra + '<LINK type="text/html" rel="Prev" href="'+prev+'">\r\n'
   498:     #if up: extra = extra + '<LINK type="text/html" rel="Section" href="'+up+'">\r\n'
   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 # 0 origin
   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: 
End python section to interscript/weavers/web.py[5]