1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
package com.vaadin.buildhelpers;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;
import com.vaadin.sass.ScssStylesheet;
import com.vaadin.shared.Version;
/**
* Helper to combine css divided into separate per component dirs into one to
* optimize http requests.
*/
public class CompileTheme {
/**
* @param args
* @throws IOException
* @throws ParseException
*/
public static void main(String[] args) throws IOException, ParseException {
Options options = new Options();
options.addOption("t", "theme", true, "the theme to compile");
options.addOption("f", "theme-folder", true,
"the folder containing the theme");
options.addOption("s", "sprites", true, "use smartsprites");
CommandLineParser parser = new PosixParser();
CommandLine params = parser.parse(options, args);
if (!params.hasOption("theme") || !params.hasOption("theme-folder")) {
// automatically generate the help statement
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp(CompileTheme.class.getName(), options);
return;
}
String themeName = params.getOptionValue("theme");
String themeFolder = params.getOptionValue("theme-folder");
boolean useSprites = params.hasOption("sprites");
String version = Version.getFullVersion();
try {
processSassTheme(themeFolder, themeName, useSprites, version);
System.out.println("Compiling theme " + themeName + " successful");
} catch (Exception e) {
System.err.println("Compiling theme " + themeName + " failed");
e.printStackTrace();
}
}
private static void processSassTheme(String themeFolder, String themeName,
boolean useSmartSprites, String version) throws Exception {
StringBuffer cssHeader = new StringBuffer();
version = version.replaceAll("\\.", "_");
cssHeader.append(".v-theme-version:after {content:\"" + version
+ "\";}\n");
cssHeader.append(".v-theme-version-" + version + " {display: none;}\n");
String stylesCssDir = themeFolder + File.separator + themeName
+ File.separator;
String stylesCssName = stylesCssDir + "styles.css";
// Process as SASS file
String sassFile = stylesCssDir + "styles.scss";
ScssStylesheet scss = ScssStylesheet.get(sassFile);
if (scss == null) {
throw new IllegalArgumentException("SASS file: " + sassFile
+ " not found");
}
scss.compile();
BufferedWriter out = new BufferedWriter(new FileWriter(stylesCssName));
out.write(cssHeader.toString());
out.write(scss.toString());
out.close();
System.out.println("Compiled CSS to " + stylesCssName + " ("
+ scss.toString().length() + " bytes)");
if (useSmartSprites) {
createSprites(themeFolder, themeName);
System.out.println("Used SmartSprites to create sprites");
File oldCss = new File(stylesCssName);
oldCss.delete();
File newCss = new File(stylesCssDir + "styles-sprite.css");
boolean ok = newCss.renameTo(oldCss);
if (!ok) {
System.out.println("Rename " + newCss + " -> " + oldCss
+ " failed");
}
}
}
private static void createSprites(String themeFolder, String themeName)
throws FileNotFoundException, IOException {
String[] parameters = new String[] { "--sprite-png-depth", "AUTO",
"--css-file-suffix", "-sprite", "--css-file-encoding", "UTF-8",
"--root-dir-path", themeFolder + File.separator + themeName,
"--log-level", "WARN" };
org.carrot2.labs.smartsprites.SmartSprites.main(parameters);
}
}
|