*** TWiki.pm.orig Wed Jul 21 14:24:29 2004 --- TWiki.pm Fri Jul 23 11:33:14 2004 *************** *** 127,132 **** --- 127,133 ---- @listElements $debugUserTime $debugSystemTime $script $newTopicFontColor $newTopicBgColor $linkToolTipInfo $noAutoLink $pageMode $readTopicPermissionFailed $cgiQuery $basicInitDone + $prevLevel @levelArray ); # =========================== *************** *** 193,198 **** --- 194,200 ---- # Header patterns based on '+++'. The '###' are reserved for numbered headers $regex{headerPatternDa} = '^---+(\++|\#+)\s*(.+)\s*$'; # '---++ Header', '---## Header' + $regex{headerPatternNum} = '^---+(\#+)\s+(.+)\s*$'; # '---## Header' $regex{headerPatternSp} = '^\t(\++|\#+)\s*(.+)\s*$'; # ' ++ Header', ' + Header' $regex{headerPatternHt} = '^\s*(.+?)\s*'; # '
Header
$regex{headerPatternNoTOC} = '(\!\!+|%NOTOC%)'; # '---++!! Header' or '---++ Header %NOTOC% ^top' *************** *** 446,451 **** --- 448,457 ---- &TWiki::Plugins::initialize2( $topicName, $webName, $userName ); } #/AS + # Other request global variables + # Numbered header counters + undef $prevLevel; + undef @levelArray; return ( $topicName, $webName, $scriptUrlPath, $userName, $dataDir ); } *************** *** 2291,2302 **** &TWiki::Store::readWebTopic( $web, $topicname ), $topicname, $web ) ); } ! @list = grep { /(<\/?pre>)|($regex{headerPatternDa})|($regex{headerPatternSp})|($regex{headerPatternHt})/ } @list; my $insidePre = 0; my $i = 0; my $tabs = ""; my $anchor = ""; my $highest = 99; foreach $line ( @list ) { if( $line =~ /^.*
.*$/io ) {
              $insidePre = 1;
--- 2297,2311 ----
              &TWiki::Store::readWebTopic( $web, $topicname ), $topicname, $web ) );
      }
  
!     @list = grep { /(<\/?pre>)|($regex{headerPatternDa})|($regex{headerPatternNum})|($regex{headerPatternSp})|($regex{headerPatternHt})/ } @list;
      my $insidePre = 0;
      my $i = 0;
      my $tabs = "";
      my $anchor = "";
      my $highest = 99;
+     my $tocIsNumbered;
+     my $useNumberedToc=0;
+     my (@levelArray,$prevLevel);
      foreach $line ( @list ) {
          if( $line =~ /^.*
.*$/io ) {
              $insidePre = 1;
***************
*** 2308,2314 ****
          }
          if (!$insidePre) {
              $level = $line ;
!             if ( $line =~  /$regex{headerPatternDa}/o ) {
                  $level =~ s/$regex{headerPatternDa}/$1/go;
                  $level = length $level;
                  $line  =~ s/$regex{headerPatternDa}/$2/go;
--- 2317,2334 ----
          }
          if (!$insidePre) {
              $level = $line ;
!             # Numbered Header modification
!             $tocIsNumbered = 0;
!             if ( $line =~  /$regex{headerPatternNum}/o ) {
!                 $level =~ s/$regex{headerPatternNum}/$1/go ;
!                 $tocIsNumbered = 1;
!                 $useNumberedToc++;
!                 $level = length $level;
!                 $line  =~ s/$regex{headerPatternNum}/$2/go ;
!                 $anchor = makeAnchorName( $line );
!             }
!             #end Numbered Header Modification
!             elsif ( $line =~  /$regex{headerPatternDa}/o ) {
                  $level =~ s/$regex{headerPatternDa}/$1/go;
                  $level = length $level;
                  $line  =~ s/$regex{headerPatternDa}/$2/go;
***************
*** 2322,2333 ****
--- 2342,2401 ----
                  $level =~ s/$regex{headerPatternHt}/$1/gio;
                  $line  =~ s/$regex{headerPatternHt}/$2/gio;
              }
+             # Don't output unnumbered topics if we have numbered topics
+             if ($useNumberedToc and !$tocIsNumbered)
+             {
+                 next;
+             }
+ 
              if( ( $line ) && ( $level <= $depth ) ) {
                  $anchor = makeAnchorName( $line );
                  # cut TOC exclude '---+ heading !! exclude'
                  $line  =~ s/\s*$regex{headerPatternNoTOC}.+$//go;
                  $line  =~ s/[\n\r]//go;
                  next unless $line;
+ 
+  
+                 #David Weller: Numbered Header modification
+                 my $levelArrayIndex = 0;
+                 my $levelArrayValue = 0;
+  
+                 if ($tocIsNumbered) {
+                    if (!$prevLevel) {
+                       $prevLevel = $depth;
+                       #populate a list to track the count of each level
+                       @levelArray = ("x") x $level;
+                    }
+  
+                 $levelArrayIndex = $level-1;
+                 $levelArrayValue = $levelArray[$levelArrayIndex];
+  
+                    if ($level < $prevLevel) { #"x" out deeper values 
+                       for (my $i=$level;$i < $depth; $i++) {
+                          $levelArray[$i] = "x";
+                       }
+                    }
+                    if ($levelArrayValue eq "x") { 
+                     #our first visit to this level
+                          $levelArray[$levelArrayIndex] = 0;
+                     }
+                    #Level should have scalar context by now
+                    $levelArray[$levelArrayIndex]++;
+  
+                    $prevLevel = $level;
+  
+                    #now create the display string
+                    my $numberedHeader = "";
+                    for(my $i=0; $i < $level; $i++){
+                       $numberedHeader .= $levelArray[$i] . ".";
+                    }
+                    #now slap everything together (including hard spaces)
+                    $line = $numberedHeader . "  " . $line;
+                 }
+  
+                 #end Numbered header modification
+  
+ 
                  $highest = $level if( $level < $highest );
                  $tabs = "";
                  for( $i=0 ; $i<$level ; $i++ ) {
***************
*** 2345,2355 ****
                  # create linked bullet item
                  # AB change
  		# $line = "$tabs* $line";
  		if ( $viewScript eq 'view' ) {
! 		    $line = "$tabs* $line";
  		} else {
! 		    $line = "$tabs* $line";
  		}
                  $result .= "\n$line";
              }
          }
--- 2413,2431 ----
                  # create linked bullet item
                  # AB change
  		# $line = "$tabs* $line";
+ 
  		if ( $viewScript eq 'view' ) {
! 		    $line = "$line";
  		} else {
! 		    $line = "$line";
  		}
+         if ( $tocIsNumbered) {
+             $line = "

$line

"; + } + else { + $line = "$tabs* $line" ; + } + #$line .= "
";# if ( $tocIsNumbered ); $result .= "\n$line"; } } *************** *** 3398,3404 **** # Build an HTML <Hn> element with suitable anchor for linking from %TOC% =pod ! ---++ sub makeAnchorHeading ( $theText, $theLevel ) Not yet documented. --- 3474,3480 ---- # Build an HTML <Hn> element with suitable anchor for linking from %TOC% =pod ! ---++ sub makeAnchorHeading ( $theText, $theLevel, $levelChars ) Not yet documented. *************** *** 3406,3412 **** sub makeAnchorHeading { ! my( $theText, $theLevel ) = @_; # - Need to build '

text

' # type markup. --- 3482,3488 ---- sub makeAnchorHeading { ! my( $theText, $theLevel, $levelChars ) = @_; # - Need to build '

text

' # type markup. *************** *** 3427,3432 **** --- 3503,3554 ---- $hasAnchor = 1 if( $text =~ m/(^|[\s\(])($regex{webNameRegex})\.($regex{wikiWordRegex})/ ); $hasAnchor = 1 if( $text =~ m/(^|[\s\(])($regex{wikiWordRegex})/ ); + #David Weller: Numbered Header modification + + my $depth = 6; #hardcoded value. TOC uses this param, but not this sub + + # Need to modify $text before letting header tags get written + # if the level chars are # signs + + my $headerIsNumbered = 1 if ($levelChars =~ /^\#+/); + + if ($headerIsNumbered) { + if (!$prevLevel) { + #TOC has already undef'ed prevLevel + $prevLevel = $depth; + + #populate a list to track the count of each level + @levelArray = ("x") x $theLevel; + } + + my $levelArrayIndex = $theLevel-1; + my $levelArrayValue = $levelArray[$levelArrayIndex]; + + if ($theLevel < $prevLevel) { #"x" out deeper values + for (my $i=$theLevel;$i < $depth; $i++) { + $levelArray[$i] = "x"; + } + } + if ($levelArrayValue eq "x") { + #our first visit to this level + $levelArray[$levelArrayIndex] = 0; + } + #Level should have scalar context by now + $levelArray[$levelArrayIndex]++; + + $prevLevel = $theLevel; + + #now create the display string + my $numberedHeader = ""; + for(my $i=0; $i < $theLevel; $i++){ + $numberedHeader .= $levelArray[$i] . "."; + } + #now slap everything together (including hard spaces) + $text = $numberedHeader . "  " . $text; + + } + #end Numbered Header Modifications + # FIXME: '

WikiName' has an # empty tag, which is not HTML conform my $prefix = " " . *************** *** 3943,3953 **** # Headings # '
...
' HTML rule ! s/$regex{headerPatternHt}/&makeAnchorHeading($2,$1)/geoi; # '\t+++++++' rule ! s/$regex{headerPatternSp}/&makeAnchorHeading($2,(length($1)))/geo; # '----+++++++' rule ! s/$regex{headerPatternDa}/&makeAnchorHeading($2,(length($1)))/geo; # Horizontal rule s/^---+/
/; --- 4065,4077 ---- # Headings # '
...
' HTML rule ! s/$regex{headerPatternHt}/&makeAnchorHeading($2,$1,$1)/geoi; # '\t+++++++' rule ! s/$regex{headerPatternSp}/&makeAnchorHeading($2,(length($1)),$1)/geo; ! # '----######' rule ! s/$regex{headerPatternNum}/&makeAnchorHeading($2,(length($1)),$1)/geo; # '----+++++++' rule ! s/$regex{headerPatternDa}/&makeAnchorHeading($2,(length($1)),$1)/geo; # Horizontal rule s/^---+/
/;