⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clargsparser.java

📁 Java有关XML编程需要用到axis 的源代码 把里面bin下的包导入相应的Java工程 进行使用
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        }        stringLength = args[ argIndex ].length();        //ch = peekAtChar();        while( true )        {            ch = peekAtChar();            //System.out.println( "Pre State=" + m_state );            //System.out.println( "Pre Char=" + (char)ch + "/" + (int)ch );            if( argIndex >= args.length )            {                break;            }            if( null != m_control && m_control.isFinished( m_lastOptionId ) )            {                //this may need mangling due to peeks                m_unparsedArgs = subArray( args, argIndex, stringIndex );                return;            }            //System.out.println( "State=" + m_state );            //System.out.println( "Char=" + (char)ch + "/" + (int)ch );            if( STATE_OPTION_MODE == m_state )            {                //if get to an arg barrier then return to normal mode                //else continue accumulating options                if( 0 == ch )                {                    getChar(); //strip the null                    m_state = STATE_NORMAL;                }                else                {                    parseShortOption();                }            }            else if( STATE_NORMAL == m_state )            {                parseNormal();            }            else if( STATE_NO_OPTIONS == m_state )            {                //should never get to here when stringIndex != 0                addOption( new CLOption( args[ argIndex++ ] ) );            }            else if( STATE_OPTIONAL_ARG == m_state && '-' == ch )            {                m_state = STATE_NORMAL;                addOption( m_option );            }            else            {                parseArguments();            }        }        if( m_option != null )        {            if( STATE_OPTIONAL_ARG == m_state )            {                m_options.addElement( m_option );            }            else if( STATE_REQUIRE_ARG == m_state )            {                final CLOptionDescriptor descriptor = getDescriptorFor( m_option.getId() );                final String message =                    "Missing argument to option " + getOptionDescription( descriptor );                throw new ParseException( message, 0 );            }            else if( STATE_REQUIRE_2ARGS == m_state )            {                if( 1 == m_option.getArgumentCount() )                {                    m_option.addArgument( "" );                    m_options.addElement( m_option );                }                else                {                    final CLOptionDescriptor descriptor = getDescriptorFor( m_option.getId() );                    final String message =                        "Missing argument to option " + getOptionDescription( descriptor );                    throw new ParseException( message, 0 );                }            }            else            {                throw new ParseException( "IllegalState " + m_state + ": " + m_option, 0 );            }        }    }    private final String getOptionDescription( final CLOptionDescriptor descriptor )    {        if( isLong )        {            return "--" + descriptor.getName();        }        else        {            return "-" + (char)descriptor.getId();        }    }    private final char peekAtChar()    {        if( INVALID == m_lastChar )        {            m_lastChar = readChar();        }        return (char)m_lastChar;    }    private final char getChar()    {        if( INVALID != m_lastChar )        {            final char result = (char)m_lastChar;            m_lastChar = INVALID;            return result;        }        else        {            return readChar();        }    }    private final char readChar()    {        if( stringIndex >= stringLength )        {            argIndex++;            stringIndex = 0;            if( argIndex < args.length )            {                stringLength = args[ argIndex ].length();            }            else            {                stringLength = 0;            }            return 0;        }        if( argIndex >= args.length )            return 0;        return args[ argIndex ].charAt( stringIndex++ );    }    private final Token nextToken( final char[] separators )    {        ch = getChar();        if( isSeparator( ch, separators ) )        {            ch = getChar();            return new Token( TOKEN_SEPARATOR, null );        }        final StringBuffer sb = new StringBuffer();        do        {            sb.append( ch );            ch = getChar();        }        while( !isSeparator( ch, separators ) );        return new Token( TOKEN_STRING, sb.toString() );    }    private final boolean isSeparator( final char ch, final char[] separators )    {        for( int i = 0; i < separators.length; i++ )        {            if( ch == separators[ i ] )            {                return true;            }        }        return false;    }    private final void addOption( final CLOption option )    {        m_options.addElement( option );        m_lastOptionId = option.getId();        m_option = null;    }    private final void parseOption( final CLOptionDescriptor descriptor,                              final String optionString )        throws ParseException    {        if( null == descriptor )        {            throw new ParseException( "Unknown option " + optionString, 0 );        }        m_state = getStateFor( descriptor );        m_option = new CLOption( descriptor.getId() );        if( STATE_NORMAL == m_state )        {            addOption( m_option );        }    }    private final void parseShortOption()        throws ParseException    {        ch = getChar();        final CLOptionDescriptor descriptor = getDescriptorFor( ch );        isLong = false;        parseOption( descriptor, "-" + ch );        if( STATE_NORMAL == m_state )        {            m_state = STATE_OPTION_MODE;        }    }    private final void parseArguments()        throws ParseException    {        if( STATE_REQUIRE_ARG == m_state )        {            if( '=' == ch || 0 == ch )            {                getChar();            }            final Token token = nextToken( NULL_SEPARATORS );            m_option.addArgument( token.getValue() );            addOption( m_option );            m_state = STATE_NORMAL;        }        else if( STATE_OPTIONAL_ARG == m_state )        {            if( '-' == ch || 0 == ch )            {                getChar(); //consume stray character                addOption( m_option );                m_state = STATE_NORMAL;                return;            }            if( '=' == ch )            {                getChar();            }            final Token token = nextToken( NULL_SEPARATORS );            m_option.addArgument( token.getValue() );            addOption( m_option );            m_state = STATE_NORMAL;        }        else if( STATE_REQUIRE_2ARGS == m_state )        {            if( 0 == m_option.getArgumentCount() )            {                final Token token = nextToken( ARG_SEPARATORS );                if( TOKEN_SEPARATOR == token.getType() )                {                    final CLOptionDescriptor descriptor = getDescriptorFor( m_option.getId() );                    final String message =                        "Unable to parse first argument for option " +                        getOptionDescription( descriptor );                    throw new ParseException( message, 0 );                }                else                {                    m_option.addArgument( token.getValue() );                }            }            else //2nd argument            {                final StringBuffer sb = new StringBuffer();                ch = getChar();                if( '-' == ch )                {                    m_lastChar = ch;                }                while( !isSeparator( ch, ARG2_SEPARATORS ) )                {                    sb.append( ch );                    ch = getChar();                }                final String argument = sb.toString();                //System.out.println( "Arguement:" + argument );                m_option.addArgument( argument );                addOption( m_option );                m_option = null;                m_state = STATE_NORMAL;            }        }    }    /**     * Parse Options from Normal mode.     */    private final void parseNormal()        throws ParseException    {        if( '-' != ch )        {            //Parse the arguments that are not options            final String argument = nextToken( NULL_SEPARATORS ).getValue();            addOption( new CLOption( argument ) );            m_state = STATE_NORMAL;        }        else        {            getChar(); // strip the -            if( 0 == peekAtChar() )            {                throw new ParseException( "Malformed option -", 0 );            }            else            {                ch = peekAtChar();                //if it is a short option then parse it else ...                if( '-' != ch )                {                    parseShortOption();                }                else                {                    getChar(); // strip the -                    //-- sequence .. it can either mean a change of state                    //to STATE_NO_OPTIONS or else a long option                    if( 0 == peekAtChar() )                    {                        getChar();                        m_state = STATE_NO_OPTIONS;                    }                    else                    {                        //its a long option                        final String optionName = nextToken( ARG_SEPARATORS ).getValue();                        final CLOptionDescriptor descriptor = getDescriptorFor( optionName );                        isLong = true;                        parseOption( descriptor, "--" + optionName );                    }                }            }        }    }    /**     * Build the m_optionIndex lookup map for the parsed options.     */    private final void buildOptionIndex()    {        m_optionIndex = new Hashtable( m_options.size() * 2 );        for( int i = 0; i < m_options.size(); i++ )        {            final CLOption option = (CLOption)m_options.get( i );            final CLOptionDescriptor optionDescriptor =                getDescriptorFor( option.getId() );            m_optionIndex.put( new Integer( option.getId() ), option );            if( null != optionDescriptor )            {                m_optionIndex.put( optionDescriptor.getName(), option );            }        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -