Package org.stathissideris.ascii2image.core

Source Code of org.stathissideris.ascii2image.core.CommandLineConverter

/**
* ditaa - Diagrams Through Ascii Art
*
* Copyright (C) 2004-2011 Efstathios Sideris
*
* ditaa is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* ditaa is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with ditaa.  If not, see <http://www.gnu.org/licenses/>.
*  
*/
package org.stathissideris.ascii2image.core;

import java.awt.image.RenderedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

import javax.imageio.ImageIO;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.PosixParser;
import org.stathissideris.ascii2image.graphics.BitmapRenderer;
import org.stathissideris.ascii2image.graphics.Diagram;
import org.stathissideris.ascii2image.text.TextGrid;

/**
*
* @author Efstathios Sideris
*/
public class CommandLineConverter {
   
  private static String notice = "ditaa version 0.9, Copyright (C) 2004--2009  Efstathios (Stathis) Sideris";
 
  private static String[] markupModeAllowedValues = {"use", "ignore", "render"};
 
  public static void main(String[] args){
   
    long startTime = System.currentTimeMillis();
   
    Options cmdLnOptions = new Options();
    cmdLnOptions.addOption(
        OptionBuilder.withLongOpt("help")
        .withDescription( "Prints usage help." )
        .create() );
    cmdLnOptions.addOption("v", "verbose", false, "Makes ditaa more verbose.");
    cmdLnOptions.addOption("o", "overwrite", false, "If the filename of the destination image already exists, an alternative name is chosen. If the overwrite option is selected, the image file is instead overwriten.");
    cmdLnOptions.addOption("S", "no-shadows", false, "Turns off the drop-shadow effect.");
    cmdLnOptions.addOption("A", "no-antialias", false, "Turns anti-aliasing off.");
    cmdLnOptions.addOption("W", "fixed-slope", false, "Makes sides of parallelograms and trapezoids fixed slope instead of fixed width.");
    cmdLnOptions.addOption("d", "debug", false, "Renders the debug grid over the resulting image.");
    cmdLnOptions.addOption("r", "round-corners", false, "Causes all corners to be rendered as round corners.");
    cmdLnOptions.addOption("E", "no-separation", false, "Prevents the separation of common edges of shapes.");
    cmdLnOptions.addOption("h", "html", false, "In this case the input is an HTML file. The contents of the <pre class=\"textdiagram\"> tags are rendered as diagrams and saved in the images directory and a new HTML file is produced with the appropriate <img> tags.");
    cmdLnOptions.addOption("T", "transparent", false, "Causes the diagram to be rendered on a transparent background. Overrides --background.");
   
    cmdLnOptions.addOption(
        OptionBuilder.withLongOpt("encoding")
        .withDescription("The encoding of the input file.")
        .hasArg()
        .withArgName("ENCODING")
        .create('e')
        );

    cmdLnOptions.addOption(
        OptionBuilder.withLongOpt("scale")
        .withDescription("A natural number that determines the size of the rendered image. The units are fractions of the default size (2.5 renders 1.5 times bigger than the default).")
        .hasArg()
        .withArgName("SCALE")
        .create('s')
        );

    cmdLnOptions.addOption(
        OptionBuilder.withLongOpt("tabs")
        .withDescription("Tabs are normally interpreted as 8 spaces but it is possible to change that using this option. It is not advisable to use tabs in your diagrams.")
        .hasArg()
        .withArgName("TABS")
        .create('t')
        );
   
    cmdLnOptions.addOption(
        OptionBuilder.withLongOpt("background")
        .withDescription("The background colour of the image. The format should be a six-digit hexadecimal number (as in HTML, FF0000 for red). Pass an eight-digit hex to define transparency. This is overridden by --transparent.")
        .hasArg()
        .withArgName("BACKGROUND")
        .create('b')
        );
   
//TODO: uncomment this for next version:
//    cmdLnOptions.addOption(
//        OptionBuilder.withLongOpt("config")
//        .withDescription( "The shape configuration file." )
//        .hasArg()
//        .withArgName("CONFIG_FILE")
//        .create('c') );
   
    CommandLine cmdLine = null;
   
   
   
    ///// parse command line options
    try {
      // parse the command line arguments
      CommandLineParser parser = new PosixParser();
     
      cmdLine = parser.parse(cmdLnOptions, args);
           
      // validate that block-size has been set
      if( cmdLine.hasOption( "block-size" ) ) {
        // print the value of block-size
        System.out.println( cmdLine.getOptionValue( "block-size" ) );
      }
     
    } catch (org.apache.commons.cli.ParseException e) {
      System.err.println(e.getMessage());
      new HelpFormatter().printHelp("java -jar ditaa.jar <INPFILE> [OUTFILE]", cmdLnOptions, true);
      System.exit(2);
    }
   
   
    if(cmdLine.hasOption("help") || args.length == 0 ){
      new HelpFormatter().printHelp("java -jar ditaa.jar <INPFILE> [OUTFILE]", cmdLnOptions, true);
      System.exit(0);     
    }
   
    ConversionOptions options = null;
    try {
      options = new ConversionOptions(cmdLine);
    } catch (UnsupportedEncodingException e2) {
      System.err.println("Error: " + e2.getMessage());
      System.exit(2);
    } catch (IllegalArgumentException e2) {
      System.err.println("Error: " + e2.getMessage());
      new HelpFormatter().printHelp("java -jar ditaa.jar <INPFILE> [OUTFILE]", cmdLnOptions, true);
      System.exit(2);
    }
   
    args = cmdLine.getArgs();
   
    if(args.length == 0) {
      System.err.println("Error: Please provide the input file filename");
      new HelpFormatter().printHelp("java -jar ditaa.jar <inpfile> [outfile]", cmdLnOptions, true);
      System.exit(2);
    }
   
    if(cmdLine.hasOption("html")){
      /////// print options before running
      printRunInfo(cmdLine);
      String filename = args[0];
     
      boolean overwrite = false;
      if(options.processingOptions.overwriteFiles()) overwrite = true;
     
      String toFilename;
      if(args.length == 1){
        toFilename = FileUtils.makeTargetPathname(filename, "html", "_processed", true);
      } else {
        toFilename = args[1];
      }
      File target = new File(toFilename);
      if(!overwrite && target.exists()) {
        System.out.println("Error: File "+toFilename+" exists. If you would like to overwrite it, please use the --overwrite option.");
        System.exit(0);
      }
     
      new HTMLConverter().convertHTMLFile(filename, toFilename, "ditaa_diagram", "images", options);
      System.exit(0);
     
    } else { //simple mode
     
      TextGrid grid = new TextGrid();
      if(options.processingOptions.getCustomShapes() != null){
        grid.addToMarkupTags(options.processingOptions.getCustomShapes().keySet());
      }

      // "-" means stdin / stdout
      String fromFilename = args[0];
      boolean stdIn = "-".equals(fromFilename);

      String toFilename;
      boolean stdOut;

      boolean overwrite = false;
      if(options.processingOptions.overwriteFiles()) overwrite = true;
     
      if(args.length == 1){
        if (stdIn) { // if using stdin and no output specified, use stdout
          stdOut = true;
          toFilename = "-";
        } else {
          toFilename = FileUtils.makeTargetPathname(fromFilename, "png", overwrite);
          stdOut = false;
        }
      } else {
        toFilename = args[1];
        stdOut = "-".equals(toFilename);
      }

      if (!stdOut) {
        /////// print options before running
        printRunInfo(cmdLine);
        System.out.println("Reading "+ (stdIn ? "standard input" : "file: " + fromFilename));
      }

      try {
        if(!grid.loadFrom(fromFilename, options.processingOptions)){
          System.err.println("Cannot open file "+fromFilename+" for reading");
        }
      } catch (UnsupportedEncodingException e1){
        System.err.println("Error: "+e1.getMessage());
        System.exit(1);
      } catch (FileNotFoundException e1) {
        System.err.println("Error: File "+fromFilename+" does not exist");
        System.exit(1);
      } catch (IOException e1) {
        System.err.println("Error: Cannot open file "+fromFilename+" for reading");
        System.exit(1);
      }
     
      if(options.processingOptions.printDebugOutput()){
        if (!stdOut) System.out.println("Using grid:");
        grid.printDebug();
      }
     
      Diagram diagram = new Diagram(grid, options);
      if (!stdOut) System.out.println("Rendering to file: "+toFilename);
     
     
      RenderedImage image = new BitmapRenderer().renderToImage(diagram, options.renderingOptions);
     
      try {
        OutputStream os = stdOut ? System.out : new FileOutputStream(toFilename);
        ImageIO.write(image, "png", os);
      } catch (IOException e) {
        //e.printStackTrace();
        System.err.println("Error: Cannot write to file "+toFilename);
        System.exit(1);
      }
     
      //BitmapRenderer.renderToPNG(diagram, toFilename, options.renderingOptions);
     
      long endTime = System.currentTimeMillis();
      long totalTime  = (endTime - startTime) / 1000;
      if (!stdOut) System.out.println("Done in "+totalTime+"sec");
     
//      try {
//      Thread.sleep(Long.MAX_VALUE);
//      } catch (InterruptedException e) {
//      e.printStackTrace();
//      }
     
    }
  } 

  private static void printRunInfo(CommandLine cmdLine) {
    System.out.println("\n"+notice+"\n");
   
    System.out.println("Running with options:");
    Option[] opts = cmdLine.getOptions();
    for (Option option : opts) {
      if(option.hasArgs()){
        for(String value:option.getValues()){
          System.out.println(option.getLongOpt()+" = "+value);
        }
      } else if(option.hasArg()){
        System.out.println(option.getLongOpt()+" = "+option.getValue());
      } else {
        System.out.println(option.getLongOpt());
      }
    }
  }
}
TOP

Related Classes of org.stathissideris.ascii2image.core.CommandLineConverter

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.