blob: 7af516c634dcac4904639fa2aea2d5bd7ddd8c39 [file] [log] [blame]
// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// To use: Create an HTML file using the following format...
/*
<style>
p.note {
font-size: 0.80em;
font-family: "Helvetica Neue", Arial, sans-serif;
}
</style>
<p>
<!--include about-me.svg -->
<!--end-->
</p>
*/
// Then run mkhtml.go and it will inline the SVG files.
package main
import (
"bytes"
"flag"
"io/ioutil"
"log"
"strings"
)
var strip = flag.Bool("strip", false, "strip included files")
func main() {
flag.Parse()
for _, arg := range flag.Args() {
do(arg)
}
}
func do(file string) {
data, err := ioutil.ReadFile(file)
if err != nil {
log.Fatal(err)
}
var out []byte
skip := false
for _, line := range bytes.SplitAfter(data, []byte("\n")) {
if skip && bytes.HasPrefix(line, []byte("<!--end")) {
skip = false
}
if skip {
continue
}
out = append(out, line...)
if bytes.HasPrefix(line, []byte("<!--include")) {
if !*strip {
more, err := ioutil.ReadFile(strings.Fields(string(line))[1])
if err != nil {
log.Fatal(err)
}
if bytes.HasPrefix(more, xmlHeader) {
more = more[len(xmlHeader):]
}
if len(more) > 0 && more[len(more)-1] != '\n' {
more = append(more, '\n')
}
out = append(out, more...)
}
skip = true
}
}
if err := ioutil.WriteFile(file, out, 0666); err != nil {
log.Fatal(err)
}
}
var xmlHeader = []byte(`<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
`)