|  | @@ -77,6 +77,18 @@ func (staticmd *Staticmd) Multi() {
 | 
	
		
			
				|  |  |  		out := staticmd.ior(staticmd.Pages[i])
 | 
	
		
			
				|  |  |  		dir := filepath.Dir(staticmd.ior(out))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +		// create a new navigation object
 | 
	
		
			
				|  |  | +		nav := Navigation{
 | 
	
		
			
				|  |  | +			Name: basename(out),
 | 
	
		
			
				|  |  | +			Link: staticmd.link(out),
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// handle special table-of-contents cases
 | 
	
		
			
				|  |  | +		if filepath.Dir(out) != staticmd.Output && strings.ToLower(nav.Name) == "index" {
 | 
	
		
			
				|  |  | +			nav.Name = basename(dir)
 | 
	
		
			
				|  |  | +			dir = filepath.Dir(dir)
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  		// build indexes first-match
 | 
	
		
			
				|  |  |  		if _, ok := navigation[dir]; !ok {
 | 
	
		
			
				|  |  |  			navigation[dir] = make([]Navigation, 0)
 | 
	
	
		
			
				|  | @@ -89,18 +101,10 @@ func (staticmd *Staticmd) Multi() {
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		// create a new navigation object
 | 
	
		
			
				|  |  | -		nav := Navigation{
 | 
	
		
			
				|  |  | -			Name: basename(out),
 | 
	
		
			
				|  |  | -			Link: staticmd.link(out),
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		// append files to their respective directories
 | 
	
		
			
				|  |  | +		// append to navigational list
 | 
	
		
			
				|  |  |  		navigation[dir] = append(navigation[dir], nav)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	// @todo second cycle to clarify whether index or readme for table-of-contents
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  	// debug output
 | 
	
		
			
				|  |  |  	staticmd.Logger.Debug("Navigation: %+v", navigation)
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -119,7 +123,7 @@ func (staticmd *Staticmd) Multi() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  				// acquire output filepath
 | 
	
		
			
				|  |  |  				out := staticmd.ior(p)
 | 
	
		
			
				|  |  | -				// dir := filepath.Dir(out)
 | 
	
		
			
				|  |  | +				dir := filepath.Dir(out)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  				// prepare a new page object for our template to render
 | 
	
		
			
				|  |  |  				page := Page{
 | 
	
	
		
			
				|  | @@ -132,15 +136,29 @@ func (staticmd *Staticmd) Multi() {
 | 
	
		
			
				|  |  |  				// read in page text
 | 
	
		
			
				|  |  |  				if markdown, err := ioutil.ReadFile(p); err == nil {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -					// conditionally prepend table of contents?
 | 
	
		
			
				|  |  | +					// if this page happens to be a sub-index we can generate the table of contents
 | 
	
		
			
				|  |  | +					if dir != staticmd.Output && strings.ToLower(basename(p)) == "index" {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +						// iterate and build table of contents as basic markdown
 | 
	
		
			
				|  |  | +						toc := "\n## Table of Contents:\n\n"
 | 
	
		
			
				|  |  | +						for i, _ := range navigation[dir] {
 | 
	
		
			
				|  |  | +							toc = toc + "- [" + navigation[dir][i].Name + "](" + navigation[dir][i].Link + ")\n"
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +						// debug table of contents output
 | 
	
		
			
				|  |  | +						staticmd.Logger.Debug("table of contents for %s, %s", out, toc)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +						// prepend table of contents
 | 
	
		
			
				|  |  | +						markdown = append([]byte(toc), markdown...)
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  					page.Content = template.HTML(blackfriday.MarkdownCommon(markdown))
 | 
	
		
			
				|  |  |  				} else {
 | 
	
		
			
				|  |  |  					staticmd.Logger.Error("failed to read file: %s, %s", p, err)
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -				// debug output
 | 
	
		
			
				|  |  | -				staticmd.Logger.Debug("Page: %+v", page)
 | 
	
		
			
				|  |  | +				// debug page output
 | 
	
		
			
				|  |  | +				staticmd.Logger.Debug("page: %+v", page)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  				// translate input path to output path & create a write context
 | 
	
		
			
				|  |  |  				if f, err := os.Create(out); err == nil {
 |