static public String usage()

in flex-compiler-oem/src/main/java/flex2/compiler/config/CommandLineConfigurator.java [381:614]


    static public String usage( String program, String defaultVar, ConfigurationBuffer cfgbuf, Set<String> keywords, LocalizationManager lmgr, String l10nPrefix )
    {
        // FIXME (probably a FOL, unfortunately) - this is totally biased to western languages.

        Map<String, String> aliases = getAliases( cfgbuf );

        Map<String, String> sesaila = new HashMap<String, String>();
        for (Iterator<Map.Entry<String, String>> it = aliases.entrySet().iterator(); it.hasNext();)
        {
            Map.Entry<String, String> e = it.next();
            sesaila.put( e.getValue(), e.getKey() );
        }

        TreeSet<String> printSet = new TreeSet<String>();

        boolean all = false;
        boolean advanced = false;
        boolean details = false;
        boolean syntax = false;
        boolean printaliases = false;

        // figure out behavior..
        Set<String> newSet = new HashSet<String>();
        for (Iterator<String> kit = keywords.iterator(); kit.hasNext();)
        {
            String keyword = kit.next();

            if (keyword.equals( "list" ))
            {
                all = true;
                newSet.add( "*" );
            }
            else if (keyword.equals( "advanced" ))
            {
                advanced = true;
                if (keywords.size() == 1)
                {
                    all = true;
                    newSet.add( "*" );
                }
            }
            else if (keyword.equals( "details" ))
            {
                details = true;
            }
            else if (keyword.equals( "syntax" ))
            {
                syntax = true;
            }
            else if (keyword.equals( "aliases" ))
            {
                printaliases = true;
            }
            else
            {
                details = true;
                newSet.add( keyword );
            }
        }
        if (syntax)
        {
            List lines = ConfigurationBuffer.formatText( getSyntaxDescription( program, defaultVar, advanced, lmgr,  l10nPrefix ), 78 );
            StringBuilder text = new StringBuilder( 512 );
            for (Iterator it = lines.iterator(); it.hasNext();)
            {
                text.append( it.next() );
                text.append( "\n" );
            }
            return text.toString();
        }
        keywords = newSet;

        // accumulate set to print
        for (Iterator<String> kit = keywords.iterator(); kit.hasNext();)
        {
            String keyword = kit.next().toLowerCase();

            for (Iterator varit = cfgbuf.getVarIterator(); varit.hasNext(); )
            {
                String var = (String) varit.next();
                ConfigurationInfo info = cfgbuf.getInfo( var );

                String description = getDescription( cfgbuf, var, lmgr, l10nPrefix);

                if ((all
                        || (var.indexOf( keyword ) != -1)
                        || ((description != null) && (description.toLowerCase().indexOf( keyword ) != -1))
                        || (keyword.matches( var ) )
                        || ((sesaila.get( var ) != null) && (sesaila.get( var )).indexOf( keyword ) != -1))
                     && (!info.isHidden())
                     && (advanced || !info.isAdvanced()))
                {
                    if (printaliases && sesaila.containsKey( var ))
                        printSet.add( sesaila.get( var ));
                    else
                        printSet.add( var );
                }
                else
                {
                    /*
                    for (int i = 0; i < info.getAliases().length; ++i)
                    {
                        String alias = info.getAliases()[i];
                        if (alias.indexOf( keyword ) != -1)
                        {
                            printSet.add( var );
                        }
                    }
                    */
                }
            }
        }

        StringBuilder output = new StringBuilder( 1024 );

        if (printSet.size() == 0)
        {
            String nkm = lmgr.getLocalizedTextString( l10nPrefix + ".NoKeywordsMatched" );
            output.append( nkm );
            output.append( "\n" );
        }
        else for (Iterator<String> it = printSet.iterator(); it.hasNext();)
        {
            String avar = it.next();
            String var = avar;
            if (aliases.containsKey( avar ))
                var = aliases.get( avar );

            ConfigurationInfo info = cfgbuf.getInfo( var );
            assert info != null;

            output.append( "-" );
            output.append( avar );

            int count = cfgbuf.getVarArgCount( var );
            if ((count >= 1) && (!isBoolean( cfgbuf, var )))
            {
                for (int i = 0; i < count; ++i)
                {
                    output.append( " <" );
                    output.append( cfgbuf.getVarArgName( var, i ) );
                    output.append( ">" );
                }
            }
            else if (count == -1)
            {
                String last = "";
                for (int i = 0; i < 5; ++i)
                {
                    String argname = cfgbuf.getVarArgName( var, i );
                    if (!argname.equals( last ))
                    {
                        output.append( " [" );
                        output.append( argname );
                        output.append( "]" );
                        last = argname;
                    }
                    else
                    {
                        output.append( " [...]" );
                        break;
                    }
                }
            }

            output.append( "\n" );

            if (details)
            {
                StringBuilder description = new StringBuilder( 160 );
                if (printaliases)
                {
                    if (aliases.containsKey( avar ))
                    {
                        String fullname = lmgr.getLocalizedTextString( l10nPrefix + ".FullName" );
                        description.append( fullname );
                        description.append( " -" );
                        description.append( aliases.get( avar ));
                        description.append( "\n" );
                    }
                }
                else if (sesaila.containsKey( var ))
                {
                    String alias = lmgr.getLocalizedTextString( l10nPrefix + ".Alias" );
                    description.append( alias );
                    description.append( " -" );
                    description.append( sesaila.get( var ));
                    description.append( "\n" );
                }

                String d = getDescription(cfgbuf, var, lmgr, l10nPrefix);
                if (var.equals( "help" ) && (printSet.size() > 2))
                {
                    String helpKeywords = lmgr.getLocalizedTextString( l10nPrefix + ".HelpKeywords" );
                    description.append( helpKeywords );
                }
                else if (d != null)
                    description.append( d );

                String flags = "";
                if (info.isAdvanced())
                {
                    String advancedString = lmgr.getLocalizedTextString( l10nPrefix + ".Advanced" );
                    flags += (((flags.length() == 0)? " (" : ", ") + advancedString );
                }
                if (info.allowMultiple())
                {
                    String repeatableString = lmgr.getLocalizedTextString( l10nPrefix + ".Repeatable" );
                    flags += (((flags.length() == 0)? " (" : ", ") + repeatableString );
                }
                if ((defaultVar != null) && var.equals( defaultVar ))
                {
                    String defaultString = lmgr.getLocalizedTextString( l10nPrefix + ".Default" );
                    flags += (((flags.length() == 0)? " (" : ", ") + defaultString );
                }
                if (flags.length() != 0)
                {
                    flags += ")";
                }
                description.append( flags );


                List descriptionLines = ConfigurationBuffer.formatText( description.toString(), 70 );

                for (Iterator descit = descriptionLines.iterator(); descit.hasNext();)
                {
                    output.append( "    " );
                    output.append( (String) descit.next() );
                    output.append( "\n" );
                }
            }
        }
        return output.toString();
    }