1package main 2 3import ( 4 "flag" 5 "fmt" 6 "io/ioutil" 7 "os" 8 9 "github.com/aymerick/douceur/inliner" 10 "github.com/aymerick/douceur/parser" 11) 12 13const ( 14 // Version is package version 15 Version = "0.2.0" 16) 17 18var ( 19 flagVersion bool 20) 21 22func init() { 23 flag.BoolVar(&flagVersion, "version", false, "Display version") 24} 25 26func main() { 27 flag.Parse() 28 29 if flagVersion { 30 fmt.Println(Version) 31 os.Exit(0) 32 } 33 34 args := flag.Args() 35 36 if len(args) == 0 { 37 fmt.Println("No command supplied") 38 os.Exit(1) 39 } 40 41 switch args[0] { 42 case "parse": 43 if len(args) < 2 { 44 fmt.Println("Missing file path") 45 os.Exit(1) 46 } 47 48 parseCSS(args[1]) 49 case "inline": 50 if len(args) < 2 { 51 fmt.Println("Missing file path") 52 os.Exit(1) 53 } 54 55 inlineCSS(args[1]) 56 default: 57 fmt.Println("Unexpected command: ", args[0]) 58 os.Exit(1) 59 } 60} 61 62// parse and display CSS file 63func parseCSS(filePath string) { 64 input := readFile(filePath) 65 66 stylesheet, err := parser.Parse(string(input)) 67 if err != nil { 68 fmt.Println("Parsing error: ", err) 69 os.Exit(1) 70 } 71 72 fmt.Println(stylesheet.String()) 73} 74 75// inlines CSS into HTML and display result 76func inlineCSS(filePath string) { 77 input := readFile(filePath) 78 79 output, err := inliner.Inline(string(input)) 80 if err != nil { 81 fmt.Println("Inlining error: ", err) 82 os.Exit(1) 83 } 84 85 fmt.Println(output) 86} 87 88func readFile(filePath string) []byte { 89 file, err := ioutil.ReadFile(filePath) 90 if err != nil { 91 fmt.Println("Failed to open file: ", filePath, err) 92 os.Exit(1) 93 } 94 95 return file 96} 97