package com.github.sommeri.less4j.utils;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.util.List;
import org.apache.commons.io.FileUtils;
import com.github.sommeri.less4j.Less4jException;
import com.github.sommeri.less4j.LessCompiler;
import com.github.sommeri.less4j.LessFunction;
import com.github.sommeri.less4j.LessProblems;
import com.github.sommeri.less4j.LessCompiler.CompilationResult;
import com.github.sommeri.less4j.LessCompiler.Configuration;
import com.github.sommeri.less4j.LessCompiler.Problem;
import com.github.sommeri.less4j.LessSource.StringSource;
import com.github.sommeri.less4j.core.DefaultLessCompiler;
import com.github.sommeri.less4j.core.ThreadUnsafeLessCompiler;
import com.github.sommeri.less4j.core.ast.Expression;
import com.github.sommeri.less4j.core.ast.FunctionExpression;
import com.github.sommeri.less4j.core.ast.IdentifierExpression;
public class ReadmeExample {
public static void main(String[] args) throws Less4jException {
basicFileExample();
customCssLocationExample1();
customCssLocationExample2();
guessedCssLocationExample1();
guessedCssLocationExample2();
customFunctionExample();
}
private static void basicFileExample() throws Less4jException {
File inputLessFile = createFile("sampleInput.less", "* { margin: 1 1 1 1; }");
LessCompiler compiler = new ThreadUnsafeLessCompiler();
CompilationResult compilationResult = compiler.compile(inputLessFile);
System.out.println(compilationResult.getCss());
for (Problem warning : compilationResult.getWarnings()) {
System.err.println(format(warning));
}
deleteFile(inputLessFile);
}
private static void guessedCssLocationExample1() throws Less4jException {
File inputLessFile = createFile("src/sampleInput.less", ".class { margin: 1 1 1 1; }");
File lessFile = new File("src/sampleInput.less").getAbsoluteFile();
LessCompiler compiler = new DefaultLessCompiler();
CompilationResult compilationResult = compiler.compile(lessFile);
System.out.println(compilationResult.getCss());
System.out.println(compilationResult.getSourceMap());
deleteFile(inputLessFile);
}
private static void guessedCssLocationExample2() throws Less4jException {
URI uri = (new File("src/sampleInput.less")).toURI();
StringSource lessSource = new StringSource(".class { margin: 1 1 1 1; }", "sampleInput.less", uri);
LessCompiler compiler = new DefaultLessCompiler();
CompilationResult compilationResult = compiler.compile(lessSource);
System.out.println(compilationResult.getCss());
System.out.println(compilationResult.getSourceMap());
}
private static void customCssLocationExample1() throws Less4jException {
File inputLessFile = createFile("src/sampleInput.less", ".class { margin: 1 1 1 1; }");
File lessFile = new File("src/sampleInput.less").getAbsoluteFile();
File cssFile = new File("dist/sampleInput.css").getAbsoluteFile();
Configuration configuration = new Configuration();
configuration.setCssResultLocation(cssFile);
LessCompiler compiler = new DefaultLessCompiler();
CompilationResult compilationResult = compiler.compile(lessFile, configuration);
System.out.println(compilationResult.getCss());
System.out.println(compilationResult.getSourceMap());
deleteFile(inputLessFile);
}
private static void customCssLocationExample2() throws Less4jException {
File cssFile = new File("dist/sampleInput.css").getAbsoluteFile();
Configuration configuration = new Configuration();
configuration.setCssResultLocation(cssFile);
URI uri = (new File("src/sampleInput.less")).toURI();
StringSource lessSource = new StringSource(".class { margin: 1 1 1 1; }", "sampleInput.less", uri);
LessCompiler compiler = new DefaultLessCompiler();
CompilationResult compilationResult = compiler.compile(lessSource, configuration);
System.out.println(compilationResult.getCss());
System.out.println(compilationResult.getSourceMap());
}
private static void customFunctionExample() throws Less4jException {
File inputLessFile = createFile("sampleInput.less",
"div {\n" +
" property: constant();\n" +
"}");
Configuration configuration = new Configuration();
configuration.addCustomFunction(new ConstantFunction());
LessCompiler compiler = new DefaultLessCompiler();
CompilationResult compilationResult = compiler.compile(inputLessFile, configuration);
System.out.println(compilationResult.getCss());
deleteFile(inputLessFile);
}
private static void deleteFile(File inputLessFile) {
try {
FileUtils.forceDelete(inputLessFile);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private static File createFile(String filename, String content) {
File file = new File(filename);
try {
FileUtils.writeStringToFile(file, content, false);
} catch (IOException e) {
throw new RuntimeException(e);
}
return file;
}
private static String format(Problem warning) {
return "WARNING " + warning.getLine() +":" + warning.getCharacter()+ " " + warning.getMessage();
}
}
class ConstantFunction implements LessFunction {
@Override
public boolean canEvaluate(FunctionExpression input, List<Expression> parameters) {
return input.getName().equals("constant") && parameters.isEmpty();
}
@Override
public Expression evaluate(FunctionExpression input, List<Expression> parameters, Expression evaluatedParameter, LessProblems problems) {
return new IdentifierExpression(input.getUnderlyingStructure(), "fixed");
}
}