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  `)