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()); } } }