예제 #1
0
  public static void main(String[] args) throws Exception {
    CommandLineOption op = new CommandLineOption(args);
    CommandLineOption.Option[] ops = op.getOptions();

    String fn = null, output = null, baseDir = ".", inits = null, setting = null;
    for (CommandLineOption.Option o : ops) {
      if (o.name == null) {
        fn = o.value;
      } else {
        switch (o.name) {
          case "-o":
          case "--output":
            output = o.value;
            break;
          case "-d":
          case "--directory":
            baseDir = o.value;
            break;
          case "-s":
          case "--setting":
            setting = o.value;
            break;
          case "-i":
          case "--init":
            inits = o.value;
            break;
          case "-h":
          case "--help":
            System.out.println("[-OPTIONS] -s settingfile1[,settigfile2] input file name");
            System.out.println("    -d,--direcoty:作業ディレクトリを指定します。指定しない場合は弦座のディレクトリになります。");
            System.out.println("    -i,--init    :ファイルを読み込む前に実行するマクロの初期化ファイルです。必須オプションです。");
            System.out.println("    -o,--output  :出力ファイル名を指定してください");
            System.out.println("    -s,--setting :RootDocumentをHTMLDOMに変換する為の設定ファイルです。必須オプションです。");
            System.out.println("    -h,--help    :このヘルプを出力します");
            return;
        }
      }
    }

    if (fn == null) {
      System.out.println("開発のテストモードで起動します。");
      testMain();
      return;
      //            System.out.println("入力ファイルを指定してください");
      //            return;
    }
    if (inits == null) {
      System.err.println("マクロ初期化ファイルが指定されていません。");
      return;
    }

    if (setting == null) {
      System.err.println("設定ファイルが指定されていません。");
      return;
    }

    Path base = Paths.get(baseDir).toAbsolutePath();
    Path file = base.resolve(fn);
    if (!Files.isReadable(file)) {
      System.err.println("ファイルを読み込むことが出来ません。" + file.toString());
      return;
    }
    LamuriyanEngine engine = new LamuriyanEngine(fn, base);
    String[] s = inits.split(",");
    ArrayList<Path> paths = new ArrayList<>();
    for (String ss : s) {
      paths.add(Paths.get(ss));
    }
    engine.setInitFiles(paths);

    engine.evaluate();

    RootDocument root = engine.getDocument();
    HTMLConverter converter = new HTMLConverter(root, Paths.get(setting));
    converter.convert();

    if (output == null) {
      System.out.println(converter.toHTML());
    } else {
      Path out = Paths.get(output);
      if (!Files.exists(out)) Files.createFile(out);
      FileWriter fw = new FileWriter(out.toFile());
      fw.write(converter.toHTML());
    }
  }
예제 #2
0
  // 主にnodamushiがEclipseから起動してなんやかんややってるときのメソッド。
  private static void testMain() throws Exception {
    String file = "testdataMain.tex";
    LamuriyanEngine e = new LamuriyanEngine(file, "testdata");
    e.setFileSearchDirectories(Paths.get("."));
    e.setInitFiles(Paths.get("testdata\\_init_test.tex"));
    e.evaluate();
    // Lamuriyanの変換完了
    RootDocument root = e.getDocument();
    // コンバート
    HTMLConverter hcon = new HTMLConverter(root, new File("testdata\\convsetting.hcv").toPath());
    hcon.convert();
    List<PageLinkObject> plos = hcon.refs();
    Document document = hcon.getDocument();

    NodeList chapters = document.getElementsByTagName("chapter");
    ArrayList<Element> chapterlist = new ArrayList<>();
    for (int i = chapters.getLength() - 1; i >= 0; i--) {
      Node node = chapters.item(i);
      node.getParentNode().removeChild(node);
      chapterlist.add(0, (Element) node);

      Element el = (Element) node;
      hcon.fixLink(el, "index_chapter" + (i + 1) + ".html");
    }

    NodeList headcontentlist = document.getElementsByTagName("headcontent");

    StringBuilder headcontent = new StringBuilder();
    for (int i = 0, end = headcontentlist.getLength(); i < end; i++) {
      Node node = headcontentlist.item(i);
      HTMLConverter.toStringChildNode(headcontent, node, "", 0, "\n");
      Attr numbera = ((Element) node).getAttributeNode("number");
    }
    StringBuilder contents = new StringBuilder();
    Node documentcontent = document.getElementById("document");

    HTMLConverter.toStringChildNode(contents, documentcontent, "", 0, "\n");

    // テンプレートファイル読み込み
    String templatefile = "testdata\\template.html";
    List<String> template = Files.readAllLines(Paths.get(templatefile), Charset.forName("utf-8"));

    String title = root.getProperty("title");
    if (title == null) {
      title = "";
    }

    ArrayList<String> lis = new ArrayList<>(template.size());

    File write = new File("testdata\\output\\index.html");
    //        System.out.println(e.current);
    PrintStream s = new PrintStream(write, "UTF-8");
    //        s.print(hcon.toHTML());
    for (String str : template) {
      if (str.equals("<!--{PAGETITLE}-->")) {
        //                lis.add(title);
        //                System.out.println(title);
        s.println(title);
      } else if (str.equals("<!--{HEADCONTENT}-->")) {
        //                lis.add(headcontent.toString());
        //                System.out.println(headcontent.toString());
        s.println(headcontent);
      } else if (str.equals("<!--{CONTENTS}-->")) {
        //                lis.add(contents.toString());
        //                System.out.println(contents);
        s.println(contents);
      } else {
        //                lis.add(str);
        s.println(str);
      }
    }
    s.close();
    for (int i = 0, end = chapterlist.size(); i < end; i++) {
      Element node = chapterlist.get(i);
      write = new File("testdata\\output\\index_chapter" + (i + 1) + ".html");
      //        System.out.println(e.current);
      s = new PrintStream(write, "UTF-8");
      contents.setLength(0);
      HTMLConverter.toStringChildNode(contents, node, "", 0, "\n");
      Attr numbera = node.getAttributeNode("number");
      Attr titla = node.getAttributeNode("title");
      //            System.out.println(contents);
      title = numbera.getValue() + "  " + titla.getValue();
      for (String str : template) {
        if (str.equals("<!--{PAGETITLE}-->")) {
          //                    lis.add(title);
          //                    System.out.println(title);
          s.println(title);
        } else if (str.equals("<!--{HEADCONTENT}-->")) {
          //                    lis.add(headcontent.toString());
          //                    System.out.println(headcontent.toString());
          s.println(headcontent);
        } else if (str.equals("<!--{CONTENTS}-->")) {
          //                    lis.add(contents.toString());
          //                    System.out.println(contents);
          s.println(contents);
        } else {
          //                    lis.add(str);
          s.println(str);
        }
      }
      s.close();
    }
  }