public Map parseArgs()

in jspwiki-main/src/main/java/org/apache/wiki/plugin/DefaultPluginManager.java [304:377]


    public Map< String, String > parseArgs( final String argstring ) throws IOException {
        final Map< String, String > arglist = new HashMap<>();
        //  Protection against funny users.
        if( argstring == null ) {
            return arglist;
        }

        arglist.put( PARAM_CMDLINE, argstring );
        final StringReader in = new StringReader( argstring );
        final StreamTokenizer tok = new StreamTokenizer( in );
        tok.eolIsSignificant( true );

        String param = null;
        String value;
        boolean potentialEmptyLine = false;
        boolean quit = false;
        while( !quit ) {
            final String s;
            final int type = tok.nextToken();

            switch( type ) {
            case StreamTokenizer.TT_EOF:
                quit = true;
                s = null;
                break;

            case StreamTokenizer.TT_WORD:
                s = tok.sval;
                potentialEmptyLine = false;
                break;

            case StreamTokenizer.TT_EOL:
                quit = potentialEmptyLine;
                potentialEmptyLine = true;
                s = null;
                break;

            case StreamTokenizer.TT_NUMBER:
                s = Integer.toString( ( int )tok.nval );
                potentialEmptyLine = false;
                break;

            case '\'':
                s = tok.sval;
                break;

            default:
                s = null;
            }

            //  Assume that alternate words on the line are parameter and value, respectively.
            if( s != null ) {
                if( param == null ) {
                    param = s;
                } else {
                    value = s;
                    arglist.put( param, value );
                    param = null;
                }
            }
        }

        //  Now, we'll check the body.
        if( potentialEmptyLine ) {
            final StringWriter out = new StringWriter();
            FileUtil.copyContents( in, out );
            final String bodyContent = out.toString();
            if( bodyContent != null ) {
                arglist.put( PARAM_BODY, bodyContent );
            }
        }

        return arglist;
    }