ripple-api/vendor/zxq.co/ripple/semantic-icons-ugc/generate.go
Morgan Bazalgette 3961e310b1 vendor!
2017-01-14 18:42:10 +01:00

110 lines
1.9 KiB
Go

// +build ignore
package main
import (
"fmt"
"io/ioutil"
"net/http"
"strings"
"github.com/aymerick/douceur/parser"
"os"
)
const fileHeader = `// THIS FILE WAS AUTOMATICALLY GENERATED BY A TOOL
// Use ` + "`go generate`" + ` to generate this.
package semanticiconsugc
// SaneIcons are the icons that are deemed to be safe to be accepted from user
// generated content.
var SaneIcons = []string{
`
func main() {
resp, err := http.Get("https://raw.githubusercontent.com/Semantic-Org/Semantic-UI/master/dist/components/icon.css")
if err != nil {
panic(err)
}
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
s := strings.Replace(string(b), "-webkit-", "", -1)
data, err := parser.Parse(s)
if err != nil {
panic(err)
}
f, err := os.Create("sane.go")
defer f.Close()
if err != nil {
panic(err)
}
f.WriteString(fileHeader)
blacklist := [...]string{
"icons",
"icon:first-child",
"\\35 00px", // seems like a semantic bug
"fitted",
"hover",
"active",
"emphasized",
"icons",
"link",
"circular",
"bordered",
"miny",
"tiny",
"small",
"large",
"big",
"huge",
"massive",
"corner",
}
written := make([]string, 0, 500)
// four nested for-ranges! jesus h. christ!
for _, r := range data.Rules {
if r == nil {
continue
}
for _, s := range r.Selectors {
s = strings.TrimPrefix(s, "i.")
s = strings.TrimSuffix(s, ":before")
s = strings.TrimSuffix(s, ".icon")
if s == "" {
continue
}
classes := strings.Split(s, ".")
for _, p := range classes {
var b bool
for _, bi := range blacklist {
if bi == p {
b = true
break
}
}
if b {
break
}
for _, w := range written {
if w == p {
b = true
break
}
}
if b {
continue
}
written = append(written, p)
fmt.Fprintf(f, "\t%q,\n", p)
}
}
}
f.WriteString("}\n")
}