package de.sebastianbenz.task.generator;
import com.google.common.base.Objects;
import com.google.common.collect.Iterables;
import de.sebastianbenz.task.Code;
import de.sebastianbenz.task.Container;
import de.sebastianbenz.task.Content;
import de.sebastianbenz.task.EmptyLine;
import de.sebastianbenz.task.Image;
import de.sebastianbenz.task.Link;
import de.sebastianbenz.task.Note;
import de.sebastianbenz.task.Project;
import de.sebastianbenz.task.Tag;
import de.sebastianbenz.task.Task;
import de.sebastianbenz.task.TaskModel;
import de.sebastianbenz.task.Text;
import de.sebastianbenz.task.TextSegment;
import de.sebastianbenz.task.generator.TaskGenerator;
import java.util.Arrays;
import java.util.Iterator;
import org.apache.commons.lang.StringEscapeUtils;
import org.eclipse.emf.common.util.EList;
import org.eclipse.xtend2.lib.StringConcatenation;
@SuppressWarnings("all")
public class HtmlGenerator implements TaskGenerator {
public CharSequence generate(final TaskModel taskModel) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"> ");
_builder.newLine();
_builder.append("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\"> ");
_builder.newLine();
_builder.append("<head> ");
_builder.newLine();
_builder.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">");
_builder.newLine();
_builder.append("<style type=\"text/css\">");
_builder.newLine();
_builder.append("\t");
_builder.append(".done {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("text-decoration: line-through;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append(".tag{");
_builder.newLine();
_builder.append("\t\t");
_builder.append("color: gray;");
_builder.newLine();
_builder.append("\t\t");
_builder.append("text-decoration:underline;");
_builder.newLine();
_builder.append("\t");
_builder.append("} ");
_builder.newLine();
_builder.append("\t");
_builder.append("body {");
_builder.newLine();
_builder.append("\t ");
_builder.append("font-family: \"Helvetica Neue\", helvetica, arial, sans-serif;");
_builder.newLine();
_builder.append("\t ");
_builder.append("font-size: 14px;");
_builder.newLine();
_builder.append("\t ");
_builder.append("line-height: 1.4em;");
_builder.newLine();
_builder.append("\t ");
_builder.append("color: #333333;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("ul{");
_builder.newLine();
_builder.append("\t\t");
_builder.append("list-style: none;");
_builder.newLine();
_builder.append("\t\t");
_builder.append("margin-left: 0;");
_builder.newLine();
_builder.append("\t\t");
_builder.append("text-indent: -2em;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("ul li:before {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("content: \"\\2D\";\t");
_builder.newLine();
_builder.append("\t\t");
_builder.append("margin-right: 0.5em;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append(".note{");
_builder.newLine();
_builder.append("\t\t");
_builder.append("color: gray;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append(".syntaxhighlighter { ");
_builder.newLine();
_builder.append("\t\t");
_builder.append("padding-bottom: 1px;");
_builder.newLine();
_builder.append("\t\t");
_builder.append("padding-left: 5px;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("</style");
_builder.newLine();
_builder.newLine();
_builder.append("</head> ");
_builder.newLine();
_builder.append("<body> ");
_builder.newLine();
CharSequence _generateChildren = this.generateChildren(taskModel);
_builder.append(_generateChildren, "");
_builder.newLineIfNotEmpty();
_builder.append("</body>");
_builder.newLine();
_builder.append("<link href=\"http://alexgorbatchev.com/pub/sh/current/styles/shCore.css\" rel=\"stylesheet\" type=\"text/css\" />");
_builder.newLine();
_builder.append("<link href=\"http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css\" rel=\"stylesheet\" type=\"text/css\" />");
_builder.newLine();
_builder.append("<script src=\"http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js\" type=\"text/javascript\"></script>");
_builder.newLine();
_builder.append("<script src=\"http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js\" type=\"text/javascript\"></script>");
_builder.newLine();
_builder.append("<script type=\"text/javascript\">");
_builder.newLine();
_builder.append("function path()");
_builder.newLine();
_builder.append("{");
_builder.newLine();
_builder.append(" ");
_builder.append("var args = arguments,");
_builder.newLine();
_builder.append(" ");
_builder.append("result = []");
_builder.newLine();
_builder.append(" ");
_builder.append(";");
_builder.newLine();
_builder.append(" ");
_builder.newLine();
_builder.append(" ");
_builder.append("for(var i = 0; i < args.length; i++)");
_builder.newLine();
_builder.append(" ");
_builder.append("result.push(args[i].replace(\'@\', \'http://alexgorbatchev.com/pub/sh/current/scripts/\'));");
_builder.newLine();
_builder.append(" ");
_builder.newLine();
_builder.append(" ");
_builder.append("return result");
_builder.newLine();
_builder.append("};");
_builder.newLine();
_builder.append(" ");
_builder.newLine();
_builder.append("SyntaxHighlighter.autoloader.apply(null, path(");
_builder.newLine();
_builder.append(" ");
_builder.append("\'cpp c @shBrushCpp.js\',");
_builder.newLine();
_builder.append(" ");
_builder.append("\'css @shBrushCss.js\',");
_builder.newLine();
_builder.append(" ");
_builder.append("\'java @shBrushJava.js\',");
_builder.newLine();
_builder.append(" ");
_builder.append("\'js jscript javascript @shBrushJScript.js\',");
_builder.newLine();
_builder.append(" ");
_builder.append("\'py python @shBrushPython.js\',");
_builder.newLine();
_builder.append(" ");
_builder.append("\'ruby rails ror rb @shBrushRuby.js\',");
_builder.newLine();
_builder.append(" ");
_builder.append("\'scala @shBrushScala.js\',");
_builder.newLine();
_builder.append(" ");
_builder.append("\'xml xhtml xslt html @shBrushXml.js\'");
_builder.newLine();
_builder.append("));");
_builder.newLine();
_builder.append("SyntaxHighlighter.all();");
_builder.newLine();
_builder.append("</script>");
_builder.newLine();
_builder.append("</html>");
_builder.newLine();
return _builder;
}
public CharSequence generateChildren(final Container container) {
StringConcatenation _builder = new StringConcatenation();
{
EList<Content> _children = container.getChildren();
for(final Content child : _children) {
CharSequence _generate = this.generate(child);
_builder.append(_generate, "");
_builder.newLineIfNotEmpty();
}
}
return _builder;
}
protected CharSequence _generate(final Note note) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("<p class=\"note\">");
CharSequence _write = this.write(note);
_builder.append(_write, "");
_builder.newLineIfNotEmpty();
CharSequence _generateChildren = this.generateChildren(note);
_builder.append(_generateChildren, "");
_builder.newLineIfNotEmpty();
_builder.append("</p>");
_builder.newLine();
return _builder;
}
protected CharSequence _generate(final Task task) {
StringConcatenation _builder = new StringConcatenation();
{
boolean _isFirst = this.isFirst(task);
if (_isFirst) {
_builder.append("<ul>");
_builder.newLine();
}
}
_builder.append("\t");
_builder.append("<li");
{
boolean _isDone = task.isDone();
if (_isDone) {
_builder.append(" class=\"done\"");
}
}
_builder.append(">");
CharSequence _write = this.write(task);
_builder.append(_write, " ");
_builder.newLineIfNotEmpty();
_builder.append("\t");
CharSequence _generateChildren = this.generateChildren(task);
_builder.append(_generateChildren, " ");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("</li>");
_builder.newLine();
{
boolean _isLast = this.isLast(task);
if (_isLast) {
_builder.append("</ul>\t\t");
_builder.newLine();
}
}
return _builder;
}
public boolean isFirst(final Task task) {
Container _parent = task.getParent();
EList<Content> _children = _parent.getChildren();
Iterable<Task> tasks = Iterables.<Task>filter(_children, Task.class);
Iterator<Task> _iterator = tasks.iterator();
Task _next = _iterator.next();
return Objects.equal(_next, task);
}
public boolean isLast(final Task task) {
Container _parent = task.getParent();
EList<Content> siblings = _parent.getChildren();
int _size = siblings.size();
int _minus = (_size - 1);
Content _get = siblings.get(_minus);
return Objects.equal(_get, task);
}
protected CharSequence _generate(final Project project) {
CharSequence _xblockexpression = null;
{
int _level = project.getLevel();
int level = (_level + 1);
StringConcatenation _builder = new StringConcatenation();
_builder.append("<h");
_builder.append(level, "");
_builder.append(">");
CharSequence _write = this.write(project);
_builder.append(_write, "");
_builder.append("</h");
_builder.append(level, "");
_builder.append(">");
_builder.newLineIfNotEmpty();
CharSequence _generateChildren = this.generateChildren(project);
_builder.append(_generateChildren, "");
_builder.newLineIfNotEmpty();
_xblockexpression = (_builder);
}
return _xblockexpression;
}
protected CharSequence _generate(final EmptyLine emptyLine) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("<br>");
_builder.newLine();
CharSequence _generateChildren = this.generateChildren(emptyLine);
_builder.append(_generateChildren, "");
_builder.newLineIfNotEmpty();
return _builder;
}
protected CharSequence _generate(final Code code) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("<pre class=\"brush: ");
String _lang = code.getLang();
_builder.append(_lang, "");
_builder.append("; toolbar: false\">");
_builder.newLineIfNotEmpty();
String _value = code.getValue();
String _escapeHtml = StringEscapeUtils.escapeHtml(_value);
_builder.append(_escapeHtml, "");
_builder.newLineIfNotEmpty();
_builder.append("</pre>");
_builder.newLine();
CharSequence _generateChildren = this.generateChildren(code);
_builder.append(_generateChildren, "");
_builder.newLineIfNotEmpty();
return _builder;
}
public CharSequence write(final Content content) {
StringConcatenation _builder = new StringConcatenation();
{
EList<TextSegment> _segments = content.getSegments();
for(final TextSegment s : _segments) {
CharSequence _write = this.write(s);
_builder.append(_write, "");
}
}
_builder.append("\t");
_builder.newLineIfNotEmpty();
return _builder;
}
protected CharSequence _write(final Text text) {
return text.getValue();
}
protected CharSequence _write(final Link link) {
String url = link.getUrl();
boolean _startsWith = url.startsWith("http://");
boolean _not = (!_startsWith);
if (_not) {
String _plus = ("http://" + url);
url = _plus;
}
String description = "";
String _description = link.getDescription();
boolean _equals = Objects.equal(_description, "");
if (_equals) {
String _url = link.getUrl();
description = _url;
} else {
String _description_1 = link.getDescription();
description = _description_1;
}
String _plus_1 = ("<a href=\"" + url);
String _plus_2 = (_plus_1 + "\">");
String _plus_3 = (_plus_2 + description);
return (_plus_3 + "</a>");
}
protected CharSequence _write(final Image image) {
String _url = image.getUrl();
String _plus = ("<p><img src=\"" + _url);
String _plus_1 = (_plus + "\" title=\"");
String _description = image.getDescription();
String _plus_2 = (_plus_1 + _description);
String _plus_3 = (_plus_2 + "\" alt=\"");
String _description_1 = image.getDescription();
String _plus_4 = (_plus_3 + _description_1);
return (_plus_4 + "\"/></p>");
}
protected CharSequence _write(final Tag tag) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("<span class=\"tag\">");
_builder.append(tag, "");
_builder.append("</span>");
_builder.newLineIfNotEmpty();
return _builder;
}
public CharSequence generate(final Content code) {
if (code instanceof Code) {
return _generate((Code)code);
} else if (code instanceof EmptyLine) {
return _generate((EmptyLine)code);
} else if (code instanceof Note) {
return _generate((Note)code);
} else if (code instanceof Project) {
return _generate((Project)code);
} else if (code instanceof Task) {
return _generate((Task)code);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(code).toString());
}
}
public CharSequence write(final TextSegment image) {
if (image instanceof Image) {
return _write((Image)image);
} else if (image instanceof Link) {
return _write((Link)image);
} else if (image instanceof Tag) {
return _write((Tag)image);
} else if (image instanceof Text) {
return _write((Text)image);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(image).toString());
}
}
}