From 29cb65585782f71a9c6fa1062eaa0b8de8359604 Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Tue, 2 May 2023 11:10:58 -0400 Subject: Markdown CommandOptions (#2860) * WIP CommandOptions * Fix some output issues. * Simplify word wrapping. * Add file extensions. * Change how lookup takes place. Add appendSplit functions to StringUtil. Make Categories hold the index range of their options. * Small improvement. * Lookup with partial option names. * Associate user values. * Encoding flags in the name. * Refactor setting up of command options. * Use CommandOptions in slang-options. * Remove old help text. * Cache the CommandOptions on the Session. * Range checking. Fix bug in the Options handling. * Extra checks for validity. * Get categories directly. * Slight improvements over output. * Added NameValue types. * Fix typo. Remove some now unused diagnostics. Fix diagnostic in testing, as output has changed. * Add minimal usage message. * Remove platform executable extension from diagnostics output. * Some improvements around getting names from NameValue types. * Improve some option descriptions. * Small fixes. * WIP improvements around CommandOptions. * Split out CommandOptionsWriter. * Add links to options. * Add command line options reference. * Link to the reference command line information. * Add quick links. * Improvements around lookup. Add categories to linking. * Small additional fixes. * Add LinkFlags control. * Small text fixes. * Fix typo. * Fix typo. * Fix typo. * Add support for -g and -O using CommandOptions. * Improve generated doc output/descriptions. Remove options listed directly in documentation. --- source/core/slang-command-options-writer.h | 69 ++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 source/core/slang-command-options-writer.h (limited to 'source/core/slang-command-options-writer.h') diff --git a/source/core/slang-command-options-writer.h b/source/core/slang-command-options-writer.h new file mode 100644 index 000000000..eb9a2795f --- /dev/null +++ b/source/core/slang-command-options-writer.h @@ -0,0 +1,69 @@ +#ifndef SLANG_CORE_COMMAND_OPTIONS_WRITER_H +#define SLANG_CORE_COMMAND_OPTIONS_WRITER_H + +#include "slang-command-options.h" + +namespace Slang +{ + +class CommandOptionsWriter : public RefObject +{ +public: + typedef CommandOptions::CategoryKind CategoryKind; + typedef CommandOptions::NameKey NameKey; + typedef CommandOptions::LookupKind LookupKind; + + enum class Style + { + Text, ///< Suitable for output to a terminal + Markdown, ///< Markdown + NoLinkMarkdown, ///< Markdown without links + }; + + static ConstArrayView getStyleInfos(); + + struct Options + { + Style style = Style::Text; ///< The style + Index lineLength = 120; ///< The maximum amount of characters on a line + UnownedStringSlice indent = toSlice(" ");; + }; + + /// Append descirption for a category + void appendDescriptionForCategory(CommandOptions* options, Index categoryIndex); + /// Appends a description of all of the options + void appendDescription(CommandOptions* options); + + /// Get the builder that string is being written to + StringBuilder& getBuilder() { return m_builder; } + + static RefPtr create(const Options& options); + + +protected: + + /// Append descirption for a category + virtual void appendDescriptionForCategoryImpl(Index categoryIndex) = 0; + /// Appends a description of all of the options + virtual void appendDescriptionImpl() = 0; + + // Ctor, use create to create a writer + CommandOptionsWriter(const Options& options); + + /// Get the length of the current line in ascii chars/bytes + Count _getCurrentLineLength(); + + /// Indentation/wrapping + void _requireIndent(Count indentCount); + void _appendWrappedIndented(Count indentCount, List& slices, const UnownedStringSlice& delimit); + + CommandOptions* m_commandOptions = nullptr; + + StringSlicePool m_pool; + StringBuilder m_builder; + Options m_options; +}; + +} // namespace Slang + +#endif -- cgit v1.2.3