func (self *Visitor) visit(path string, f os.FileInfo, err error) error { if f == nil { return err } if f.IsDir() { return nil } else if (f.Mode() & os.ModeSymlink) > 0 { return nil } else { if strings.HasSuffix(f.Name(), ".md") { fmt.Println(f) file, err := os.Open(f.Name()) if err != nil { return err } input, _ := ioutil.ReadAll(file) input = regexp.MustCompile("\\[(.*?)\\]\\(<?(.*?)\\.md>?\\)").ReplaceAll(input, []byte("[$1](<$2.html>)")) var out *os.File if out, err = os.Create(strings.Replace(f.Name(), ".md", ".html", -1)); err != nil { fmt.Fprintf(os.Stderr, "Error creating %s: %v", f.Name(), err) os.Exit(-1) } defer out.Close() md := md2min.New("none") err = md.Parse(input, out) if err != nil { fmt.Fprintln(os.Stderr, "Parsing Error", err) os.Exit(-1) } } } return nil }
func (self *Visitor) md2html(arg map[string]string) error { from := arg["from"] to := arg["to"] err := filepath.Walk(from+"/", func(path string, f os.FileInfo, err error) error { if f == nil { return err } if f.IsDir() { return nil } if (f.Mode() & os.ModeSymlink) > 0 { return nil } if !strings.HasSuffix(f.Name(), ".md") { return nil } file, err := os.Open(path) if err != nil { return err } input_byte, _ := ioutil.ReadAll(file) input := string(input_byte) input = regexp.MustCompile(`\[(.*?)\]\(<?(.*?)\.md>?\)`).ReplaceAllString(input, "[$1](<$2.html>)") if f.Name() == "README.md" { input = regexp.MustCompile(`https:\/\/github\.com\/astaxie\/build-web-application-with-golang\/blob\/master\/`).ReplaceAllString(input, "") } // 以#开头的行,在#后增加空格 // 以#开头的行, 删除多余的空格 input = FixHeader(input) // 删除页面链接 input = RemoveFooterLink(input) // remove image suffix input = RemoveImageLinkSuffix(input) var out *os.File filename := strings.Replace(f.Name(), ".md", ".html", -1) fmt.Println(to + "/" + filename) if out, err = os.Create(to + "/" + filename); err != nil { fmt.Fprintf(os.Stderr, "Error creating %s: %v", f.Name(), err) os.Exit(-1) } defer out.Close() md := md2min.New("none") err = md.Parse([]byte(input), out) if err != nil { fmt.Fprintln(os.Stderr, "Parsing Error", err) os.Exit(-1) } return nil }) return err }
func main() { defer pFail() flag.Parse() i := 0 for ; i < len(modeList); i++ { if modeList[i] == mode { break } } if flag.NArg() < 1 || i >= len(modeList) { usage() return } name := flag.Args()[0] file, err := os.Open(name) if err != nil { panic(err) } defer file.Close() input, err := ioutil.ReadAll(file) if err != nil { panic(err) } md := md2min.New(mode) newname := strings.TrimRight(name, ".md") + ".html" outfile, err := os.Create(newname) if err != nil { panic(err) } defer outfile.Close() err = md.Parse(input, outfile) if err != nil { panic(err) } }