package org.eclipse.xtext.xdoc.generator;
import com.google.common.base.Objects;
import com.google.inject.Inject;
import java.io.File;
import java.util.Arrays;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.generator.IFileSystemAccess;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xdoc.generator.Outlets;
import org.eclipse.xtext.xdoc.generator.PlainText;
import org.eclipse.xtext.xdoc.generator.util.EclipseNamingExtensions;
import org.eclipse.xtext.xdoc.xdoc.AbstractSection;
import org.eclipse.xtext.xdoc.xdoc.Document;
import org.eclipse.xtext.xdoc.xdoc.Section;
import org.eclipse.xtext.xdoc.xdoc.TextOrMarkup;
@SuppressWarnings("all")
public class PHPPhoenixGenerator {
@Inject
@Extension
private EclipseNamingExtensions ene;
@Inject
@Extension
private PlainText pt;
protected void _generatePHP(final AbstractSection as, final IFileSystemAccess fsa) {
Resource _eResource = as.eResource();
URI _uRI = _eResource.getURI();
URI _trimFileExtension = _uRI.trimFileExtension();
String _lastSegment = _trimFileExtension.lastSegment();
String _plus = (_lastSegment + ".php");
StringConcatenation _builder = new StringConcatenation();
_builder.append("<?php require_once($_SERVER[\'DOCUMENT_ROOT\'] . \"/eclipse.org-common/system/app.class.php\");\trequire_once($_SERVER[\'DOCUMENT_ROOT\'] . \"/eclipse.org-common/system/nav.class.php\"); \trequire_once($_SERVER[\'DOCUMENT_ROOT\'] . \"/eclipse.org-common/system/menu.class.php\"); \t$App \t= new App();\t$Nav\t= new Nav();\t$Menu \t= new Menu();\t\tinclude($App->getProjectCommon()); # All on the same line to unclutter the user\'s desktop\'");
_builder.newLine();
_builder.append("\t");
_builder.append("include(\"include.php\");");
_builder.newLine();
_builder.append("\t");
_builder.append("$pageTitle \t\t= \"");
TextOrMarkup _title = as.getTitle();
CharSequence _genPlainText = this.pt.genPlainText(_title);
_builder.append(_genPlainText, "\t");
_builder.append("\";");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("$html = file_get_contents(\'");
String _resourceURL = this.ene.getResourceURL(as);
_builder.append(_resourceURL, "\t");
_builder.append("\');");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("\t");
_builder.append("$Nav->setLinkList(array());");
_builder.newLine();
_builder.append("\t");
CharSequence _genScriptsAndStyles = this.genScriptsAndStyles(as);
_builder.append(_genScriptsAndStyles, "\t");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("# Generate the web page");
_builder.newLine();
_builder.append("\t");
_builder.append("$App->generatePage(\"Nova\", $Menu, NULL, $pageAuthor, $pageKeywords, $pageTitle, $html);");
_builder.newLine();
_builder.append("?>");
_builder.newLine();
fsa.generateFile(_plus, Outlets.WEB_SITE, _builder);
}
protected void _generatePHP(final Document doc, final IFileSystemAccess fsa) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("<?php require_once($_SERVER[\'DOCUMENT_ROOT\'] . \"/eclipse.org-common/system/app.class.php\");\trequire_once($_SERVER[\'DOCUMENT_ROOT\'] . \"/eclipse.org-common/system/nav.class.php\"); \trequire_once($_SERVER[\'DOCUMENT_ROOT\'] . \"/eclipse.org-common/system/menu.class.php\"); \t$App \t= new App();\t$Nav\t= new Nav();\t$Menu \t= new Menu();\t\tinclude($App->getProjectCommon()); # All on the same line to unclutter the user\'s desktop\'");
_builder.newLine();
_builder.append("\t");
_builder.append("include(\"include.php\");");
_builder.newLine();
_builder.append("\t");
CharSequence _genScriptsAndStyles = this.genScriptsAndStyles(doc);
_builder.append(_genScriptsAndStyles, "\t");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("$pageTitle \t\t= \"");
TextOrMarkup _title = doc.getTitle();
CharSequence _genPlainText = this.pt.genPlainText(_title);
_builder.append(_genPlainText, "\t");
_builder.append("\";");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("$html .= file_get_contents(\'_index.html\');");
_builder.newLine();
_builder.newLine();
_builder.append("\t");
_builder.append("# Generate the web page");
_builder.newLine();
_builder.append("\t");
_builder.append("$App->generatePage(\"Nova\", $Menu, NULL, $pageAuthor, $pageKeywords, $pageTitle, $html);");
_builder.newLine();
_builder.append("?>");
_builder.newLine();
fsa.generateFile("index.php", Outlets.WEB_SITE, _builder);
File _file = new File(((Outlets.WEB_SITE_PATH_NAME + "/") + "include.php"));
boolean _exists = _file.exists();
boolean _not = (!_exists);
if (_not) {
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("<?php");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("# Set the theme for your project\'s web pages.");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("# See the Committer Tools \"How Do I\" for list of themes");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("# https://dev.eclipse.org/committers/");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("# Optional: defaults to system theme ");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("$theme = \"Nova\";");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("# Define your project-wide Nav bars here.");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("# these are optional");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("# $Nav->setLinkList(array());");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("\t");
{
TextOrMarkup _authors = doc.getAuthors();
boolean _notEquals = (!Objects.equal(_authors, null));
if (_notEquals) {
_builder_1.append("$pageAuthor\t\t= \"");
TextOrMarkup _authors_1 = doc.getAuthors();
CharSequence _genPlainText_1 = this.pt.genPlainText(_authors_1);
_builder_1.append(_genPlainText_1, "\t");
_builder_1.append("\";");
}
}
_builder_1.newLineIfNotEmpty();
_builder_1.append("\t");
{
TextOrMarkup _title_1 = doc.getTitle();
boolean _notEquals_1 = (!Objects.equal(_title_1, null));
if (_notEquals_1) {
_builder_1.append("$pageTitle \t\t= \"");
TextOrMarkup _title_2 = doc.getTitle();
CharSequence _genPlainText_2 = this.pt.genPlainText(_title_2);
_builder_1.append(_genPlainText_2, "\t");
_builder_1.append("\";");
}
}
_builder_1.newLineIfNotEmpty();
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("$App->AddExtraHtmlHeader(\'<link rel=\"stylesheet\" type=\"text/css\" href=\"code.css\"/>\' . \"\\n\\t\");");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("$App->AddExtraHtmlHeader(\'<link rel=\"stylesheet\" type=\"text/css\" href=\"book.css\"/>\' . \"\\n\\t\");");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("$App->AddExtraHtmlHeader(\'<link rel=\"stylesheet\" type=\"text/css\" href=\"novaAddon.css\"/>\' . \"\\n\\t\");");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("$App->Promotion = TRUE;");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("?>");
_builder_1.newLine();
fsa.generateFile("include.php", Outlets.WEB_SITE, _builder_1);
}
}
public CharSequence genScriptsAndStyles(final AbstractSection as) {
StringConcatenation _builder = new StringConcatenation();
_builder.newLine();
_builder.append("$App->AddExtraHtmlHeader(\'");
_builder.newLine();
_builder.append("<script type=\"text/javascript\">");
_builder.newLine();
_builder.append("function init() {");
_builder.newLine();
_builder.append("\t");
_builder.append("var docName = \"");
String _fullURL = this.ene.getFullURL(as);
_builder.append(_fullURL, "\t");
_builder.append("\";");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("initTocMenu(docName);");
_builder.newLine();
_builder.append("\t");
_builder.append("highlightCurrentSection(docName);");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("function initTocMenu(ActiveSubTocElementId){");
_builder.newLine();
_builder.append("\t");
_builder.append("var menu = document.getElementById(\"leftnav\");");
_builder.newLine();
_builder.newLine();
_builder.append("\t");
_builder.append("var chapters = menu.children;");
_builder.newLine();
_builder.append("\t");
_builder.append("addHideSubsectionFunction(chapters);");
_builder.newLine();
{
if ((as instanceof Section)) {
_builder.append("\t");
_builder.append("var subToc = document.getElementById(ActiveSubTocElementId).parentNode;");
_builder.newLine();
} else {
_builder.append("\t");
_builder.append("var subToc = document.getElementById(\\\'subToc_\\\' + ActiveSubTocElementId);");
_builder.newLine();
}
}
_builder.append("\t");
_builder.append("if(subToc) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("subToc.style.display = \"block\";");
_builder.newLine();
_builder.append("\t\t");
_builder.append("subToc.previousElementSibling.children[0].style.display = \"none\"");
_builder.newLine();
_builder.append("\t\t");
_builder.append("subToc.previousElementSibling.children[1].style.display = \"inline\"");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("function switchImages(chap) {");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("function addHideSubsectionFunction(items){");
_builder.newLine();
_builder.append("\t");
_builder.append("for (var i = 0; i < items.length; i++) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("if (items[i].firstElementChild != null && items[i].className == \"separator\"){");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("if(items[i].firstElementChild.firstElementChild != null){");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("items[i].firstElementChild.firstElementChild.onclick = function(){this.nextElementSibling.style.display=\"inline\";this.style.display = \"none\"; toc_toggle_subsections(this.parentNode.parentNode);};");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("items[i].firstElementChild.firstElementChild.nextElementSibling.onclick = function(){this.previousElementSibling.style.display=\"inline\";this.style.display = \"none\"; toc_toggle_subsections(this.parentNode.parentNode);};");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("}");
_builder.newLine();
_builder.append(" \t\t\t");
_builder.append("items[i].firstElementChild.style.cursor = \"pointer\";");
_builder.newLine();
_builder.append("\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("function toc_toggle_subsections(chap){");
_builder.newLine();
_builder.append("\t");
_builder.append("if ( chap.children[1].style.display != \"none\" ) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("chap.children[1].style.display = \"none\"");
_builder.newLine();
_builder.append("\t");
_builder.append("} else {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("chap.children[1].style.display = \"block\"");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("function highlightCurrentSection(sec) {");
_builder.newLine();
_builder.append("\t");
_builder.append("document.getElementById(sec).style.backgroundColor= \"#D0D0D0\"");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("if ( window.addEventListener ) { ");
_builder.newLine();
_builder.append("\t");
_builder.append("window.addEventListener( \"load\", init, false );");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.append("else if ( window.attachEvent ) { ");
_builder.newLine();
_builder.append("\t");
_builder.append("window.attachEvent( \"onload\", init );");
_builder.newLine();
_builder.append("} else ");
_builder.newLine();
_builder.append("\t");
_builder.append("if ( window.onLoad ) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("window.onload = init;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.append("</script>\');");
_builder.newLine();
_builder.newLine();
return _builder;
}
public void generatePHP(final AbstractSection doc, final IFileSystemAccess fsa) {
if (doc instanceof Document) {
_generatePHP((Document)doc, fsa);
return;
} else if (doc != null) {
_generatePHP(doc, fsa);
return;
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(doc, fsa).toString());
}
}
}