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 }
114 }
120 void doIt(String inName)
121 {
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 }
135 in.close();
136 out.close();
137 }
138 catch (Exception e)
139 {
140 }
142 }
145 public ImplGen()
146 {
147 }
150 public static void main(String argv[])
151 {
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]);
160 }
180 }