package main import ( "os" "fmt" "bufio" "strings" ) type hlink struct { url string text string } type Page struct { Body string Links []hlink URL string } type Game struct { Title string Pages []Page } var title string = "eow" var head string = ` ` + title + ` ` var tail string = "\n" + ` ` func text2link(text string, url string) string { return " " + text + "" } func line2link(line string) hlink { sline := strings.Split(line," ") url:= sline[0][1:] + ".html" text := strings.Join(sline[1:]," ") //return " " + text + "" return hlink{url,text} } func writeHTML(title string, body string, links...hlink) { f, _ := os.Create(title + ".html") f.WriteString(head) f.WriteString("

" + body + "

") f.WriteString("\n
\n") for _,link := range(links){ f.WriteString(text2link(link.text,link.url)) } f.WriteString(tail) } func cutFirstWord(w string) string { splitLine := strings.Split(w, " ") return strings.Join(splitLine[1:], " ") } func fparse(fname string) Game{ file, _ := os.Open(fname) defer file.Close() scanner := bufio.NewScanner(file) game := Game{} var pcount int = 0 scanner.Scan() game.Title = scanner.Text() for scanner.Scan() { line := scanner.Text() switch { case len(line) == 0: pcount++ case string(line[0]) == ":": sline := strings.Split(line, " ") url := sline[0][1:] + ".html" //fmt.Println(url) body := strings.Join(sline[1:]," ") //fmt.Println(body) game.Pages = append(game.Pages, Page{Body:body, URL: url}) case string(line[0]) == "-": newLink := line2link(line) game.Pages[pcount].Links = append(game.Pages[pcount].Links, newLink) } } return game } func main() { game := fparse("model") //fmt.Println(game) /* l1 := hlink{url:"01.html",text:"First"} l2 := hlink{url:"02.html",text:"Second"} writeHTML("check", "Yolo World", l1, l2)*/ }