#!/usr/local/bin/tclsh8.3

catch {source "[file dirname [info script]]/lib.tcl"}

	set lOptions {
		{package             {name of a package}}
		{proc                {name of a procedure}}
		{namespace           {name of a namespace}}
	}

set lArgv $argv
if {([catch {set lResult [::commandline::GetOptions lArgv $lOptions]} \
lCatch])} {
	exit 0
}

proc GetTree {{pDirectory "."}} {
	set lOldDirectory [pwd]
	cd $pDirectory
	set lCurrentDirectory [pwd]
	set lFileList [lsort -dictionary [glob -nocomplain * .*]]
	set lNewFileList ""
	
	foreach lSpecialFileName [list "." ".."] {
		set lIndex [lsearch -exact $lFileList $lSpecialFileName]
		set lFileList [lreplace $lFileList $lIndex $lIndex]
	}
	
	foreach lFileName $lFileList {
		if {([file isfile $lFileName]) && \
			[string match "*.tcl" $lFileName]} {
			lappend lNewFileList [file join $lCurrentDirectory $lFileName]
		}
		if {([file isdirectory $lFileName])} {
			set lNewFileList \
				[concat $lNewFileList [GetTree $lFileName]]
		}
	}
	cd $lOldDirectory
	return $lNewFileList
}

proc ParseTCLDocFile {pFileName} {
	set lFile [open $pFileName r]

	set lData ""
	set lIndex 0
	while {([gets $lFile lLine] >= 0)} {
		if {([regexp "\[ \t]*##\[ \t]*\\\$Start Source" $lLine])} {
			incr lIndex
			while {([gets $lFile lLine] >= 0)} {
				if {([regexp "\[ \t]*##\[ \t]*\\\$End Source" $lLine])} {
					break
				} else {
					puts $lLine
					lappend lSection($lIndex) $lLine
				}
			}
		}

		if {([regexp "\[ \t]*##\[ \t]*\\\$Start .*" $lLine])} {
			incr lIndex
			while {([gets $lFile lLine] >= 0)} {
				if {([regexp "\[ \t]*##\[ \t]*\\\$End .*" $lLine])} {
					break
				} else {
					if {([regexp "\[ \t]*##\[ \t]*\\\$(.*)\[ \t]*:\[ \t]*(.*)" $lLine lIgnore lItem lValue])} {
						puts "$lItem: $lValue"
						lappend lSection($lIndex) "$lItem: $lValue"
					} elseif {([regexp "\[ \t]*##*(.*)" $lLine lIgnore lRealLine])} {
						puts $lRealLine
						lappend lSection($lIndex) $lRealLine
					}
				}
			}
		}

		if {([regexp "\[ \t]*##\[ \t]*\\\$Note\[ \t]*:\[ \t](.*)" $lLine])} {
			incr lIndex
			while {([gets $lFile lLine] >= 0)} {
				if {([regexp "\[ \t]*##\[ \t]*\\\$End Note" $lLine])} {
					break
				} else {
					puts $lLine
					lappend lSection($lIndex) $lLine
				}
			}
		}
		##if {([regexp "\[ \t]*##*(.*)" $lLine lIgnore lRealLine])} {
		##	if {($lRealLine != "")} {
		##		puts $lRealLine
		##		lappend lData $lRealLine
		##	}
		##}
	}
	close $lFile

	for {set lIndex2 1} {$lIndex2 <= $lIndex} {incr lIndex2} {
		puts "SECTION:"
		foreach lLine $lSection($lIndex2) {
			puts $lLine
		}
	}
}


set lName [lindex $argv 0]

set lScriptFileName [info script]
file lstat $lScriptFileName lFileStats

set lOldDirectory [pwd]

if {($lFileStats(type) == "link")} {
	cd [file dirname [file readlink $lScriptFileName]]
	
} else {
	cd [file dirname $lScriptFileName]
}

set lCurrentDirectory [pwd]

set lFileList [GetTree $lCurrentDirectory]
	
foreach lFile $lFileList {
	file lstat $lFile lFileStats
	if {($lFileStats(type) != "link")} {
		ParseTCLDocFile $lFile
	}
}

cd $lOldDirectory

