Package br.com.caelum.tubaina.parser.latex

Source Code of br.com.caelum.tubaina.parser.latex.LatexGenerator

package br.com.caelum.tubaina.parser.latex;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.PrintStream;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;

import br.com.caelum.tubaina.Book;
import br.com.caelum.tubaina.Chapter;
import br.com.caelum.tubaina.TubainaException;
import br.com.caelum.tubaina.parser.Parser;
import br.com.caelum.tubaina.resources.AnswerResource;
import br.com.caelum.tubaina.resources.LatexResourceManipulator;
import br.com.caelum.tubaina.resources.Resource;
import br.com.caelum.tubaina.resources.ResourceManipulator;
import freemarker.ext.beans.BeansWrapper;
import freemarker.template.Configuration;

public class LatexGenerator {

  private final Parser parser;

  private static final Logger LOG = Logger.getLogger(LatexGenerator.class);

  private final File templateDir;

  private final boolean noAnswer;

  public LatexGenerator(Parser parser, File templateDir, boolean noAnswer) {
    this.parser = parser;
    this.templateDir = templateDir;
    this.noAnswer = noAnswer;
  }

  public void generate(Book book, File directory, String outputFileName) throws IOException {
    Configuration cfg = new Configuration();
    cfg.setDirectoryForTemplateLoading(templateDir);
    cfg.setObjectWrapper(new BeansWrapper());
    cfg.setDefaultEncoding("UTF-8");

    StringBuffer latex = new BookToLatex(parser).generateLatex(book, cfg);

    // print the latex document to an archive
    File fileBook = new File(directory, outputFileName);
    PrintStream stream = new PrintStream(fileBook, "UTF-8");
    stream.append(latex);
    stream.close();

    copyResources(directory, book);
  }

  private void copyResources(File directory, Book b) throws IOException {
    // Dependencies (styles, logo)
    FileUtils.copyFileToDirectory(new File(templateDir, "latex/tubaina.sty"), directory);
    FileUtils.copyFileToDirectory(new File(templateDir, "latex/xcolor.sty"), directory);
    File[] images = new File(templateDir, "latex").listFiles(new FilenameFilter() {
      public boolean accept(File dir, String name) {
        return name.contains(".png");
      }
    });
    for (File image : images) {
      FileUtils.copyFileToDirectory(image, directory);     
    }

    boolean resourceCopyFailed = false;
   
    //Creating Answer Booklet
    File answerFile = new File(directory, "answer.tex");
    if (answerFile.exists()){
      LOG.warn("Answer File already exists. Deleting it");
      answerFile.delete();
    }
    if (!noAnswer && hasAnswer(b.getChapters())) {
      PrintStream stream = new PrintStream(new FileOutputStream(answerFile), true, "UTF-8");
      stream.println("\\chapter{\\answerBooklet}");
      stream.close();
    }
    for (Chapter c : b.getChapters()) {
     
      ResourceManipulator manipulator = new LatexResourceManipulator(directory, answerFile, parser, noAnswer);
     
      for (Resource r : c.getResources()) {

        try {
          r.copyTo(manipulator);
        } catch (TubainaException e) {
          resourceCopyFailed = true;
        }

      }
    }
    if (resourceCopyFailed)
      throw new TubainaException("Couldn't copy some resources. See the Logger for further information");
  }

  private boolean hasAnswer(List<Chapter> chapters) {
    for (Chapter chapter : chapters) {
      for (Resource resource : chapter.getResources()) {
        if (resource instanceof AnswerResource) {
          return true;
        }
      }
    }
    return false;
  }
}
TOP

Related Classes of br.com.caelum.tubaina.parser.latex.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.