public static String usage()

in compiler-common/src/main/java/org/apache/royale/compiler/config/CommandLineConfigurator.java [350:579]


    public static String usage(String program, String defaultVar, ConfigurationBuffer cfgbuf, Set<String> keywords, LocalizationManager lmgr, String l10nPrefix)
    {
        boolean isCompc = program.contains("compc");
        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)
        {
            final List<String> lines = ConfigurationBuffer.formatText(getSyntaxDescription(program, defaultVar, advanced, lmgr, l10nPrefix), 78);
            return Joiner.on("\n").join(lines);
        }
        keywords = newSet;

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

            for (final String var : cfgbuf.getVars())
            {
                ConfigurationInfo info = cfgbuf.getInfo(var);
                
                // If the client is not "compc", skip "compc-only" options.
                if (info.isCompcOnly && !isCompc)
                    continue;
                
                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())
                     && (!info.isRemoved())
                     && (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 (info.isRoyaleOnly())
                    {
                        String royaleOnlylString = Messages.getString("RoyaleOnly");
                        flags += (((flags.length() == 0) ? " (" : ", ") + royaleOnlylString);
                    }
                    if (flags.length() != 0)
                    {
                        flags += ")";
                    }
                    description.append(flags);

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

                    for (final String next : descriptionLines)
                    {
                        output.append("    ");
                        output.append(next);
                        output.append("\n");
                    }
                }
            }
        return output.toString();
    }