* @param funObj
* @throws WinkBuildException
*/
public static void rewriteImageURL(final Context cx, final Scriptable thisObj, final Object[] args, final Function funObj) throws WinkBuildException {
if (args.length != 3 || args[0] == null || args[1] == null || args[2] == null || !(args[0] instanceof NativeArray) || !(args[1] instanceof NativeArray) || !(args[2] instanceof String)) {
throw new WinkBuildException("rewriteImageURL() error: bad arguments");
}
final List<String> files = convertNativeArrayIntoList((NativeArray) args[0]);
final List<String> tmpfiles = convertNativeArrayIntoList((NativeArray) args[1]);
final String basePath = (String) args[2];
final String winkUrlExpr = "(url[\n\r ]*\\([\n\r ]*)([\"']?)([^)\"']+)([\"']?)([)])";
final Pattern winkUrlPattern = Pattern.compile(winkUrlExpr, Pattern.MULTILINE);
final int leftGroup = 1;
final int urlGroup = 3;
final int rightGroup = 5;
File baseFile;
String baseCanonical;
try {
baseFile = new File(basePath);
baseCanonical = baseFile.getCanonicalPath();
} catch (final IOException e) {
throw new WinkBuildException(e);
}
for (int i = 0; i < files.size(); i++) {
final String filename = files.get(i);
final String tmpfilename = tmpfiles.get(i);
try {
final StringBuffer fileContent = new StringBuffer().append(FileManager.getFileContent(tmpfilename));
final File file = new File(filename);
final File parent = file.getParentFile();
final Matcher m = winkUrlPattern.matcher(fileContent);
final StringBuffer contentReplaced = new StringBuffer();
while (m.find()) {
final String url = m.group(urlGroup);
if (url.equals("")) {
continue;
}
if (url.contains("data:")) {
continue;
}
if (url.contains("http:")) {
continue;
}
// System.out.println("find ------------------ : \n" + url +
// " in " + file.getAbsolutePath());
final File cssLink = new File(parent, url);
final String cssLinkCanonical = cssLink.getCanonicalPath();
File ptr = new File(cssLinkCanonical);
final StringBuffer relativePath = new StringBuffer();
relativePath.insert(0, ptr.getName());
if (Constants.fromWinkPath) {
while (true) {
ptr = ptr.getParentFile();
if (ptr == null) {
throw new IllegalStateException("cannot rewrite Image URL: bad css url: must be in: " + baseCanonical);
}
if (ptr.getCanonicalPath().equals(baseFile.getCanonicalPath())) {
break;
}
relativePath.insert(0, "/");
relativePath.insert(0, ptr.getName());
}
}
if (!Constants.relativePath.equals("")) {
if (!Constants.relativePath.endsWith("/")) {
relativePath.insert(0, "/");
}
relativePath.insert(0, Constants.relativePath);
}
m.appendReplacement(contentReplaced, m.group(leftGroup) + relativePath + m.group(rightGroup));
}
m.appendTail(contentReplaced);
FileManager.writeIntoFile(contentReplaced.toString(), tmpfilename);
} catch (final IOException e) {
throw new WinkBuildException(e);
}
}
}