in freemarker-docgen-core/src/main/java/org/freemarker/docgen/core/Transform.java [1370:1437]
private void copyCommonStatic(String staticFileName) throws IOException {
String resourcePath = "statics/" + staticFileName;
try (InputStream in = Transform.class.getResourceAsStream(resourcePath)) {
if (in == null) {
throw new IOException("Failed to open class-loader resource: " + resourcePath + " relatively to "
+ Transform.class.getPackage().getName());
}
if (staticFileName.endsWith(".css") || staticFileName.endsWith(".js")) {
// ISO-8859-1 will be good enough as far as the resource isn't UTF-16 or EBCDIC:
final Charset fileCharset = StandardCharsets.ISO_8859_1;
String content = FileUtil.loadString(in, fileCharset);
final String eol = TextUtil.detectEOL(content, "\n");
// If we have an initial comment, then that must be a copyright header, which we will remove.
if (content.startsWith("/*")) {
int commentEnd = content.indexOf("*/");
if (commentEnd == -1) {
throw new BugException("Unclosed initial \"/*\" in resource " + resourcePath);
}
commentEnd += 2;
String comment = content.substring(0, commentEnd);
if (!comment.contains("Copyright") && !comment.contains("copyright")
&& !comment.contains("License") && !comment.contains("license")) {
throw new BugException("The initial /*...*/ comments doesn't look like a copyright header "
+ "in resource " + resourcePath);
}
// Include an EOL after the comment, if there's any.
for (int i = 0; i < 2; i++) {
if (commentEnd < content.length()) {
char c = content.charAt(commentEnd);
if (c == '\n') {
commentEnd++;
} else if (c == '\r') {
commentEnd++;
if (commentEnd < content.length() && content.charAt(commentEnd) == '\n') {
commentEnd++;
}
}
}
}
// Remove existing copyright header:
content = content.substring(commentEnd);
}
if (offline && copyrightComment != null) {
// Add copyright comment:
StringBuilder sb = new StringBuilder(TextUtil.normalizeEOL(copyrightJavaComment, eol));
sb.append(eol);
if (content.length() > 0 && content.charAt(0) != '\n' && content.charAt(0) != '\r') {
sb.append(eol);
}
sb.append(content);
content = sb.toString();
}
Path destSubdir = destDir.toPath().resolve("docgen-resources");
Files.createDirectories(destSubdir);
Files.write(destSubdir.resolve(staticFileName), content.getBytes(fileCharset));
} else {
FileUtil.copyResourceIntoFile(
Transform.class, "statics", staticFileName,
new File(destDir, "docgen-resources"));
}
}
}