package tern.eclipse.ide.tools.core.webbrowser.codemirror;
public class HTMLCodeMirrorEditor implements tern.eclipse.ide.tools.core.generator.IGenerator
{
protected static String nl;
public static synchronized HTMLCodeMirrorEditor create(String lineSeparator)
{
nl = lineSeparator;
HTMLCodeMirrorEditor result = new HTMLCodeMirrorEditor();
nl = null;
return result;
}
public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
protected final String TEXT_1 = "<!DOCTYPE html>" + NL + "<html>" + NL + "<head>" + NL + "\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />" + NL + "\t<title>Tern - CodeMirror Editor</title>" + NL + "\t<!-- Tern JS -->" + NL + "\t<script src=\"";
protected final String TEXT_2 = "\"></script>" + NL + "\t<script src=\"";
protected final String TEXT_3 = "\"></script>" + NL + "\t<script src=\"";
protected final String TEXT_4 = "\"></script>" + NL + "\t<script src=\"";
protected final String TEXT_5 = "\"></script>" + NL + "\t<script src=\"";
protected final String TEXT_6 = "\"></script>" + NL + "\t<script src=\"";
protected final String TEXT_7 = "\"></script>" + NL + "\t<script src=\"";
protected final String TEXT_8 = "\"></script>" + NL + "\t<script src=\"";
protected final String TEXT_9 = "\"></script>" + NL + "\t";
protected final String TEXT_10 = NL + "\t";
protected final String TEXT_11 = "<script src=\"";
protected final String TEXT_12 = "\"></script>" + NL + "\t";
protected final String TEXT_13 = NL + "\t<!-- CodeMirror -->" + NL + "\t<link rel=stylesheet href=\"";
protected final String TEXT_14 = "\">" + NL + "\t<link rel=stylesheet href=\"";
protected final String TEXT_15 = "\">" + NL + "\t<script src=\"";
protected final String TEXT_16 = "\"></script>" + NL + "\t<script src=\"";
protected final String TEXT_17 = "\"></script>" + NL + "\t<link rel=stylesheet href=\"";
protected final String TEXT_18 = "\">" + NL + "\t<script src=\"";
protected final String TEXT_19 = "\"></script>" + NL + "\t<!-- CodeMirror & Tern -->" + NL + "\t <script src=\"";
protected final String TEXT_20 = "\"></script>" + NL + "\t <link rel=stylesheet href=\"";
protected final String TEXT_21 = "\">" + NL + "\t ";
protected final String TEXT_22 = NL + "\t <script src=\"";
protected final String TEXT_23 = "\"></script>" + NL + " \t<link rel=\"stylesheet\" href=\"";
protected final String TEXT_24 = "\">" + NL + "\t \t <script src=\"";
protected final String TEXT_25 = "\"></script>" + NL + "\t ";
protected final String TEXT_26 = NL + "</head>" + NL + "<body>" + NL + "\t<p>" + NL + "\t\t<textarea id=\"code\" name=\"code\">";
protected final String TEXT_27 = "</textarea>" + NL + "\t</p>" + NL + "\t<dl>" + NL + "\t <dt>Ctrl-Space</dt><dd>Autocomplete</dd>" + NL + "\t <dt>Ctrl-I</dt><dd>Find type at cursor</dd>" + NL + "\t <dt>Alt-.</dt><dd>Jump to definition (Alt-, to jump back)</dd>" + NL + "\t <dt>Ctrl-Q</dt><dd>Rename variable</dd>" + NL + "\t</dl>\t" + NL + "\t";
protected final String TEXT_28 = "\t" + NL + "\t<script>" + NL + "\t\tvar editor = CodeMirror.fromTextArea(document.getElementById(\"code\"), {" + NL + " \t\tlineNumbers: true," + NL + " \t\tmode: \"javascript\"" + NL + " \t\t});" + NL + " \t\tvar defs = ";
protected final String TEXT_29 = ";" + NL + " \t\tvar plugins = ";
protected final String TEXT_30 = ";" + NL + "\t\tvar server = new CodeMirror.TernServer({defs: defs, plugins: plugins});" + NL + "\t editor.setOption(\"extraKeys\", {" + NL + "\t \"Ctrl-Space\": function(cm) { server.complete(cm); }," + NL + "\t \"Ctrl-I\": function(cm) { server.showType(cm); }," + NL + "\t \"Alt-.\": function(cm) { server.jumpToDef(cm); }," + NL + "\t \"Alt-,\": function(cm) { server.jumpBack(cm); }," + NL + "\t \"Ctrl-Q\": function(cm) { server.rename(cm); }," + NL + "\t });" + NL + "\t ";
protected final String TEXT_31 = NL + "\t editor.setOption(\"gutters\",[\"CodeMirror-lint-markers\"]);" + NL + " \teditor.setOption(\"lint\", {getAnnotations: CodeMirror.ternLint, async : true, server: server})" + NL + " \t";
protected final String TEXT_32 = NL + "\t editor.on(\"cursorActivity\", function(cm) { server.updateArgHints(cm); }); \t\t" + NL + "\t</script>" + NL + "</body>" + NL + "</html>";
protected final String TEXT_33 = NL;
/* (non-javadoc)
* @see IGenerator#generate(Object)
*/
public String generate(Object argument)
{
final StringBuffer stringBuffer = new StringBuffer();
CodeMirrorOptions options = (CodeMirrorOptions)argument;
stringBuffer.append(TEXT_1);
stringBuffer.append(options.resolveTern("node_modules/acorn/acorn.js") );
stringBuffer.append(TEXT_2);
stringBuffer.append(options.resolveTern("node_modules/acorn/acorn_loose.js") );
stringBuffer.append(TEXT_3);
stringBuffer.append(options.resolveTern("node_modules/acorn/util/walk.js") );
stringBuffer.append(TEXT_4);
stringBuffer.append(options.resolveTern("lib/signal.js") );
stringBuffer.append(TEXT_5);
stringBuffer.append(options.resolveTern("lib/tern.js") );
stringBuffer.append(TEXT_6);
stringBuffer.append(options.resolveTern("lib/def.js") );
stringBuffer.append(TEXT_7);
stringBuffer.append(options.resolveTern("lib/comment.js") );
stringBuffer.append(TEXT_8);
stringBuffer.append(options.resolveTern("lib/infer.js") );
stringBuffer.append(TEXT_9);
stringBuffer.append(options.getTernDefsScriptsToInclude() );
stringBuffer.append(TEXT_10);
boolean hasTernLint = false;
tern.server.ITernPlugin[] ternPlugins = options.getTernPlugins();
if (ternPlugins != null) {
tern.server.ITernPlugin plugin = null;
for (int i = 0; i < ternPlugins.length; i++) {
plugin = ternPlugins[i];
if (plugin.isLinter()) {
hasTernLint = true;
}
stringBuffer.append(TEXT_11);
stringBuffer.append(options.resolveTernModule(plugin) );
stringBuffer.append(TEXT_12);
}
}
stringBuffer.append(TEXT_13);
stringBuffer.append(options.resolve("codemirror/lib/codemirror.css") );
stringBuffer.append(TEXT_14);
stringBuffer.append(options.resolve("codemirror/doc/docs.css") );
stringBuffer.append(TEXT_15);
stringBuffer.append(options.resolve("codemirror/lib/codemirror.js") );
stringBuffer.append(TEXT_16);
stringBuffer.append(options.resolve("codemirror/mode/javascript/javascript.js") );
stringBuffer.append(TEXT_17);
stringBuffer.append(options.resolve("codemirror/addon/hint/show-hint.css") );
stringBuffer.append(TEXT_18);
stringBuffer.append(options.resolve("codemirror/addon/hint/show-hint.js") );
stringBuffer.append(TEXT_19);
stringBuffer.append(options.resolve("codemirror/addon/tern/tern.js") );
stringBuffer.append(TEXT_20);
stringBuffer.append(options.resolve("codemirror/addon/tern/tern.css") );
stringBuffer.append(TEXT_21);
if (hasTernLint) {
stringBuffer.append(TEXT_22);
stringBuffer.append(options.resolve("codemirror/addon/lint/lint.js") );
stringBuffer.append(TEXT_23);
stringBuffer.append(options.resolve("codemirror/addon/lint/lint.css") );
stringBuffer.append(TEXT_24);
stringBuffer.append(options.resolve("tern-lint/codemirror/addon/lint/tern-lint.js") );
stringBuffer.append(TEXT_25);
}
stringBuffer.append(TEXT_26);
stringBuffer.append( options.getEditorContent() );
stringBuffer.append(TEXT_27);
stringBuffer.append(options.getEmbedJSONDefs() );
stringBuffer.append(TEXT_28);
stringBuffer.append(options.toJSONDefs() );
stringBuffer.append(TEXT_29);
stringBuffer.append(options.toJSONPlugins() );
stringBuffer.append(TEXT_30);
if (hasTernLint) {
stringBuffer.append(TEXT_31);
}
stringBuffer.append(TEXT_32);
stringBuffer.append(TEXT_33);
return stringBuffer.toString();
}
}