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; 
    } 
  
欲知后事如何,且听下回分解.  
 
  |