-
Notifications
You must be signed in to change notification settings - Fork 47
/
ThreadUnsafeLessCompiler.java
49 lines (40 loc) · 1.92 KB
/
ThreadUnsafeLessCompiler.java
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
package com.github.sommeri.less4j.core;
import com.github.sommeri.less4j.Less4jException;
import com.github.sommeri.less4j.LessCompiler;
import com.github.sommeri.less4j.core.ast.ASTCssNode;
import com.github.sommeri.less4j.core.ast.StyleSheet;
import com.github.sommeri.less4j.core.compiler.LessToCssCompiler;
import com.github.sommeri.less4j.core.parser.ANTLRParser;
import com.github.sommeri.less4j.core.parser.ASTBuilder;
import com.github.sommeri.less4j.core.problems.ProblemsHandler;
import com.github.sommeri.less4j.utils.CssPrinter;
public class ThreadUnsafeLessCompiler implements LessCompiler {
private ProblemsHandler problemsHandler;
private ASTBuilder astBuilder;
private LessToCssCompiler compiler;
private ANTLRParser parser = new ANTLRParser();
@Override
public CompilationResult compile(String lessContent) throws Less4jException {
problemsHandler = new ProblemsHandler();
astBuilder = new ASTBuilder(problemsHandler);
compiler = new LessToCssCompiler(problemsHandler);
String css = doCompile(lessContent);
CompilationResult compilationResult = new CompilationResult(css, problemsHandler.getWarnings());
if (problemsHandler.hasErrors()) {
throw new Less4jException(problemsHandler.getErrors(), compilationResult);
}
return compilationResult;
}
private String doCompile(String lessContent) throws Less4jException {
ANTLRParser.ParseResult result = parser.parseStyleSheet(lessContent);
if (result.hasErrors()) {
CompilationResult compilationResult = new CompilationResult("Errors during parsing phase, partial result is not available.");
throw new Less4jException(result.getErrors(), compilationResult);
}
StyleSheet lessStyleSheet = astBuilder.parse(result.getTree());
ASTCssNode cssStyleSheet = compiler.compileToCss(lessStyleSheet);
CssPrinter builder = new CssPrinter();
builder.append(cssStyleSheet);
return builder.toString();
}
}