Package org.eclipse.xtext.xdoc.generator

Source Code of org.eclipse.xtext.xdoc.generator.LatexGenerator

package org.eclipse.xtext.xdoc.generator;

import com.google.common.base.Objects;
import com.google.inject.Inject;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.stream.ImageInputStream;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.URIConverter;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.common.types.JvmDeclaredType;
import org.eclipse.xtext.generator.IFileSystemAccess;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.Functions.Function0;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.IteratorExtensions;
import org.eclipse.xtext.xbase.lib.ListExtensions;
import org.eclipse.xtext.xdoc.generator.IConfigurableGenerator;
import org.eclipse.xtext.xdoc.generator.config.Config;
import org.eclipse.xtext.xdoc.generator.util.LatexUtils;
import org.eclipse.xtext.xdoc.generator.util.StringUtils;
import org.eclipse.xtext.xdoc.generator.util.Utils;
import org.eclipse.xtext.xdoc.generator.util.XFloat;
import org.eclipse.xtext.xdoc.generator.util.numeric.XFloatExtensions;
import org.eclipse.xtext.xdoc.xdoc.AbstractSection;
import org.eclipse.xtext.xdoc.xdoc.Anchor;
import org.eclipse.xtext.xdoc.xdoc.Chapter;
import org.eclipse.xtext.xdoc.xdoc.ChapterRef;
import org.eclipse.xtext.xdoc.xdoc.Code;
import org.eclipse.xtext.xdoc.xdoc.CodeBlock;
import org.eclipse.xtext.xdoc.xdoc.CodeRef;
import org.eclipse.xtext.xdoc.xdoc.Document;
import org.eclipse.xtext.xdoc.xdoc.Emphasize;
import org.eclipse.xtext.xdoc.xdoc.Identifiable;
import org.eclipse.xtext.xdoc.xdoc.ImageRef;
import org.eclipse.xtext.xdoc.xdoc.Item;
import org.eclipse.xtext.xdoc.xdoc.LangDef;
import org.eclipse.xtext.xdoc.xdoc.Link;
import org.eclipse.xtext.xdoc.xdoc.MarkupInCode;
import org.eclipse.xtext.xdoc.xdoc.OrderedList;
import org.eclipse.xtext.xdoc.xdoc.Part;
import org.eclipse.xtext.xdoc.xdoc.PartRef;
import org.eclipse.xtext.xdoc.xdoc.Ref;
import org.eclipse.xtext.xdoc.xdoc.Section;
import org.eclipse.xtext.xdoc.xdoc.Section2;
import org.eclipse.xtext.xdoc.xdoc.Section2Ref;
import org.eclipse.xtext.xdoc.xdoc.Section3;
import org.eclipse.xtext.xdoc.xdoc.Section4;
import org.eclipse.xtext.xdoc.xdoc.SectionRef;
import org.eclipse.xtext.xdoc.xdoc.Table;
import org.eclipse.xtext.xdoc.xdoc.TableData;
import org.eclipse.xtext.xdoc.xdoc.TableRow;
import org.eclipse.xtext.xdoc.xdoc.TextOrMarkup;
import org.eclipse.xtext.xdoc.xdoc.TextPart;
import org.eclipse.xtext.xdoc.xdoc.Todo;
import org.eclipse.xtext.xdoc.xdoc.UnorderedList;
import org.eclipse.xtext.xdoc.xdoc.XdocPackage;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;

@SuppressWarnings("all")
public class LatexGenerator implements IConfigurableGenerator {
  @Inject
  @Extension
  private Utils utils;
 
  @Inject
  private HashMap<String, Object> config;
 
  @Inject
  private HashSet<String> links;
 
  public Map<String, Object> getConfiguration() {
    return this.config;
  }
 
  public void doGenerate(final Resource resource, final IFileSystemAccess fsa) {
    TreeIterator<EObject> _allContents = resource.getAllContents();
    Iterable<EObject> _iterable = IteratorExtensions.<EObject>toIterable(_allContents);
    for (final EObject element : _iterable) {
      if ((element instanceof Document)) {
        final Document doc = ((Document) element);
        String _name = doc.getName();
        String _fileName = this.fileName(_name);
        CharSequence _generate = this.generate(doc);
        fsa.generateFile(_fileName, _generate);
      }
    }
  }
 
  public void doGenerate(final EObject obj, final IFileSystemAccess fsa) {
    final Document doc = ((Document) obj);
    String _name = doc.getName();
    String _fileName = this.fileName(_name);
    CharSequence _generate = this.generate(doc);
    fsa.generateFile(_fileName, _generate);
  }
 
  public String fileName(final String name) {
    return (name + ".tex");
  }
 
  protected CharSequence _generate(final Document doc) {
    StringConcatenation _builder = new StringConcatenation();
    CharSequence _preamble = this.preamble();
    _builder.append(_preamble, "");
    _builder.newLineIfNotEmpty();
    {
      EList<LangDef> _langDefs = doc.getLangDefs();
      for(final LangDef lang : _langDefs) {
        CharSequence _generate = this.generate(lang);
        _builder.append(_generate, "");
        _builder.newLineIfNotEmpty();
      }
    }
    CharSequence _configureTodo = this.configureTodo();
    _builder.append(_configureTodo, "");
    _builder.newLineIfNotEmpty();
    _builder.newLine();
    _builder.append("\\usepackage{hyperref}");
    _builder.newLine();
    _builder.newLine();
    CharSequence _authorAndTitle = this.authorAndTitle(doc);
    _builder.append(_authorAndTitle, "");
    _builder.newLineIfNotEmpty();
    _builder.newLine();
    _builder.append("\\begin{document}");
    _builder.newLine();
    _builder.append("\\maketitle");
    _builder.newLine();
    _builder.append("\\tableofcontents");
    _builder.newLine();
    {
      EList<Chapter> _chapters = doc.getChapters();
      for(final Chapter chapter : _chapters) {
        _builder.newLine();
        CharSequence _generate_1 = this.generate(chapter);
        _builder.append(_generate_1, "");
        _builder.newLineIfNotEmpty();
      }
    }
    {
      EList<Part> _parts = doc.getParts();
      for(final Part part : _parts) {
        _builder.newLine();
        CharSequence _generate_2 = this.generate(part);
        _builder.append(_generate_2, "");
        _builder.newLineIfNotEmpty();
      }
    }
    CharSequence _genListOfLinks = this.genListOfLinks();
    _builder.append(_genListOfLinks, "");
    _builder.newLineIfNotEmpty();
    _builder.newLine();
    {
      Object _get = this.config.get(Config.release);
      if ((!(((Boolean) _get)).booleanValue())) {
        _builder.append("\\listoftodos");
        _builder.newLine();
      }
    }
    _builder.append("\\end{document}");
    _builder.newLine();
    return _builder;
  }
 
  public CharSequence genListOfLinks() {
    CharSequence _xifexpression = null;
    boolean _isEmpty = this.links.isEmpty();
    boolean _not = (!_isEmpty);
    if (_not) {
      StringConcatenation _builder = new StringConcatenation();
      _builder.append("\\chapter{List of External Links}");
      _builder.newLine();
      {
        for(final String link : this.links) {
          _builder.append("\\noindent\\url{");
          _builder.append(link, "");
          _builder.append("}");
          _builder.newLineIfNotEmpty();
        }
      }
      _xifexpression = _builder;
    }
    return _xifexpression;
  }
 
  public CharSequence preamble() {
    StringConcatenation _builder = new StringConcatenation();
    _builder.append("\\documentclass[a4paper,10pt]{scrreprt}");
    _builder.newLine();
    _builder.newLine();
    _builder.append("\\typearea{12}");
    _builder.newLine();
    _builder.newLine();
    _builder.append("\\usepackage[T1]{fontenc}");
    _builder.newLine();
    _builder.append("\\usepackage{ae,aecompl,aeguill} ");
    _builder.newLine();
    _builder.append("\\usepackage[latin1]{inputenc}");
    _builder.newLine();
    _builder.append("\\usepackage{listings}");
    _builder.newLine();
    _builder.append("\\usepackage[american]{babel}");
    _builder.newLine();
    _builder.newLine();
    _builder.append("\\usepackage{todonotes}");
    _builder.newLine();
    _builder.newLine();
    _builder.append("\\makeatletter");
    _builder.newLine();
    _builder.append("\\renewcommand\\subsection{\\medskip\\@startsection{subsection}{2}{\\z@}%");
    _builder.newLine();
    _builder.append("  ");
    _builder.append("{-.25ex\\@plus -.1ex \\@minus -.2ex}%");
    _builder.newLine();
    _builder.append("  ");
    _builder.append("{1.5ex \\@plus .2ex \\@minus -.4ex}%");
    _builder.newLine();
    _builder.append("  ");
    _builder.append("{\\ifnum \\scr@compatibility>\\@nameuse{scr@v@2.96}\\relax");
    _builder.newLine();
    _builder.append("    ");
    _builder.append("\\setlength{\\parfillskip}{\\z@ plus 1fil}\\fi");
    _builder.newLine();
    _builder.append("    ");
    _builder.append("\\raggedsection\\normalfont\\sectfont\\nobreak\\size@subsection");
    _builder.newLine();
    _builder.append("  ");
    _builder.append("}%");
    _builder.newLine();
    _builder.append("}");
    _builder.newLine();
    _builder.append("\\renewcommand\\paragraph{\\@startsection{paragraph}{4}{\\z@}%");
    _builder.newLine();
    _builder.append("  ");
    _builder.append("{-3.25ex\\@plus -1ex \\@minus -.2ex}%");
    _builder.newLine();
    _builder.append("  ");
    _builder.append("{1.5ex \\@plus .2ex}%");
    _builder.newLine();
    _builder.append("  ");
    _builder.append("{\\sffamily\\normalsize\\bfseries}}");
    _builder.newLine();
    _builder.append("\\makeatother");
    _builder.newLine();
    _builder.newLine();
    _builder.append("\\definecolor{listingsbg}{HTML}{E7E7E7}");
    _builder.newLine();
    _builder.append("\\definecolor{kwcolor}{HTML}{7F0055}");
    _builder.newLine();
    _builder.append("\\definecolor{strcolor}{HTML}{2A00FF}");
    _builder.newLine();
    _builder.append("\\definecolor{cocolor}{HTML}{3F7F5F}");
    _builder.newLine();
    _builder.newLine();
    _builder.append("\\lstset{tabsize=4, basicstyle=\\sffamily\\small, keywordstyle=\\bfseries\\color{kwcolor}, commentstyle=\\color{cocolor},");
    _builder.newLine();
    _builder.append("stringstyle=\\color{strcolor}, columns=[r]fullflexible, escapechar={�}, frame=single, %framexleftmargin=-5pt, framexrightmargin=-5pt, ");
    _builder.newLine();
    _builder.append("xleftmargin=5pt, xrightmargin=5pt, rulecolor=\\color{lightgray}, showstringspaces=false, backgroundcolor=\\color{listingsbg!70}}");
    _builder.newLine();
    _builder.newLine();
    _builder.append("\\newlength{\\XdocItemIndent}");
    _builder.newLine();
    _builder.append("\\newlength{\\XdocTEffectiveWidth}");
    _builder.newLine();
    _builder.newLine();
    return _builder;
  }
 
  public CharSequence configureTodo() {
    StringConcatenation _builder = new StringConcatenation();
    {
      Object _get = this.config.get(Config.release);
      if ((((Boolean) _get)).booleanValue()) {
        _builder.append("\\renewcommand{\\todo}[1]{}");
        _builder.newLine();
      }
    }
    return _builder;
  }
 
  protected CharSequence _generate(final LangDef lang) {
    StringConcatenation _builder = new StringConcatenation();
    _builder.append("\\lstdefinelanguage{");
    String _name = lang.getName();
    _builder.append(_name, "");
    _builder.append("}");
    _builder.newLineIfNotEmpty();
    _builder.append("  ");
    _builder.append("{morekeywords={");
    EList<String> _keywords = lang.getKeywords();
    String _join = IterableExtensions.join(_keywords, ", ");
    _builder.append(_join, "  ");
    _builder.append("},");
    _builder.newLineIfNotEmpty();
    _builder.append("    ");
    _builder.append("sensitive=true,");
    _builder.newLine();
    _builder.append("    ");
    _builder.append("morecomment=[l]{//},");
    _builder.newLine();
    _builder.append("    ");
    _builder.append("morecomment=[s]{/*}{*/},");
    _builder.newLine();
    _builder.append("    ");
    _builder.append("morestring=[b]\",");
    _builder.newLine();
    _builder.append("    ");
    _builder.append("morestring=[b]\',");
    _builder.newLine();
    _builder.append("  ");
    _builder.append("}");
    _builder.newLine();
    return _builder;
  }
 
  public CharSequence authorAndTitle(final Document doc) {
    StringConcatenation _builder = new StringConcatenation();
    {
      boolean _and = false;
      TextOrMarkup _authors = doc.getAuthors();
      boolean _notEquals = (!Objects.equal(_authors, null));
      if (!_notEquals) {
        _and = false;
      } else {
        TextOrMarkup _authors_1 = doc.getAuthors();
        EList<EObject> _contents = _authors_1.getContents();
        boolean _isEmpty = _contents.isEmpty();
        boolean _not = (!_isEmpty);
        _and = _not;
      }
      if (_and) {
        _builder.append("\\author{");
        {
          TextOrMarkup _authors_2 = doc.getAuthors();
          EList<EObject> _contents_1 = _authors_2.getContents();
          for(final EObject o : _contents_1) {
            CharSequence _genText = this.genText(o);
            _builder.append(_genText, "");
          }
        }
        _builder.append("}");
        _builder.newLineIfNotEmpty();
      }
    }
    _builder.newLine();
    {
      TextOrMarkup _title = doc.getTitle();
      boolean _notEquals_1 = (!Objects.equal(_title, null));
      if (_notEquals_1) {
        _builder.append("\\title{");
        {
          TextOrMarkup _title_1 = doc.getTitle();
          EList<EObject> _contents_2 = null;
          if (_title_1!=null) {
            _contents_2=_title_1.getContents();
          }
          for(final EObject o_1 : _contents_2) {
            CharSequence _genText_1 = this.genText(o_1);
            _builder.append(_genText_1, "");
          }
        }
        _builder.append("}");
        _builder.newLineIfNotEmpty();
      }
    }
    return _builder;
  }
 
  /**
   * genContent
   *
   * Generates the content for the single structures.
   *
   * FIXME: name for sectionrefs not correctly read
   */
  protected CharSequence _generate(final AbstractSection sec) {
    StringConcatenation _builder = new StringConcatenation();
    CharSequence _switchResult = null;
    boolean _matched = false;
    if (!_matched) {
      if (sec instanceof Part) {
        _matched=true;
        StringConcatenation _builder_1 = new StringConcatenation();
        _builder_1.append("\\part{");
        TextOrMarkup _title = ((Part)sec).getTitle();
        CharSequence _genNonParContent = this.genNonParContent(_title);
        _builder_1.append(_genNonParContent, "");
        _builder_1.append("}");
        _switchResult = _builder_1;
      }
    }
    if (!_matched) {
      if (sec instanceof Chapter) {
        _matched=true;
        StringConcatenation _builder_1 = new StringConcatenation();
        _builder_1.append("\\chapter{");
        TextOrMarkup _title = ((Chapter)sec).getTitle();
        CharSequence _genNonParContent = this.genNonParContent(_title);
        _builder_1.append(_genNonParContent, "");
        _builder_1.append("}");
        _switchResult = _builder_1;
      }
    }
    if (!_matched) {
      if (sec instanceof Section) {
        _matched=true;
        StringConcatenation _builder_1 = new StringConcatenation();
        _builder_1.append("\\section{");
        TextOrMarkup _title = ((Section)sec).getTitle();
        CharSequence _genNonParContent = this.genNonParContent(_title);
        _builder_1.append(_genNonParContent, "");
        _builder_1.append("}");
        _switchResult = _builder_1;
      }
    }
    if (!_matched) {
      if (sec instanceof Section2) {
        _matched=true;
        StringConcatenation _builder_1 = new StringConcatenation();
        _builder_1.append("\\subsection{");
        TextOrMarkup _title = ((Section2)sec).getTitle();
        CharSequence _genNonParContent = this.genNonParContent(_title);
        _builder_1.append(_genNonParContent, "");
        _builder_1.append("}");
        _switchResult = _builder_1;
      }
    }
    if (!_matched) {
      if (sec instanceof Section3) {
        _matched=true;
        StringConcatenation _builder_1 = new StringConcatenation();
        _builder_1.append("\\subsubsection{");
        TextOrMarkup _title = ((Section3)sec).getTitle();
        CharSequence _genNonParContent = this.genNonParContent(_title);
        _builder_1.append(_genNonParContent, "");
        _builder_1.append("}");
        _switchResult = _builder_1;
      }
    }
    if (!_matched) {
      if (sec instanceof Section4) {
        _matched=true;
        StringConcatenation _builder_1 = new StringConcatenation();
        _builder_1.append("\\paragraph{");
        TextOrMarkup _title = ((Section4)sec).getTitle();
        CharSequence _genNonParContent = this.genNonParContent(_title);
        _builder_1.append(_genNonParContent, "");
        _builder_1.append("}");
        _switchResult = _builder_1;
      }
    }
    _builder.append(_switchResult, "");
    _builder.newLineIfNotEmpty();
    CharSequence _switchResult_1 = null;
    boolean _matched_1 = false;
    if (!_matched_1) {
      if (sec instanceof Part) {
        _matched_1=true;
        _switchResult_1 = this.genLabel(sec);
      }
    }
    if (!_matched_1) {
      if (sec instanceof Chapter) {
        _matched_1=true;
        _switchResult_1 = this.genLabel(sec);
      }
    }
    if (!_matched_1) {
      if (sec instanceof Section) {
        _matched_1=true;
        _switchResult_1 = this.genLabel(sec);
      }
    }
    if (!_matched_1) {
      TextOrMarkup _title = sec.getTitle();
      _switchResult_1 = this.genLabel(_title);
    }
    _builder.append(_switchResult_1, "");
    _builder.newLineIfNotEmpty();
    CharSequence _genContent = this.genContent(sec);
    _builder.append(_genContent, "");
    _builder.newLineIfNotEmpty();
    return _builder;
  }
 
  protected CharSequence _genContent(final Chapter chap) {
    StringConcatenation _builder = new StringConcatenation();
    {
      EList<TextOrMarkup> _contents = chap.getContents();
      for(final TextOrMarkup c : _contents) {
        CharSequence _genContent = this.genContent(c);
        _builder.append(_genContent, "");
      }
    }
    _builder.newLineIfNotEmpty();
    {
      EList<Section> _subSections = chap.getSubSections();
      for(final Section sub : _subSections) {
        CharSequence _generate = this.generate(sub);
        _builder.append(_generate, "");
      }
    }
    _builder.newLineIfNotEmpty();
    return _builder;
  }
 
  protected CharSequence _genContent(final Part part) {
    StringConcatenation _builder = new StringConcatenation();
    _builder.newLine();
    {
      EList<TextOrMarkup> _contents = part.getContents();
      for(final TextOrMarkup c : _contents) {
        CharSequence _genContent = this.genContent(c);
        _builder.append(_genContent, "");
        _builder.newLineIfNotEmpty();
      }
    }
    {
      EList<Chapter> _chapters = part.getChapters();
      for(final Chapter sub : _chapters) {
        CharSequence _generate = this.generate(sub);
        _builder.append(_generate, "");
      }
    }
    _builder.newLineIfNotEmpty();
    return _builder;
  }
 
  protected CharSequence _genContent(final Section sec) {
    StringConcatenation _builder = new StringConcatenation();
    {
      EList<TextOrMarkup> _contents = sec.getContents();
      for(final TextOrMarkup c : _contents) {
        CharSequence _genContent = this.genContent(c);
        _builder.append(_genContent, "");
        _builder.newLineIfNotEmpty();
      }
    }
    {
      EList<Section2> _subSections = sec.getSubSections();
      for(final Section2 sub : _subSections) {
        CharSequence _generate = this.generate(sub);
        _builder.append(_generate, "");
        _builder.newLineIfNotEmpty();
      }
    }
    return _builder;
  }
 
  protected CharSequence _genContent(final Section2 sec) {
    StringConcatenation _builder = new StringConcatenation();
    CharSequence _genLabel = this.genLabel(sec);
    _builder.append(_genLabel, "");
    _builder.newLineIfNotEmpty();
    {
      EList<TextOrMarkup> _contents = sec.getContents();
      for(final TextOrMarkup c : _contents) {
        CharSequence _genContent = this.genContent(c);
        _builder.append(_genContent, "");
        _builder.newLineIfNotEmpty();
      }
    }
    {
      EList<Section3> _subSections = sec.getSubSections();
      for(final Section3 sub : _subSections) {
        CharSequence _generate = this.generate(sub);
        _builder.append(_generate, "");
        _builder.newLineIfNotEmpty();
      }
    }
    return _builder;
  }
 
  protected CharSequence _genContent(final Section3 sec) {
    StringConcatenation _builder = new StringConcatenation();
    CharSequence _genLabel = this.genLabel(sec);
    _builder.append(_genLabel, "");
    _builder.newLineIfNotEmpty();
    {
      EList<TextOrMarkup> _contents = sec.getContents();
      for(final TextOrMarkup c : _contents) {
        CharSequence _genContent = this.genContent(c);
        _builder.append(_genContent, "");
        _builder.newLineIfNotEmpty();
      }
    }
    {
      EList<Section4> _subSections = sec.getSubSections();
      for(final Section4 sub : _subSections) {
        CharSequence _generate = this.generate(sub);
        _builder.append(_generate, "");
        _builder.newLineIfNotEmpty();
      }
    }
    return _builder;
  }
 
  protected CharSequence _genContent(final Section4 sec) {
    StringConcatenation _builder = new StringConcatenation();
    CharSequence _genLabel = this.genLabel(sec);
    _builder.append(_genLabel, "");
    _builder.newLineIfNotEmpty();
    {
      EList<TextOrMarkup> _contents = sec.getContents();
      for(final TextOrMarkup c : _contents) {
        CharSequence _genContent = this.genContent(c);
        _builder.append(_genContent, "");
        _builder.newLineIfNotEmpty();
      }
    }
    return _builder;
  }
 
  protected CharSequence _genContent(final TextOrMarkup tom) {
    StringConcatenation _builder = new StringConcatenation();
    {
      EList<EObject> _contents = tom.getContents();
      for(final EObject e : _contents) {
        CharSequence _genText = this.genText(e);
        _builder.append(_genText, "");
      }
    }
    _builder.newLineIfNotEmpty();
    _builder.newLine();
    return _builder;
  }
 
  /**
   * genNonParContent
   */
  public CharSequence genNonParContent(final TextOrMarkup tom) {
    StringConcatenation _builder = new StringConcatenation();
    {
      EList<EObject> _contents = tom.getContents();
      for(final EObject e : _contents) {
        CharSequence _genText = this.genText(e);
        _builder.append(_genText, "");
      }
    }
    return _builder;
  }
 
  /**
   * genLabel
   * Generates a label
   */
  protected CharSequence _genLabel(final Part part) {
    StringConcatenation _builder = new StringConcatenation();
    {
      String _name = part.getName();
      boolean _notEquals = (!Objects.equal(_name, null));
      if (_notEquals) {
        _builder.append("\\label{");
        String _name_1 = part.getName();
        String _string = null;
        if (_name_1!=null) {
          _string=_name_1.toString();
        }
        _builder.append(_string, "");
        _builder.append("}");
        _builder.newLineIfNotEmpty();
      }
    }
    return _builder;
  }
 
  protected CharSequence _genLabel(final PartRef part) {
    StringConcatenation _builder = new StringConcatenation();
    {
      Part _part = part.getPart();
      String _name = _part.getName();
      boolean _notEquals = (!Objects.equal(_name, null));
      if (_notEquals) {
        _builder.append("\\label{");
        Part _part_1 = part.getPart();
        String _name_1 = _part_1.getName();
        String _string = null;
        if (_name_1!=null) {
          _string=_name_1.toString();
        }
        _builder.append(_string, "");
        _builder.append("}");
        _builder.newLineIfNotEmpty();
      }
    }
    return _builder;
  }
 
  protected CharSequence _genLabel(final ChapterRef cRef) {
    StringConcatenation _builder = new StringConcatenation();
    {
      Chapter _chapter = cRef.getChapter();
      String _name = _chapter.getName();
      boolean _notEquals = (!Objects.equal(_name, null));
      if (_notEquals) {
        _builder.append("\\label{");
        Chapter _chapter_1 = cRef.getChapter();
        String _name_1 = _chapter_1.getName();
        String _string = null;
        if (_name_1!=null) {
          _string=_name_1.toString();
        }
        _builder.append(_string, "");
        _builder.append("}");
        _builder.newLineIfNotEmpty();
      }
    }
    return _builder;
  }
 
  protected CharSequence _genLabel(final Chapter chap) {
    StringConcatenation _builder = new StringConcatenation();
    {
      String _name = chap.getName();
      boolean _notEquals = (!Objects.equal(_name, null));
      if (_notEquals) {
        _builder.append("\\label{");
        String _name_1 = chap.getName();
        String _string = null;
        if (_name_1!=null) {
          _string=_name_1.toString();
        }
        _builder.append(_string, "");
        _builder.append("}");
        _builder.newLineIfNotEmpty();
      }
    }
    return _builder;
  }
 
  protected CharSequence _genLabel(final Section sec) {
    StringConcatenation _builder = new StringConcatenation();
    {
      String _name = sec.getName();
      boolean _notEquals = (!Objects.equal(_name, null));
      if (_notEquals) {
        _builder.append("\\label{");
        String _name_1 = sec.getName();
        String _string = null;
        if (_name_1!=null) {
          _string=_name_1.toString();
        }
        _builder.append(_string, "");
        _builder.append("}");
        _builder.newLineIfNotEmpty();
      }
    }
    return _builder;
  }
 
  protected CharSequence _genLabel(final SectionRef sRef) {
    StringConcatenation _builder = new StringConcatenation();
    {
      Section _section = sRef.getSection();
      String _name = _section.getName();
      boolean _notEquals = (!Objects.equal(_name, null));
      if (_notEquals) {
        _builder.append("\\label{");
        Section _section_1 = sRef.getSection();
        String _name_1 = _section_1.getName();
        String _string = null;
        if (_name_1!=null) {
          _string=_name_1.toString();
        }
        _builder.append(_string, "");
        _builder.append("}");
        _builder.newLineIfNotEmpty();
      }
    }
    return _builder;
  }
 
  protected CharSequence _genLabel(final Section2 sec) {
    StringConcatenation _builder = new StringConcatenation();
    {
      String _name = sec.getName();
      boolean _notEquals = (!Objects.equal(_name, null));
      if (_notEquals) {
        _builder.append("\\label{");
        String _name_1 = sec.getName();
        String _string = null;
        if (_name_1!=null) {
          _string=_name_1.toString();
        }
        _builder.append(_string, "");
        _builder.append("}");
        _builder.newLineIfNotEmpty();
      }
    }
    return _builder;
  }
 
  protected CharSequence _genLabel(final Section2Ref sRef) {
    StringConcatenation _builder = new StringConcatenation();
    {
      Section2 _section2 = sRef.getSection2();
      String _name = _section2.getName();
      boolean _notEquals = (!Objects.equal(_name, null));
      if (_notEquals) {
        _builder.append("\\label{");
        Section2 _section2_1 = sRef.getSection2();
        String _name_1 = _section2_1.getName();
        String _string = null;
        if (_name_1!=null) {
          _string=_name_1.toString();
        }
        _builder.append(_string, "");
        _builder.append("}");
        _builder.newLineIfNotEmpty();
      }
    }
    return _builder;
  }
 
  protected CharSequence _genLabel(final Section3 sec) {
    StringConcatenation _builder = new StringConcatenation();
    {
      String _name = sec.getName();
      boolean _notEquals = (!Objects.equal(_name, null));
      if (_notEquals) {
        _builder.append("\\label{");
        String _name_1 = sec.getName();
        String _string = null;
        if (_name_1!=null) {
          _string=_name_1.toString();
        }
        _builder.append(_string, "");
        _builder.append("}");
        _builder.newLineIfNotEmpty();
      }
    }
    return _builder;
  }
 
  protected CharSequence _genLabel(final Section4 sec) {
    StringConcatenation _builder = new StringConcatenation();
    {
      String _name = sec.getName();
      boolean _notEquals = (!Objects.equal(_name, null));
      if (_notEquals) {
        _builder.append("\\label{");
        String _name_1 = sec.getName();
        String _string = null;
        if (_name_1!=null) {
          _string=_name_1.toString();
        }
        _builder.append(_string, "");
        _builder.append("}");
        _builder.newLineIfNotEmpty();
      }
    }
    return _builder;
  }
 
  protected CharSequence _genLabel(final TextOrMarkup tom) {
    StringConcatenation _builder = new StringConcatenation();
    return _builder;
  }
 
  public CharSequence genURL(final String str) {
    StringConcatenation _builder = new StringConcatenation();
    _builder.append("\\noindent\\url{");
    _builder.append(str, "");
    _builder.append("}");
    return _builder;
  }
 
  protected CharSequence _genText(final Table tab) {
    StringConcatenation _builder = new StringConcatenation();
    _builder.newLine();
    _builder.append("\\setlength{\\XdocTEffectiveWidth}{\\textwidth}");
    _builder.newLine();
    _builder.append("\\addtolength{\\XdocTEffectiveWidth}{-");
    EList<TableRow> _rows = tab.getRows();
    TableRow _head = IterableExtensions.<TableRow>head(_rows);
    EList<TableData> _data = _head.getData();
    int _size = _data.size();
    int _multiply = (_size * 2);
    _builder.append(_multiply, "");
    _builder.append(".0\\tabcolsep}");
    _builder.newLineIfNotEmpty();
    _builder.append("\\noindent\\begin{tabular}{");
    EList<TableRow> _rows_1 = tab.getRows();
    TableRow _head_1 = IterableExtensions.<TableRow>head(_rows_1);
    EList<TableData> _data_1 = _head_1.getData();
    CharSequence _genColumns = this.genColumns(_data_1);
    _builder.append(_genColumns, "");
    _builder.append("}");
    _builder.newLineIfNotEmpty();
    EList<TableRow> _rows_2 = tab.getRows();
    final Function1<TableRow, CharSequence> _function = new Function1<TableRow, CharSequence>() {
      public CharSequence apply(final TableRow e) {
        return LatexGenerator.this.genText(e);
      }
    };
    List<CharSequence> _map = ListExtensions.<TableRow, CharSequence>map(_rows_2, _function);
    String _join = IterableExtensions.join(_map, "\\\\\n");
    _builder.append(_join, "");
    _builder.newLineIfNotEmpty();
    _builder.append("\\end{tabular}");
    _builder.newLine();
    return _builder;
  }
 
  protected CharSequence _genText(final TableRow row) {
    EList<TableData> _data = row.getData();
    final Function1<TableData, CharSequence> _function = new Function1<TableData, CharSequence>() {
      public CharSequence apply(final TableData e) {
        return LatexGenerator.this.genText(e);
      }
    };
    List<CharSequence> _map = ListExtensions.<TableData, CharSequence>map(_data, _function);
    return IterableExtensions.join(_map, " & ");
  }
 
  protected CharSequence _genText(final TableData tData) {
    EList<TextOrMarkup> _contents = tData.getContents();
    final Function1<TextOrMarkup, CharSequence> _function = new Function1<TextOrMarkup, CharSequence>() {
      public CharSequence apply(final TextOrMarkup e) {
        return LatexGenerator.this.genContent(e);
      }
    };
    List<CharSequence> _map = ListExtensions.<TextOrMarkup, CharSequence>map(_contents, _function);
    return IterableExtensions.join(_map);
  }
 
  protected CharSequence _genText(final TextPart part) {
    String _text = part.getText();
    String _unescapeXdocChars = this.utils.unescapeXdocChars(_text);
    return this.utils.escapeLatexChars(_unescapeXdocChars);
  }
 
  protected CharSequence _genText(final OrderedList ol) {
    StringConcatenation _builder = new StringConcatenation();
    _builder.append("\\setlength{\\XdocItemIndent}{\\textwidth}");
    _builder.newLine();
    _builder.append("\\begin{enumerate}");
    _builder.newLine();
    _builder.append("\\addtolength{\\XdocItemIndent}{-2.5em}");
    _builder.newLine();
    EList<Item> _items = ol.getItems();
    final Function1<Item, CharSequence> _function = new Function1<Item, CharSequence>() {
      public CharSequence apply(final Item e) {
        return LatexGenerator.this.genText(e);
      }
    };
    List<CharSequence> _map = ListExtensions.<Item, CharSequence>map(_items, _function);
    String _join = IterableExtensions.join(_map);
    _builder.append(_join, "");
    _builder.newLineIfNotEmpty();
    _builder.append("\\end{enumerate}");
    _builder.newLine();
    _builder.append("\\addtolength{\\XdocItemIndent}{2.5em}");
    _builder.newLine();
    return _builder;
  }
 
  protected CharSequence _genText(final UnorderedList ul) {
    StringConcatenation _builder = new StringConcatenation();
    _builder.append("\\setlength{\\XdocItemIndent}{\\textwidth}");
    _builder.newLine();
    _builder.append("\\begin{itemize}");
    _builder.newLine();
    _builder.append("\\addtolength{\\XdocItemIndent}{-2.5em}");
    _builder.newLine();
    EList<Item> _items = ul.getItems();
    final Function1<Item, CharSequence> _function = new Function1<Item, CharSequence>() {
      public CharSequence apply(final Item e) {
        return LatexGenerator.this.genText(e);
      }
    };
    List<CharSequence> _map = ListExtensions.<Item, CharSequence>map(_items, _function);
    String _join = IterableExtensions.join(_map);
    _builder.append(_join, "");
    _builder.newLineIfNotEmpty();
    _builder.append("\\end{itemize}");
    _builder.newLine();
    _builder.append("\\addtolength{\\XdocItemIndent}{2.5em}");
    _builder.newLine();
    return _builder;
  }
 
  protected CharSequence _genText(final Item item) {
    StringConcatenation _builder = new StringConcatenation();
    _builder.append("\\item \\begin{minipage}[t]{\\XdocItemIndent}");
    {
      EList<TextOrMarkup> _contents = item.getContents();
      TextOrMarkup _head = IterableExtensions.<TextOrMarkup>head(_contents);
      boolean _block = LatexUtils.block(_head);
      if (_block) {
        _builder.append("\\vspace*{-\\baselineskip}");
      }
    }
    _builder.newLineIfNotEmpty();
    EList<TextOrMarkup> _contents_1 = item.getContents();
    final Function1<TextOrMarkup, CharSequence> _function = new Function1<TextOrMarkup, CharSequence>() {
      public CharSequence apply(final TextOrMarkup e) {
        return LatexGenerator.this.genContent(e);
      }
    };
    List<CharSequence> _map = ListExtensions.<TextOrMarkup, CharSequence>map(_contents_1, _function);
    String _join = IterableExtensions.join(_map);
    _builder.append(_join, "");
    _builder.newLineIfNotEmpty();
    _builder.append("\\end{minipage}");
    _builder.newLine();
    return _builder;
  }
 
  protected CharSequence _genText(final Emphasize em) {
    StringConcatenation _builder = new StringConcatenation();
    _builder.append("\\textit{");
    EList<TextOrMarkup> _contents = em.getContents();
    final Function1<TextOrMarkup, CharSequence> _function = new Function1<TextOrMarkup, CharSequence>() {
      public CharSequence apply(final TextOrMarkup e) {
        return LatexGenerator.this.genNonParContent(e);
      }
    };
    List<CharSequence> _map = ListExtensions.<TextOrMarkup, CharSequence>map(_contents, _function);
    String _join = IterableExtensions.join(_map);
    _builder.append(_join, "");
    _builder.append("}");
    return _builder;
  }
 
  protected CharSequence _genText(final Ref ref) {
    StringConcatenation _builder = new StringConcatenation();
    {
      EList<TextOrMarkup> _contents = ref.getContents();
      boolean _isEmpty = _contents.isEmpty();
      if (_isEmpty) {
        _builder.append("\\autoref{");
        Identifiable _ref = ref.getRef();
        String _name = _ref.getName();
        _builder.append(_name, "");
        _builder.append("}");
      } else {
        _builder.append("\\hyperref[");
        Identifiable _ref_1 = ref.getRef();
        String _name_1 = _ref_1.getName();
        _builder.append(_name_1, "");
        _builder.append("]{");
        EList<TextOrMarkup> _contents_1 = ref.getContents();
        final Function1<TextOrMarkup, CharSequence> _function = new Function1<TextOrMarkup, CharSequence>() {
          public CharSequence apply(final TextOrMarkup e) {
            return LatexGenerator.this.genNonParContent(e);
          }
        };
        List<CharSequence> _map = ListExtensions.<TextOrMarkup, CharSequence>map(_contents_1, _function);
        String _join = IterableExtensions.join(_map);
        _builder.append(_join, "");
        _builder.append("~(�\\ref*{");
        Identifiable _ref_2 = ref.getRef();
        String _name_2 = _ref_2.getName();
        _builder.append(_name_2, "");
        _builder.append("})}");
      }
    }
    return _builder;
  }
 
  protected CharSequence _genText(final Anchor anchor) {
    StringConcatenation _builder = new StringConcatenation();
    _builder.append("\\phantomsection\\label{");
    String _name = anchor.getName();
    _builder.append(_name, "");
    _builder.append("}");
    return _builder;
  }
 
  protected CharSequence _genText(final Link link) {
    CharSequence _xblockexpression = null;
    {
      String _url = link.getUrl();
      this.links.add(_url);
      StringConcatenation _builder = new StringConcatenation();
      _builder.append("\\href{");
      String _url_1 = link.getUrl();
      _builder.append(_url_1, "");
      _builder.append("}{");
      String _text = link.getText();
      _builder.append(_text, "");
      _builder.append("}");
      _xblockexpression = _builder;
    }
    return _xblockexpression;
  }
 
  protected CharSequence _genText(final CodeBlock block) {
    return this.specialGenCode(block);
  }
 
  protected CharSequence _genText(final CodeRef codeRef) {
    StringConcatenation _builder = new StringConcatenation();
    _builder.append("\\protect\\lstinline�");
    JvmDeclaredType _element = codeRef.getElement();
    String _qualifiedName = _element.getQualifiedName();
    String _unescapeXdocChars = this.utils.unescapeXdocChars(_qualifiedName);
    String _escapeLatexChars = this.utils.escapeLatexChars(_unescapeXdocChars);
    _builder.append(_escapeLatexChars, "");
    _builder.append("�");
    return _builder;
  }
 
  protected CharSequence _genText(final ImageRef imgRef) {
    StringConcatenation _builder = new StringConcatenation();
    _builder.append("\\begin{figure}[!ht]");
    _builder.newLine();
    _builder.append("\\centering");
    _builder.newLine();
    _builder.append("\\includegraphics{");
    String _copy = this.copy(imgRef);
    _builder.append(_copy, "");
    _builder.append("}");
    _builder.newLineIfNotEmpty();
    {
      boolean _and = false;
      String _caption = imgRef.getCaption();
      boolean _notEquals = (!Objects.equal(_caption, null));
      if (!_notEquals) {
        _and = false;
      } else {
        String _caption_1 = imgRef.getCaption();
        boolean _matches = _caption_1.matches("^\\s*$");
        _and = _matches;
      }
      if (_and) {
        _builder.append("\\caption{");
        String _caption_2 = imgRef.getCaption();
        _builder.append(_caption_2, "");
        _builder.append("}");
        _builder.newLineIfNotEmpty();
      }
    }
    _builder.append("\\end{figure}");
    _builder.newLine();
    return _builder;
  }
 
  public String copy(final ImageRef imgRef) {
    try {
      final Resource res = imgRef.eResource();
      final ByteBuffer buffer = ByteBuffer.allocateDirect((16 * 1024));
      final URI uri = res.getURI();
      ResourceSet _resourceSet = res.getResourceSet();
      final URIConverter uriConverter = _resourceSet.getURIConverter();
      File _file = new File("");
      String _absolutePath = _file.getAbsolutePath();
      String _plus = (_absolutePath + "/");
      final URI absoluteLocalPath = URI.createFileURI(_plus);
      String _path = imgRef.getPath();
      final URI relativeImageURI = URI.createFileURI(_path);
      URI _resolve = relativeImageURI.resolve(uri);
      final URI inPath = _resolve.deresolve(absoluteLocalPath);
      List<String> _segmentsList = inPath.segmentsList();
      int _segmentCount = inPath.segmentCount();
      final List<String> inSegments = _segmentsList.subList(1, _segmentCount);
      final String pathInDocument = IterableExtensions.join(inSegments, "/");
      Object _get = this.config.get(Config.outletPath);
      String _string = _get.toString();
      String _plus_1 = (_string + "/");
      String _plus_2 = (_plus_1 + pathInDocument);
      final URI outPath = URI.createFileURI(_plus_2);
      InputStream _createInputStream = uriConverter.createInputStream(inPath);
      final ReadableByteChannel inChannel = Channels.newChannel(_createInputStream);
      ResourceSet _resourceSet_1 = res.getResourceSet();
      URIConverter _uRIConverter = _resourceSet_1.getURIConverter();
      OutputStream _createOutputStream = _uRIConverter.createOutputStream(outPath);
      final WritableByteChannel outChannel = Channels.newChannel(_createOutputStream);
      while ((new Function0<Integer>() {
        public Integer apply() {
          try {
            int _read = inChannel.read(buffer);
            return _read;
          } catch (Throwable _e) {
            throw Exceptions.sneakyThrow(_e);
          }
        }
      }.apply().intValue() != (-1))) {
        {
          buffer.flip();
          outChannel.write(buffer);
          buffer.compact();
        }
      }
      buffer.flip();
      while (buffer.hasRemaining()) {
        outChannel.write(buffer);
      }
      outChannel.close();
      return pathInDocument;
    } catch (final Throwable _t) {
      if (_t instanceof Exception) {
        final Exception e = (Exception)_t;
        throw new RuntimeException(e);
      } else {
        throw Exceptions.sneakyThrow(_t);
      }
    }
  }
 
  protected CharSequence _genText(final Todo todo) {
    CharSequence _xifexpression = null;
    Object _get = this.config.get(Config.release);
    if ((!(((Boolean) _get)).booleanValue())) {
      StringConcatenation _builder = new StringConcatenation();
      _builder.append("\\todo[inline]{");
      String _text = todo.getText();
      String _unescapeXdocChars = this.utils.unescapeXdocChars(_text);
      String _escapeLatexChars = this.utils.escapeLatexChars(_unescapeXdocChars);
      _builder.append(_escapeLatexChars, "");
      _builder.append("}");
      _xifexpression = _builder;
    } else {
      StringConcatenation _builder_1 = new StringConcatenation();
      _xifexpression = _builder_1;
    }
    return _xifexpression;
  }
 
  protected CharSequence _genText(final MarkupInCode mic) {
    StringConcatenation _builder = new StringConcatenation();
    return _builder;
  }
 
  protected CharSequence _genText(final String str) {
    return str;
  }
 
  protected CharSequence _genText(final EObject o) {
    StringConcatenation _builder = new StringConcatenation();
    return _builder;
  }
 
  /**
   * TODO: block.language != null  should be  language != null
   */
  public CharSequence specialGenCode(final CodeBlock block) {
    CharSequence _xifexpression = null;
    boolean _inline = LatexUtils.inline(block);
    if (_inline) {
      CharSequence _xifexpression_1 = null;
      boolean _containerTypeOf = this.containerTypeOf(block, XdocPackage.Literals.TABLE);
      if (_containerTypeOf) {
        StringConcatenation _builder = new StringConcatenation();
        _builder.append("\\protect\\lstinline");
        LangDef _language = block.getLanguage();
        CharSequence _langSpec = null;
        if (_language!=null) {
          _langSpec=this.langSpec(_language);
        }
        _builder.append(_langSpec, "");
        _builder.append("�");
        EList<EObject> _contents = block.getContents();
        final Function1<EObject, CharSequence> _function = new Function1<EObject, CharSequence>() {
          public CharSequence apply(final EObject it) {
            return LatexGenerator.this.genCode(it);
          }
        };
        List<CharSequence> _map = ListExtensions.<EObject, CharSequence>map(_contents, _function);
        String _join = IterableExtensions.join(_map);
        _builder.append(_join, "");
        _builder.append("�");
        _xifexpression_1 = _builder;
      } else {
        StringConcatenation _builder_1 = new StringConcatenation();
        _builder_1.append("\\protect\\lstinline");
        LangDef _language_1 = block.getLanguage();
        CharSequence _langSpec_1 = null;
        if (_language_1!=null) {
          _langSpec_1=this.langSpec(_language_1);
        }
        _builder_1.append(_langSpec_1, "");
        _builder_1.append("{");
        EList<EObject> _contents_1 = block.getContents();
        final Function1<EObject, CharSequence> _function_1 = new Function1<EObject, CharSequence>() {
          public CharSequence apply(final EObject it) {
            return LatexGenerator.this.genCode(it);
          }
        };
        List<CharSequence> _map_1 = ListExtensions.<EObject, CharSequence>map(_contents_1, _function_1);
        String _join_1 = IterableExtensions.join(_map_1);
        _builder_1.append(_join_1, "");
        _builder_1.append("}");
        _xifexpression_1 = _builder_1;
      }
      _xifexpression = _xifexpression_1;
    } else {
      StringConcatenation _builder_2 = new StringConcatenation();
      _builder_2.newLine();
      _builder_2.append("\\begin{lstlisting}");
      LangDef _language_2 = block.getLanguage();
      CharSequence _langSpec_2 = null;
      if (_language_2!=null) {
        _langSpec_2=this.langSpec(_language_2);
      }
      _builder_2.append(_langSpec_2, "");
      _builder_2.newLineIfNotEmpty();
      CodeBlock _removeIndent = StringUtils.removeIndent(block);
      EList<EObject> _contents_2 = _removeIndent.getContents();
      final Function1<EObject, CharSequence> _function_2 = new Function1<EObject, CharSequence>() {
        public CharSequence apply(final EObject e) {
          return LatexGenerator.this.genCode(e);
        }
      };
      List<CharSequence> _map_2 = ListExtensions.<EObject, CharSequence>map(_contents_2, _function_2);
      String _join_2 = IterableExtensions.join(_map_2);
      _builder_2.append(_join_2, "");
      _builder_2.newLineIfNotEmpty();
      _builder_2.append("\\end{lstlisting}");
      _builder_2.newLine();
      _xifexpression = _builder_2;
    }
    return _xifexpression;
  }
 
  public boolean containerTypeOf(final EObject obj, final EClass c) {
    boolean _xifexpression = false;
    EClass _eClass = obj.eClass();
    boolean _equals = Objects.equal(_eClass, c);
    if (_equals) {
      _xifexpression = true;
    } else {
      boolean _xifexpression_1 = false;
      EObject _eContainer = obj.eContainer();
      EClass _eClass_1 = _eContainer.eClass();
      boolean _equals_1 = Objects.equal(_eClass_1, XdocPackage.Literals.XDOC_FILE);
      if (_equals_1) {
        _xifexpression_1 = false;
      } else {
        EObject _eContainer_1 = obj.eContainer();
        _xifexpression_1 = this.containerTypeOf(_eContainer_1, c);
      }
      _xifexpression = _xifexpression_1;
    }
    return _xifexpression;
  }
 
  public CharSequence langSpec(final LangDef lang) {
    StringConcatenation _builder = new StringConcatenation();
    {
      boolean _notEquals = (!Objects.equal(lang, null));
      if (_notEquals) {
        _builder.append("[language=");
        String _name = lang.getName();
        _builder.append(_name, "");
        _builder.append("]");
      }
    }
    return _builder;
  }
 
  protected CharSequence _genCode(final Code code) {
    String _contents = code.getContents();
    String _unescapeXdocChars = this.utils.unescapeXdocChars(_contents);
    return this.utils.prepareListingsString(_unescapeXdocChars);
  }
 
  protected CharSequence _genCode(final MarkupInCode mic) {
    StringConcatenation _builder = new StringConcatenation();
    String _lstEscapeToTex = LatexUtils.lstEscapeToTex();
    _builder.append(_lstEscapeToTex, "");
    CharSequence _genText = this.genText(mic);
    _builder.append(_genText, "");
    String _lstEscapeToTex_1 = LatexUtils.lstEscapeToTex();
    _builder.append(_lstEscapeToTex_1, "");
    return _builder;
  }
 
  protected CharSequence _genCode(final Object o) {
    StringConcatenation _builder = new StringConcatenation();
    return _builder;
  }
 
  public CharSequence genColumns(final List<TableData> tabData) {
    CharSequence _xblockexpression = null;
    {
      XFloat _xFloat = new XFloat(1);
      int _size = tabData.size();
      XFloat _xFloat_1 = new XFloat(_size);
      final XFloat colFract = _xFloat.operator_divide(_xFloat_1);
      StringConcatenation _builder = new StringConcatenation();
      {
        boolean _isEmpty = tabData.isEmpty();
        boolean _not = (!_isEmpty);
        if (_not) {
          _builder.append("|");
          {
            for(final TableData td : tabData) {
              _builder.append("p{");
              _builder.append(colFract, "");
              _builder.append("\\XdocTEffectiveWidth}|");
            }
          }
        }
      }
      _xblockexpression = _builder;
    }
    return _xblockexpression;
  }
 
  public String calcStyle(final ImageRef ref) {
    try {
      String _xblockexpression = null;
      {
        Resource _eResource = ref.eResource();
        final URI uri = _eResource.getURI();
        URI _trimSegments = uri.trimSegments(1);
        String _string = _trimSegments.toString();
        String _plus = (_string + "/");
        String _path = ref.getPath();
        String _plus_1 = (_plus + _path);
        final URI inPath = URI.createURI(_plus_1);
        String _fileString = inPath.toFileString();
        File _file = new File(_fileString);
        final ImageInputStream img = ImageIO.createImageInputStream(_file);
        final Iterator<ImageReader> imageReaders = ImageIO.getImageReaders(img);
        final ImageReader ir = imageReaders.next();
        ir.setInput(img);
        final IIOMetadata imageMetadata = ir.getImageMetadata(0);
        final Node n = imageMetadata.getAsTree("javax_imageio_1.0");
        float _parseFloat = Float.parseFloat("2.835");
        XFloat ppmm = new XFloat(Float.valueOf(_parseFloat));
        Node cn = n.getFirstChild();
        while ((!Objects.equal(cn, null))) {
          {
            String _nodeName = cn.getNodeName();
            boolean _equals = Objects.equal(_nodeName, "Dimension");
            if (_equals) {
              Node ccn = cn.getFirstChild();
              while ((!Objects.equal(ccn, null))) {
                {
                  String _nodeName_1 = ccn.getNodeName();
                  boolean _equals_1 = _nodeName_1.equals("HorizontalPixelSize");
                  if (_equals_1) {
                    NamedNodeMap _attributes = ccn.getAttributes();
                    Node _item = _attributes.item(0);
                    String _nodeValue = _item.getNodeValue();
                    float _parseFloat_1 = Float.parseFloat(_nodeValue);
                    XFloat _xFloat = new XFloat(Float.valueOf(_parseFloat_1));
                    XFloat _divide = XFloatExtensions.operator_divide(Integer.valueOf(1), _xFloat);
                    ppmm = _divide;
                  }
                  Node _nextSibling = ccn.getNextSibling();
                  ccn = _nextSibling;
                }
              }
            }
            Node _nextSibling = cn.getNextSibling();
            cn = _nextSibling;
          }
        }
        String _xifexpression = null;
        int _width = ir.getWidth(0);
        XFloat _divide = XFloatExtensions.operator_divide(Integer.valueOf(_width), ppmm);
        Boolean _greaterThan = XFloatExtensions.operator_greaterThan(_divide, Integer.valueOf(140));
        if ((_greaterThan).booleanValue()) {
          _xifexpression = "width=\\textwidth";
        } else {
          _xifexpression = "";
        }
        _xblockexpression = _xifexpression;
      }
      return _xblockexpression;
    } catch (Throwable _e) {
      throw Exceptions.sneakyThrow(_e);
    }
  }
 
  public CharSequence generate(final EObject doc) {
    if (doc instanceof Document) {
      return _generate((Document)doc);
    } else if (doc instanceof AbstractSection) {
      return _generate((AbstractSection)doc);
    } else if (doc instanceof LangDef) {
      return _generate((LangDef)doc);
    } else {
      throw new IllegalArgumentException("Unhandled parameter types: " +
        Arrays.<Object>asList(doc).toString());
    }
  }
 
  public CharSequence genContent(final EObject chap) {
    if (chap instanceof Chapter) {
      return _genContent((Chapter)chap);
    } else if (chap instanceof Part) {
      return _genContent((Part)chap);
    } else if (chap instanceof Section) {
      return _genContent((Section)chap);
    } else if (chap instanceof Section2) {
      return _genContent((Section2)chap);
    } else if (chap instanceof Section3) {
      return _genContent((Section3)chap);
    } else if (chap instanceof Section4) {
      return _genContent((Section4)chap);
    } else if (chap instanceof TextOrMarkup) {
      return _genContent((TextOrMarkup)chap);
    } else {
      throw new IllegalArgumentException("Unhandled parameter types: " +
        Arrays.<Object>asList(chap).toString());
    }
  }
 
  public CharSequence genLabel(final EObject cRef) {
    if (cRef instanceof ChapterRef) {
      return _genLabel((ChapterRef)cRef);
    } else if (cRef instanceof PartRef) {
      return _genLabel((PartRef)cRef);
    } else if (cRef instanceof Section2Ref) {
      return _genLabel((Section2Ref)cRef);
    } else if (cRef instanceof SectionRef) {
      return _genLabel((SectionRef)cRef);
    } else if (cRef instanceof Chapter) {
      return _genLabel((Chapter)cRef);
    } else if (cRef instanceof Part) {
      return _genLabel((Part)cRef);
    } else if (cRef instanceof Section) {
      return _genLabel((Section)cRef);
    } else if (cRef instanceof Section2) {
      return _genLabel((Section2)cRef);
    } else if (cRef instanceof Section3) {
      return _genLabel((Section3)cRef);
    } else if (cRef instanceof Section4) {
      return _genLabel((Section4)cRef);
    } else if (cRef instanceof TextOrMarkup) {
      return _genLabel((TextOrMarkup)cRef);
    } else {
      throw new IllegalArgumentException("Unhandled parameter types: " +
        Arrays.<Object>asList(cRef).toString());
    }
  }
 
  public CharSequence genText(final Object anchor) {
    if (anchor instanceof Anchor) {
      return _genText((Anchor)anchor);
    } else if (anchor instanceof CodeBlock) {
      return _genText((CodeBlock)anchor);
    } else if (anchor instanceof CodeRef) {
      return _genText((CodeRef)anchor);
    } else if (anchor instanceof Emphasize) {
      return _genText((Emphasize)anchor);
    } else if (anchor instanceof ImageRef) {
      return _genText((ImageRef)anchor);
    } else if (anchor instanceof Link) {
      return _genText((Link)anchor);
    } else if (anchor instanceof OrderedList) {
      return _genText((OrderedList)anchor);
    } else if (anchor instanceof Ref) {
      return _genText((Ref)anchor);
    } else if (anchor instanceof Table) {
      return _genText((Table)anchor);
    } else if (anchor instanceof Todo) {
      return _genText((Todo)anchor);
    } else if (anchor instanceof UnorderedList) {
      return _genText((UnorderedList)anchor);
    } else if (anchor instanceof Item) {
      return _genText((Item)anchor);
    } else if (anchor instanceof MarkupInCode) {
      return _genText((MarkupInCode)anchor);
    } else if (anchor instanceof TableData) {
      return _genText((TableData)anchor);
    } else if (anchor instanceof TableRow) {
      return _genText((TableRow)anchor);
    } else if (anchor instanceof TextPart) {
      return _genText((TextPart)anchor);
    } else if (anchor instanceof String) {
      return _genText((String)anchor);
    } else if (anchor instanceof EObject) {
      return _genText((EObject)anchor);
    } else {
      throw new IllegalArgumentException("Unhandled parameter types: " +
        Arrays.<Object>asList(anchor).toString());
    }
  }
 
  public CharSequence genCode(final Object code) {
    if (code instanceof Code) {
      return _genCode((Code)code);
    } else if (code instanceof MarkupInCode) {
      return _genCode((MarkupInCode)code);
    } else if (code != null) {
      return _genCode(code);
    } else {
      throw new IllegalArgumentException("Unhandled parameter types: " +
        Arrays.<Object>asList(code).toString());
    }
  }
}
TOP

Related Classes of org.eclipse.xtext.xdoc.generator.LatexGenerator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.