com.github.sommeri.less4j.MultiPathStringSource Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of less4j Show documentation
Show all versions of less4j Show documentation
Less language is an extension of css and less4j compiles it into regular css. It adds several dynamic features into css: variables, expressions, nested rules.
Less4j is a port. The original compiler was written in JavaScript and is called less.js. The less language is mostly defined in less.js documentation/issues and by what less.js actually do. Links to less.js:
* home page: http://lesscss.org/
* source code & issues: https://github.com/cloudhead/less.js
package com.github.sommeri.less4j;
import java.io.File;
import java.net.URI;
import java.util.Arrays;
/**
* Class that wraps the LESS code that could be located either on a file or given as a string.
* Used to emulate the --include-path options which is not natively implemented in Less4j.
* See: https://github.com/SomMeri/less4j/wiki/Customizing-Compiler.
*/
public class MultiPathStringSource extends LessSource {
private File[] includePaths;
private String name;
private String content;
private String charsetName;
private URI uri;
/**
* @param content a string containing the LESS code to compile.
* @param includePaths an array of paths where the include files can be located.
*/
public MultiPathStringSource(String content, String name, URI uri, String charsetName, File... includePaths) {
this.content = content;
this.name = name;
this.uri = uri;
this.charsetName = charsetName;
this.includePaths = includePaths;
}
/**
* @param content a string containing the LESS code to compile.
* @param includePaths an array of paths where the include files can be located.
*/
public MultiPathStringSource(String content, String name, URI uri, File... includePaths) {
this.content = content;
this.name = name;
this.uri = uri;
this.includePaths = includePaths;
}
/**
* @param content a string containing the LESS code to compile.
* @param includePaths an array of paths where the include files can be located.
*/
public MultiPathStringSource(String content, String name, File... includePaths) {
this.content = content;
this.name = name;
this.includePaths = includePaths;
}
/**
* @param content a string containing the LESS code to compile.
* @param includePaths an array of paths where the include files can be located.
*/
public MultiPathStringSource(String content, File... includePaths) {
this.content = content;
this.charsetName = null;
this.includePaths = includePaths;
}
@Override
public LessSource relativeSource(String filename) throws FileNotFound {
// look inside the include paths
for (int i = 0; i < includePaths.length; ++i) {
File directory = includePaths[i];
File newFile = new File(directory, filename);
if (newFile.exists()) {
return new MultiPathFileSource(newFile, charsetName, this.includePaths);
}
}
// The file has not been found
throw new FileNotFound();
}
@Override
public String getContent() throws FileNotFound, CannotReadFile {
return content;
}
@Override
public byte[] getBytes() throws FileNotFound, CannotReadFile {
if (content != null) {
content.getBytes();
}
return null;
}
@Override
public String getName() {
return name;
}
@Override
public URI getURI() {
return uri;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((charsetName == null) ? 0 : charsetName.hashCode());
result = prime * result + ((content == null) ? 0 : content.hashCode());
result = prime * result + Arrays.hashCode(includePaths);
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MultiPathStringSource other = (MultiPathStringSource) obj;
if (charsetName == null) {
if (other.charsetName != null)
return false;
} else if (!charsetName.equals(other.charsetName))
return false;
if (content == null) {
if (other.content != null)
return false;
} else if (!content.equals(other.content))
return false;
if (!Arrays.equals(includePaths, other.includePaths))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}