*** 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} = '^
.*$/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/^---+/
/;