Code

moving trunk for module inkscape
[inkscape.git] / src / dom / ImplGen.java
3 import java.io.*;
4 import java.util.StringTokenizer;
8 public class ImplGen
9 {
10 BufferedWriter out;
11 String         className;
12 String         defaultReturn;
14 void trace(String msg)
15 {
16     System.out.println(msg);
17 }
19 void err(String msg)
20 {
21     System.out.print("error:");
22     System.out.println(msg);
23 }
25 void p(String s)
26 {
27     try
28         {
29         out.write(s);
30         }
31     catch (IOException e)
32         {
33         }
34 }
36 void sp(int count)
37 {
38     for (int i=0 ; i<count ; i++)
39         p(" ");
40 }
44 void process(String s)
45 {
47     if (s.startsWith("## "))
48         {
49         className = s.substring(3);
50         }
52     if (s.startsWith("DOMString"))
53         {
54         defaultReturn = "DOMString(\"\")";
55         }
56     else if (s.startsWith("bool"))
57         {
58         defaultReturn = "false";
59         }
60     else if (s.startsWith("void"))
61         {
62         defaultReturn = "";
63         }
64     else if (s.startsWith("unsigned long") || s.startsWith("long"))
65         {
66         defaultReturn = "0L";
67         }
68     else if (s.startsWith("unsigned short") || s.startsWith("short"))
69         {
70         defaultReturn = "0";
71         }
72     else if (s.startsWith("float") || s.startsWith("double"))
73         {
74         defaultReturn = "0.0";
75         }
76     else if (s.length()>0 && Character.isLetter(s.charAt(0)))
77         {
78         defaultReturn = "NULL";
79         }
80     else if (s.startsWith("~"))
81         {
82         defaultReturn = "";
83         }
85     int pos = s.indexOf("(");
86     if (!s.startsWith("~") && pos > 0 &&
87             Character.isLetterOrDigit(s.charAt(pos-1)))
88         {
89         while (Character.isLetterOrDigit(s.charAt(pos-1)))
90             pos--;
91         String news = s.substring(0, pos) +
92                         className + "::" +
93                       s.substring(pos);
94         s = news;
95         }
97     if (s.startsWith("~"))
98         {
99         p(className); p("::");
100         p(s); p("\n");
101         }
102     else if (s.startsWith("}") && defaultReturn.length()>0)
103         {
104         p("    return "); p(defaultReturn); p(";"); p("\n");
105         p(s); p("\n");
106         }
107     else
108         {
109         p(s); p("\n");
110         }
120 void doIt(String inName)
122     String cppName = inName + ".cpp";
123     try
124         {
125         BufferedReader in = new BufferedReader(new FileReader(inName));
126         out = new BufferedWriter(new FileWriter(cppName));
127         while (true)
128             {
129             String s = in.readLine();
130             if (s == null)
131                 break;
132             process(s);
133             }
134         
135         in.close();
136         out.close();
137         }
138     catch (Exception e)
139         {
140         }
145 public ImplGen()
150 public static void main(String argv[])
152     if (argv.length != 1)
153         {
154         System.out.println("usage: ImplGen <source .h file>");
155         return;
156         }
157     ImplGen ig = new ImplGen();
158     ig.doIt(argv[0]);