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