Ja Java2HTML改造手记(3)
先重点看这个:
public static void main(String args[])
{
……………….
java2html = new Java2HTML();
o01 = new O01(args);
……………….
}
参数又跳转到o01上了.那么我们继续,没办法,逆向工程是需要耐心的.
// Source File Name: O01.java
package com.java2html;
import java.io.File;
import java.io.PrintStream;
import java.util.Vector;
// Referenced classes of package com.java2html:
// BadOptionException, Java2HTML, JavaDoc, O07
public class O01
{
private String O02[];
private boolean O03[];
O01(String as[])
{
O02 = as;
O03 = new boolean[as.length];
}
boolean O04(Java2HTML java2html)
throws BadOptionException
{
if(O02.length == 0 || O06(new String[] {
"help", "h", "?", "/?"
}))
{
System.out.println(O07.O08);
return false;
}
String as[] = O010(new String[] {
"name", "n"
}, false, 1);
if(as.length == 1)
{
java2html.setTitle(as[0]);
}
java2html.setFooter(O06(new String[] {
"nofooter", "nf"
}));
java2html.setFooter(O06(new String[] {
"noheader", "nh"
}));
java2html.setSimple(O06(new String[] {
"simple", "s"
}));
int ai[] = O012(new String[] {
"margin", "m"
}, false, 1);
if(ai.length == 1)
{
java2html.setMarginSize(ai[0]);
}
int ai1[] = O012(new String[] {
"tabs", "t"
}, false, 1);
if(ai1.length == 1)
{
java2html.setTabSize(ai1[0]);
}
String as1[] = O010(new String[] {
"destination", "d"
}, false, 1);
if(as1.length == 1)
{
java2html.setDestination(as1[0]);
}
String as2[] = O010(new String[] {
"javasource", "js"
}, false, -1);
if(as2.length > 0)
{
java2html.setJavaDirectorySource(as2);
}
JavaDoc ajavadoc[] = O017(new String[] {
"javadoc", "jd"
});
if(ajavadoc.length > 0)
{
java2html.setJavaDoc(ajavadoc);
}
O018();
return true;
}
private boolean O06(String as[])
throws BadOptionException
{
int i = 0;
int j = 0;
boolean flag = false;
for(; i < O02.length; i++)
{
for(int k = 0; k < as.length; k++)
{
if(!O02[i].equalsIgnoreCase("-" + as[k]))
{
continue;
}
O03[i] = true;
if(j >= 1)
{
throw new BadOptionException(as[0] + " should only be set once");
}
j++;
flag = true;
break;
}
}
return flag;
}
private String[] O010(String as[], boolean flag, int i)
throws BadOptionException
{
int j = 0;
int k = 0;
Vector vector = new Vector();
for(; j < O02.length; j++)
{
for(int l = 0; l < as.length; l++)
{
if(!O02[j].equalsIgnoreCase("-" + as[l]))
{
continue;
}
O03[j] = true;
j++;
if(k == i)
{
throw new BadOptionException(as[0] + " should only be set " + i + " time(s)");
}
if(j >= O02.length)
{
throw new BadOptionException("Value not set for " + as[0]);
}
O03[j] = true;
vector.addElement(O02[j]);
k++;
break;
}
}
if(flag && k == 0)
{
throw new BadOptionException(as[0] + " needs to be set");
} else
{
return O026(vector);
}
}
private int[] O012(String as[], boolean flag, int i)
throws BadOptionException
{
int j = 0;
int k = 0;
Vector vector = new Vector();
for(; j < O02.length; j++)
{
for(int l = 0; l < as.length; l++)
{
if(!O02[j].equalsIgnoreCase("-" + as[l]))
{
continue;
}
O03[j] = true;
j++;
if(k == i)
{
throw new BadOptionException(as[0] + " should only be set " + i + " time(s)");
}
if(j >= O02.length)
{
throw new BadOptionException("Value not set for " + as[0]);
}
O03[j] = true;
vector.addElement(O02[j]);
k++;
break;
}
}
if(flag && k == 0)
{
throw new BadOptionException(as[0] + " needs to be set");
}
int ai[] = null;
try
{
ai = O028(vector);
}
catch(Exception _ex)
{
throw new BadOptionException(as[0] + " must be a number");
}
return ai;
}
public JavaDoc[] O017(String as[])
throws BadOptionException
{
int i = 0;
int j = 0;
Vector vector = new Vector();
for(; i < O02.length; i++)
{
for(int k = 0; k < as.length; k++)
{
if(!O02[i].equalsIgnoreCase("-" + as[k]))
{
continue;
}
O03[i] = true;
if(++i >= O02.length)
{
throw new BadOptionException("Value not set for " + as[0]);
}
O03[i] = true;
JavaDoc javadoc = null;
File file = new File(O02[i]);
String s = null;
if(i + 1 < O02.length && !O02[i + 1].startsWith("-"))
{
i++;
if(!O02[i].startsWith("http://"))
{
throw new BadOptionException("Second Parameter of -jd/-javadoc option must start with 'http://'");
}
s = O02[i];
O03[i] = true;
}
if(s != null)
{
javadoc = new JavaDoc(file, s);
} else
{
javadoc = new JavaDoc(file);
}
vector.addElement(javadoc);
j++;
break;
}
}
JavaDoc ajavadoc[] = new JavaDoc[vector.size()];
for(int l = 0; l < vector.size(); l++)
{
ajavadoc[l] = (JavaDoc)vector.elementAt(l);
}
return ajavadoc;
}
private String[] O026(Vector vector)
{
String as[] = new String[vector.size()];
for(int i = 0; i < vector.size(); i++)
{
as[i] = (String)vector.elementAt(i);
}
return as;
}
private int[] O028(Vector vector)
{
int ai[] = new int[vector.size()];
for(int i = 0; i < vector.size(); i++)
{
ai[i] = Integer.parseInt((String)vector.elementAt(i));
}
return ai;
}
public void O018()
throws BadOptionException
{
for(int i = 0; i < O03.length; i++)
{
if(!O03[i])
{
throw new BadOptionException("Unkown Argument :" + O02[i]);
}
}
}
}
找到这里:
O01(String as[])
{
O02 = as;
O03 = new boolean[as.length];
}
看来这里没有作什么,那么我们回到java2html.java文件继续往下看:
public static void main(String args[])
{
…………………..
java2html = new Java2HTML();
o01 = new O01(args);
//这里就是了
if(!o01.O04(java2html))
{
return;
}
………………….
}
原来调用了o01.O04方法.看看:
boolean O04(Java2HTML java2html)
throws BadOptionException
{
if(O02.length == 0 || O06(new String[] {
"help", "h", "?", "/?"
}))
{
System.out.println(O07.O08);
return false;
}
String as[] = O010(new String[] {
"name", "n"
}, false, 1);
if(as.length == 1)
{
java2html.setTitle(as[0]);
}
java2html.setFooter(O06(new String[] {
"nofooter", "nf"
}));
java2html.setFooter(O06(new String[] {
"noheader", "nh"
}));
java2html.setSimple(O06(new String[] {
"simple", "s"
}));
int ai[] = O012(new String[] {
"margin", "m"
}, false, 1);
if(ai.length == 1)
{
java2html.setMarginSize(ai[0]);
}
int ai1[] = O012(new String[] {
"tabs", "t"
}, false, 1);
if(ai1.length == 1)
{
java2html.setTabSize(ai1[0]);
}
String as1[] = O010(new String[] {
"destination", "d"
}, false, 1);
if(as1.length == 1)
{
java2html.setDestination(as1[0]);
}
String as2[] = O010(new String[] {
"javasource", "js"
}, false, -1);
if(as2.length > 0)
{
java2html.setJavaDirectorySource(as2);
}
JavaDoc ajavadoc[] = O017(new String[] {
"javadoc", "jd"
});
if(ajavadoc.length > 0)
{
java2html.setJavaDoc(ajavadoc);
}
O018();
return true;
}
欲知后事如何,且听下回分解.