MDMAN(1)

NAME
       mdman - Converts markdown to a man page

SYNOPSIS
       mdman [options] -t type -o outdir sources…

DESCRIPTION
       Converts a markdown file to a man page.

       The source file is first processed as a handlebars
       <https://handlebarsjs.com/> template. Then, it is processed as markdown
       into the target format. This supports different output formats, such as
       troff or plain text.

       Every man page should start with a level-1 header with the man name and
       section, such as # mdman(1).

       The handlebars template has several special tags to assist with
       generating the man page:

       o  Every block of command-line options must be wrapped between
          {{#options}} and {{/options}} tags. This tells the processor where
          the options start and end.

       o  Each option must be expressed with a {{#option}} block. The
          parameters to the block are a sequence of strings indicating the
          option. For example, {{#option "`-p` _spec_..." "`--package`
          _spec_..."}} is an option that has two different forms. The text
          within the string is processed as markdown. It is recommended to use
          formatting similar to this example.

          The content of the {{#option}} block should contain a detailed
          description of the option.

          Use the {{/option}} tag to end the option block.

       o  References to other man pages should use the {{man name section}}
          expression. For example, {{man "mdman" 1}} will generate a reference
          to the mdman(1) man page. For non-troff output, the --man option will
          tell mdman how to create links to the man page. If there is no
          matching --man option, then it links to a file named name.md in the
          same directory.

       o  Variables can be set with {{*set name="value"}}. These variables can
          then be referenced with {{name}} expressions.

       o  Partial templates should be placed in a directory named includes next
          to the source file. Templates can be included with an expression like
          {{> template-name}}.

       o  Other helpers include:

          o  {{lower value}} Converts the given value to lowercase.

OPTIONS
       -t type
           Specifies the output type. The following output types are supported:

           o  man — A troff-style man page. Outputs with a numbered extension
              (like .1) matching the man page section.

           o  md — A markdown file, after all handlebars processing has been
              finished. Outputs with the .md extension.

           o  txt — A text file, rendered for situations where a man page
              viewer isn’t available. Outputs with the .txt extension.

       -o outdir
           Specifies the directory where to save the output.

       --url base_url
           Specifies a base URL to use for relative URLs within the document.
           Any relative URL will be joined with this URL.

       --man name:section=url
           Specifies a URL to use for the given man page. When the {{man name
           section}} expression is used, the given URL will be inserted as a
           link. This may be specified multiple times. If a man page reference
           does not have a matching --man entry, then a relative link to a file
           named name.md will be used.

       sources…
           The source input filename, may be specified multiple times.

EXAMPLES
       1. Convert the given documents to man pages:

              mdman -t man -o doc doc/mdman.md

