golang.org/toolchain@v0.0.1-go1.9rc2.windows-amd64/blog/content/survey2016/mkhtml.go (about) 1 // Copyright 2017 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 import ( 8 "bytes" 9 "flag" 10 "io/ioutil" 11 "log" 12 "strings" 13 ) 14 15 var strip = flag.Bool("strip", false, "strip included files") 16 17 func main() { 18 flag.Parse() 19 for _, arg := range flag.Args() { 20 do(arg) 21 } 22 } 23 24 func do(file string) { 25 data, err := ioutil.ReadFile(file) 26 if err != nil { 27 log.Fatal(err) 28 } 29 var out []byte 30 skip := false 31 for _, line := range bytes.SplitAfter(data, []byte("\n")) { 32 if skip && bytes.HasPrefix(line, []byte("<!--end")) { 33 skip = false 34 } 35 if skip { 36 continue 37 } 38 out = append(out, line...) 39 if bytes.HasPrefix(line, []byte("<!--include")) { 40 if !*strip { 41 more, err := ioutil.ReadFile(strings.Fields(string(line))[1]) 42 if err != nil { 43 log.Fatal(err) 44 } 45 if bytes.HasPrefix(more, xmlHeader) { 46 more = more[len(xmlHeader):] 47 } 48 if len(more) > 0 && more[len(more)-1] != '\n' { 49 more = append(more, '\n') 50 } 51 out = append(out, more...) 52 } 53 skip = true 54 } 55 } 56 57 if err := ioutil.WriteFile(file, out, 0666); err != nil { 58 log.Fatal(err) 59 } 60 } 61 62 var xmlHeader = []byte(`<?xml version="1.0" standalone="no"?> 63 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 64 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 65 `)