|
@@ -27,6 +27,7 @@ type Staticmd struct {
|
|
|
}
|
|
|
|
|
|
// convert markdown input path to html output path
|
|
|
+// there is no reverse (because we support `.md`, `.mkd`, and `.markdown`)
|
|
|
func (staticmd *Staticmd) ior(path string) string {
|
|
|
return strings.TrimSuffix(strings.Replace(path, staticmd.Input, staticmd.Output, 1), filepath.Ext(path)) + ".html"
|
|
|
}
|
|
@@ -35,20 +36,12 @@ func (staticmd *Staticmd) ior(path string) string {
|
|
|
func (staticmd *Staticmd) depth(path string) string {
|
|
|
if staticmd.Relative {
|
|
|
if rel, err := filepath.Rel(filepath.Dir(path), staticmd.Output); err == nil {
|
|
|
- return rel
|
|
|
+ return rel+string(os.PathSeparator)
|
|
|
}
|
|
|
}
|
|
|
return ""
|
|
|
}
|
|
|
|
|
|
-// get link to file, with support for relative path linking
|
|
|
-func (staticmd *Staticmd) link(path string) string {
|
|
|
- if staticmd.Relative {
|
|
|
- return strings.TrimPrefix(path, filepath.Dir(path))
|
|
|
- }
|
|
|
- return strings.TrimPrefix(path, staticmd.Output)
|
|
|
-}
|
|
|
-
|
|
|
// walk the directories and build a list of pages
|
|
|
func (staticmd *Staticmd) Walk(path string, file os.FileInfo, err error) error {
|
|
|
|
|
@@ -77,16 +70,35 @@ 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),
|
|
|
- }
|
|
|
+ // create navigation object
|
|
|
+ nav := Navigation{}
|
|
|
+
|
|
|
+ // sub-index condition changes name, dir, and link
|
|
|
+ if filepath.Dir(out) != staticmd.Output && strings.ToLower(basename(out)) == "index" {
|
|
|
|
|
|
- // handle special table-of-contents cases
|
|
|
- if filepath.Dir(out) != staticmd.Output && strings.ToLower(nav.Name) == "index" {
|
|
|
+ // set name to containing folder
|
|
|
nav.Name = basename(dir)
|
|
|
+
|
|
|
+ // set relative or absolute link
|
|
|
+ if staticmd.Relative {
|
|
|
+ nav.Link = filepath.Join(strings.TrimPrefix(dir, filepath.Dir(dir)+string(os.PathSeparator)), filepath.Base(out))
|
|
|
+ } else {
|
|
|
+ nav.Link = strings.TrimPrefix(dir, staticmd.Output)+string(os.PathSeparator)
|
|
|
+ }
|
|
|
+
|
|
|
+ // update dir to dir of dir
|
|
|
dir = filepath.Dir(dir)
|
|
|
+ } else {
|
|
|
+
|
|
|
+ // set name to files name
|
|
|
+ nav.Name = basename(out)
|
|
|
+
|
|
|
+ // set relative or absolute link
|
|
|
+ if staticmd.Relative {
|
|
|
+ nav.Link = strings.TrimPrefix(out, filepath.Dir(out)+string(os.PathSeparator))
|
|
|
+ } else {
|
|
|
+ nav.Link = strings.TrimPrefix(out, staticmd.Output)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// build indexes first-match
|
|
@@ -105,8 +117,8 @@ func (staticmd *Staticmd) Multi() {
|
|
|
navigation[dir] = append(navigation[dir], nav)
|
|
|
}
|
|
|
|
|
|
- // debug output
|
|
|
- staticmd.Logger.Debug("Navigation: %+v", navigation)
|
|
|
+ // debug navigation output
|
|
|
+ staticmd.Logger.Debug("navigation: %+v", navigation)
|
|
|
|
|
|
// prepare waitgroup, bufferer channel, and add number of async handlers to wg
|
|
|
var wg sync.WaitGroup
|
|
@@ -130,7 +142,7 @@ func (staticmd *Staticmd) Multi() {
|
|
|
Name: basename(p),
|
|
|
Version: staticmd.Version,
|
|
|
Nav: navigation[staticmd.Output],
|
|
|
- Depth: staticmd.depth(p),
|
|
|
+ Depth: staticmd.depth(out),
|
|
|
}
|
|
|
|
|
|
// read in page text
|