Update jflex to 1.8.2
[scilab.git] / scilab / modules / helptools / src / java / org / scilab / modules / helptools / TemplateHandler.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010 - Calixte DENIZET
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16 package org.scilab.modules.helptools;
17
18 import java.io.File;
19 import java.io.FileOutputStream;
20 import java.io.OutputStream;
21 import java.io.IOException;
22 import java.io.OutputStreamWriter;
23 import java.io.BufferedReader;
24 import java.io.InputStreamReader;
25 import java.io.FileInputStream;
26 import java.nio.charset.Charset;
27
28 /**
29  * Class to handle a template
30  * @author Calixte DENIZET
31  */
32 public class TemplateHandler {
33
34     private String[] array;
35     private TemplateFiller filler;
36     private String language;
37
38     public TemplateHandler(TemplateFiller filler, File f, String language) {
39         this.filler = filler;
40         this.language = language;
41         parseFile(f);
42     }
43
44     public void generateFileFromTemplate(String fileName, String id, String contents) {
45         OutputStream out = null;
46         OutputStreamWriter writer = null;
47         try {
48             out = new FileOutputStream(fileName);
49             writer = new OutputStreamWriter(out, Charset.forName("UTF-8"));
50
51             for (int i = 0; i < array.length; i += 2) {
52                 writer.append(array[i]);
53                 String str = "";
54                 if (i + 1 < array.length) {
55                     if (array[i + 1].equals("content")) {
56                         str = contents;
57                     } else if (array[i + 1].equals("top")) {
58                         str = filler.makeTop(id);
59                     } else if (array[i + 1].equals("previous")) {
60                         str = filler.makePrevious(id);
61                     } else if (array[i + 1].equals("next")) {
62                         str = filler.makeNext(id);
63                     } else if (array[i + 1].equals("path")) {
64                         str = filler.makePath(id);
65                     } else if (array[i + 1].equals("title")) {
66                         str = filler.makeTitle(id);
67                     } else if (array[i + 1].equals("subtitle")) {
68                         str = filler.makeSubtitle(id);
69                     } else if (array[i + 1].equals("toclist")) {
70                         str = filler.makeTocList(id);
71                     } else if (array[i + 1].equals("lastmodified")) {
72                         str = filler.makeLastModified(id);
73                     } else if (array[i + 1].equals("generationdate")) {
74                         str = filler.makeGenerationDate(id);
75                     } else if (array[i + 1].equals("version")) {
76                         str = filler.makeVersion(id);;
77                     } else if (array[i + 1].equals("start")) {
78                         str = filler.makeStart(id);
79                     } else if (array[i + 1].startsWith("translate=")) {
80                         String toTranslate = array[i + 1].substring("translate=".length());
81                         str = TemplateLocalization.getLocalized(language, toTranslate);
82                     }
83                     writer.append(str);
84                 }
85             }
86
87             writer.flush();
88             out.flush();
89         } catch (IOException e) {
90             System.err.println(e);
91         } finally {
92             try {
93                 if(out != null) {
94                   out.close();
95                 }
96                 if(writer != null) {
97                   writer.close();
98                 }
99             } catch (IOException e) {
100                 System.err.println(e);
101             }
102         }
103     }
104
105     private void parseFile(File f) {
106         BufferedReader reader = null;
107         try {
108             reader = new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF-8"));
109             String line = null;
110             StringBuilder stringBuilder = new StringBuilder();
111             while ((line = reader.readLine()) != null ) {
112                 stringBuilder.append(line);
113                 stringBuilder.append("\n");
114             }
115
116             array = stringBuilder.toString().split("(<!--<)|(>-->)");
117         } catch (IOException e) {
118             e.printStackTrace();
119         }
120         if (reader != null) {
121            try {
122                reader.close();
123            } catch (IOException e) {
124                e.printStackTrace();
125            }
126         }
127     }
128 }