func (w *Writer) writeRaw(s string) (int, error) {
	c, err := w.getColorer()
	if err != nil {
		return -1, err
	}
	nWritten := 0
	for _, r := range s {
		c.rainbow(freq, float64(w.origin)+float64(w.lineIdx)/spread)
		_, err := w.Output.Write(c.format())
		if err != nil {
			return nWritten, err
		}
		n, err := w.Output.Write([]byte(string(r)))
		if err != nil {
			return nWritten, err
		}
		_, err = w.Output.Write(c.reset())
		if err != nil {
			return nWritten, err
		}
		nWritten += n
		w.lineIdx++
	}
	return nWritten, nil
}
writeRaw will write a lol'd s to the underlying writer.  It does no line
detection.
package lol
import (
	"fmt"
	"io"
	"os"
	"strings"
	"github.com/mattn/go-isatty"
)
const (
	spread = 3.0
	freq   = 0.1
	seed   = 0
)
const (
	ColorModeTrueColor = iota
	ColorMode256
	ColorMode0
)
type Writer struct {
	Output    io.Writer
	ColorMode int
	lineIdx   int
	origin    int
}
var noColor = os.Getenv("TERM") == "dumb" || (!isatty.IsTerminal(os.Stdout.Fd()) && !isatty.IsCygwinTerminal(os.Stdout.Fd()))