The help command can now output html for the command-line reference page. An upcoming change will pipe this to an actual page. -- MOS_MIGRATED_REVID=125545220
diff --git a/src/main/java/com/google/devtools/common/options/OptionsUsage.java b/src/main/java/com/google/devtools/common/options/OptionsUsage.java index e79a062..b64506d 100644 --- a/src/main/java/com/google/devtools/common/options/OptionsUsage.java +++ b/src/main/java/com/google/devtools/common/options/OptionsUsage.java
@@ -19,6 +19,7 @@ import com.google.common.base.Splitter; import com.google.common.base.Strings; import com.google.common.collect.Lists; +import com.google.common.escape.Escaper; import java.lang.reflect.Field; import java.text.BreakIterator; @@ -127,6 +128,51 @@ } /** + * Append the usage message for a single option-field message to 'usage'. + */ + static void getUsageHtml(Field optionField, StringBuilder usage, Escaper escaper) { + String flagName = getFlagName(optionField); + String typeDescription = getTypeDescription(optionField); + Option annotation = optionField.getAnnotation(Option.class); + usage.append("<dt><code>--").append(flagName).append("</code>"); + if (annotation.abbrev() != '\0') { + usage.append(" [<code>-").append(annotation.abbrev()).append("</code>]"); + } + if (!typeDescription.isEmpty()) { + usage.append(" (").append(escaper.escape(typeDescription)).append("; "); + if (annotation.allowMultiple()) { + // Allow-multiple options can't have a default value. + usage.append("may be used multiple times"); + } else { + // Don't call the annotation directly (we must allow overrides to certain defaults). + String defaultValueString = OptionsParserImpl.getDefaultOptionString(optionField); + if (OptionsParserImpl.isSpecialNullDefault(defaultValueString, optionField)) { + usage.append("default: see description"); + } else { + usage.append("default: \"").append(escaper.escape(defaultValueString)).append("\""); + } + } + usage.append(")"); + } + usage.append("</dt>\n"); + usage.append("<dd>\n"); + if (!annotation.help().isEmpty()) { + usage.append(paragraphFill(escaper.escape(annotation.help()), 0, 80)); // (indent, width) + usage.append('\n'); + } + if (annotation.expansion().length > 0) { + usage.append("<br/>\n"); + StringBuilder expandsMsg = new StringBuilder("Expands to:"); + for (String exp : annotation.expansion()) { + expandsMsg.append(" ").append(exp); + } + usage.append(paragraphFill(escaper.escape(expandsMsg.toString()), 0, 80)); // (indent, width) + usage.append('\n'); + } + usage.append("</dd>\n"); + } + + /** * Returns the available completion for the given option field. The completions are the exact * command line option (with the prepending '--') that one should pass. It is suitable for * completion script to use. If the option expect an argument, the kind of argument is given