package com.jpexs.decompiler.flash.docs;
import com.jpexs.decompiler.flash.ApplicationInfo;
import static com.jpexs.decompiler.flash.docs.As3PCodeDocs.NEWLINE;
import com.jpexs.helpers.Cache;
import com.jpexs.helpers.Helper;
import com.jpexs.helpers.utf8.Utf8Helper;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.TimeZone;
import java.util.logging.Level;
import java.util.logging.Logger;
public class As3PCodeOtherDocs extends AbstractDocs {
static ResourceBundle prop;
static final String NEWLINE = "\r\n";
static {
prop = ResourceBundle.getBundle("com.jpexs.decompiler.flash.locales.docs.pcode.AS3other");
}
public static String getDocsForPath(String path) {
return getDocsForPath(path, true);
}
private static String getDocsForPath(String path, boolean standalone) {
final String cacheKey = path + "|" + (standalone ? 1 : 0);
String v = docsCache.get(cacheKey);
if (v != null) {
return v;
}
String pathNoTrait = path;
if (path.startsWith("trait.method")) {
pathNoTrait = path.substring("trait.".length());
}
StringBuilder sb = new StringBuilder();
if (standalone) {
sb.append(htmlHeader("", getStyle()));
}
sb.append("<");
sb.append(standalone ? "body" : "div");
sb.append(" class=\"otherdoc\"");
sb.append(">");
String pathParts[] = new String[]{path};
if (path.contains(".")) {
pathParts = path.split("\\.");
}
for (int i = 0; i < pathParts.length; i++) {
String curPath = String.join(".", Arrays.copyOf(pathParts, i + 1));
if (curPath.startsWith("trait.method")) {
curPath = path.substring("trait.".length());
}
if (prop.containsKey(curPath)) {
String docStr = prop.getString(curPath);
sb.append("<div class=\"path-block\">");
for (int j = 0; j < i; j++) {
sb.append(" ");
sb.append(" ");
}
sb.append("<span class=\"path\">");
sb.append(pathParts[i]);
sb.append("</span>");
sb.append(" ");
sb.append("<span class=\"path-docs\">");
sb.append(docStr);
sb.append("</span>");
sb.append("</div>");
}
}
sb.append("</");
sb.append(standalone ? "body" : "div"); //.instruction
sb.append(">").append(NEWLINE);
if (standalone) {
sb.append(htmlFooter());
}
String r = sb.toString();
docsCache.put(cacheKey, r);
return r;
}
protected static String htmlHeader(String js, String style) {
Date dateGenerated = new Date();
StringBuilder sb = new StringBuilder();
sb.append("<!DOCTYPE html>").append(NEWLINE).
append("<html>").append(NEWLINE).
append("\t<head>").append(NEWLINE);
if (style != null && !style.isEmpty()) {
sb.append("\t\t<style>").append(style).append("</style>").append(NEWLINE);
}
if (js != null && !js.isEmpty()) {
sb.append("\t\t<script>").append(js).append("</script>").append(NEWLINE);
}
sb.append("\t\t<meta charset=\"UTF-8\">").append(NEWLINE).
append(meta("generator", ApplicationInfo.applicationVerName)).
append(meta("description", getProperty("ui.list.pageDescription"))).
append(metaProp("og:title", getProperty("ui.list.pageTitle"))).
append(metaProp("og:type", "article")).
append(metaProp("og:description", getProperty("ui.list.pageDescription"))).
append(meta("date", dateGenerated)).
append("\t\t<title>").append(getProperty("ui.list.documentTitle")).append("</title>").append(NEWLINE).
append("\t</head>").append(NEWLINE);
return sb.toString();
}
protected static String getProperty(String name) {
if (prop.containsKey(name)) {
return Helper.escapeHTML(prop.getString(name));
}
return null;
}
}