/** * Copyright (C) 2013-2015 all@code-story.net * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License */ package net.codestory.http.compilers; import static com.github.sommeri.less4j.LessCompiler.*; import com.github.sommeri.less4j.*; import com.github.sommeri.less4j.core.*; import net.codestory.http.io.Resources; public class LessCompiler implements Compiler { private final Resources resources; private final boolean inline; public LessCompiler(Resources resources, boolean prodMode) { this.resources = resources; this.inline = !prodMode; } @Override public String compile(SourceFile sourceFile) { try { Configuration configuration = new Configuration(); configureSourceMap(configuration); return new ThreadUnsafeLessCompiler().compile(new PathSource(resources, sourceFile), configuration).getCss(); } catch (Less4jException e) { String message = cleanMessage(sourceFile, e.getMessage()); throw new CompilerException(message); } } private void configureSourceMap(Configuration configuration) { SourceMapConfiguration sourceMaps = configuration.getSourceMapConfiguration(); sourceMaps.setLinkSourceMap(false); sourceMaps.setInline(inline); } private static String cleanMessage(SourceFile sourcefile, String message) { return "Unable to compile less " + sourcefile.getFileName() + ": " + message.replace("Could not compile less. ", ""); } }