mdoc 0.3.1.0 → 0.3.1.1
raw patch · 8 files changed
+248/−2 lines, 8 files
Files
- data/man1.template +77/−0
- data/man5.template +29/−0
- examples/docker.1 +69/−0
- mdoc.cabal +5/−1
- src/Mdoc/Data/Synopsis.hs +17/−1
- src/Mdoc/Examples/Docker.hs +45/−0
- src/Mdoc/Syntax/MacroName.hs +4/−0
- test/Mdoc/ExamplesSpec.hs +2/−0
+ data/man1.template view
@@ -0,0 +1,77 @@+.\" vim: ft=nroff.mustache+.Dd $Mdocdate$+.Dt {{{title}}} 1+.Os+.Sh NAME+{{#name.init}}+.Nm {{{.}}} ,+{{/name.init}}+.Nm {{{name.last}}}+.Nd {{{name.description}}}+.Sh SYNOPSIS+.Nm+.Bk -words+{{#page.synopsis}}+{{{page.synopsis}}}+{{/page.synopsis}}+{{^page.commands}}+.Ek+{{/page.commands}}+{{#page.commands}}+.Ar command+.Ek+{{#page.commands.items}}+.Pp+.Nm+.Cm {{{name}}}+{{#synopsis}}+.Bk -words+{{{.}}}+.Ek+{{/synopsis}}+{{/page.commands.items}}+{{/page.commands}}+.Sh DESCRIPTION+{{#page.prologue}}+{{{.}}}+{{/page.prologue}}+{{#page.options}}+The options are as follows:+.Bl -tag -width {{{page.options.width}}}+{{#page.options.items}}+.It {{{head}}}+{{#body}}+{{{body}}}+{{/body}}+{{/page.options.items}}+.El+{{/page.options}}+{{#page.commands}}+.Ss COMMANDS+.Bl -tag -width {{{page.commands.width}}}+{{#page.commands.items}}+.It Cm {{{name}}}+{{#description}}+{{{description}}}+{{/description}}+{{/page.commands.items}}+.El+{{/page.commands}}+{{#page.environment}}+.Sh ENVIRONMENT+The following environment variables affect the execution of+.Nm :+.Bl -tag -width {{{page.environment.width}}}+{{#page.environment.items}}+.It {{{head}}}+{{#body}}+{{{body}}}+{{/body}}+{{/page.environment.items}}+.El+{{/page.environment}}+.Sh EXIT STATUS+.Ex -std+{{#page.epilogue}}+{{{.}}}+{{/page.epilogue}}
+ data/man5.template view
@@ -0,0 +1,29 @@+.\" vim: ft=nroff.mustache+.Dd $Mdocdate$+.Dt {{{title}}} 5+.Os+.Sh NAME+{{#name.init}}+.Nm {{{.}}} ,+{{/name.init}}+.Nm {{{name.last}}}+.Nd {{{name.description}}}+{{#page.synopsis}}+.Sh SYNOPSIS+{{{.}}}+{{/page.synopsis}}+.Sh DESCRIPTION+{{#page.prologue}}+{{{.}}}+{{/page.prologue}}+.Bl -tag -width {{{page.configs.width}}}+{{#page.configs.items}}+.It {{{head}}}+{{#body}}+{{{body}}}+{{/body}}+{{/page.configs.items}}+.El+{{#page.epilogue}}+{{{.}}}+{{/page.epilogue}}
+ examples/docker.1 view
@@ -0,0 +1,69 @@+.\" vim: ft=nroff.mustache+.Dd $Mdocdate: September 20 2026 $+.Dt DOCKER 1+.Os+.Sh NAME+.Nm docker+.Nd a self\-sufficient runtime for containers+.Sh SYNOPSIS+.Nm+.Bk -words+.Op Fl \&Dv+.Op Fl c Ar string+.Op Fl H Ar string+.Op Fl l Ar string+.Op Fl Fl config= Ns Ar string+.Op Fl Fl tls+.Op Fl Fl tlscacert= Ns Ar string+.Op Fl Fl tlscert= Ns Ar string+.Op Fl Fl tlskey= Ns Ar string+.Op Fl Fl tlsverify+.Ar command+.Ek+.Pp+.Nm+.Cm run+.Pp+.Nm+.Cm exec+.Pp+.Nm+.Cm ps+.Sh DESCRIPTION+The options are as follows:+.Bl -tag -width indent+.It Fl c Ar string , Fl Fl context= Ns Ar string+Name of the context to use to connect to the daemon (overrides DOCKER_HOST env+var and default context set with "docker context use")+.It Fl D , Fl Fl debug+Enable debug mode+.It Fl H Ar string , Fl Fl host= Ns Ar string+Daemon socket to connect to+.It Fl l Ar string , Fl Fl log\-level= Ns Ar string+Set the logging level ("debug", "info", "warn", "error", "fatal")+.It Fl v , Fl Fl version+Print version information and quit+.It Fl Fl config= Ns Ar string+Location of client config files+.It Fl Fl tls+Use TLS; implied by \-\-tlsverify+.It Fl Fl tlscacert= Ns Ar string+Trust certs signed only by this CA+.It Fl Fl tlscert= Ns Ar string+Path to TLS certificate file+.It Fl Fl tlskey= Ns Ar string+Path to TLS key file+.It Fl Fl tlsverify+Use TLS and verify the remote+.El+.Ss COMMANDS+.Bl -tag -width indent+.It Cm run+Create and run a new container from an image+.It Cm exec+Execute a command in a running container+.It Cm ps+List containers+.El+.Sh EXIT STATUS+.Ex -std
mdoc.cabal view
@@ -1,6 +1,6 @@ cabal-version: 1.18 name: mdoc-version: 0.3.1.0+version: 0.3.1.1 license: AGPL-3 license-file: COPYING maintainer: Pat Brisbin@@ -31,7 +31,10 @@ category: Text build-type: Simple extra-source-files:+ data/man1.template+ data/man5.template examples/crontab.5+ examples/docker.1 examples/example.1 examples/examplerc.5 examples/grep.1@@ -72,6 +75,7 @@ Mdoc.Dump.Env Mdoc.Dump.Main Mdoc.Dump.Options+ Mdoc.Examples.Docker Mdoc.Examples.Grep Mdoc.Examples.OptEnvConf Mdoc.Examples.Pass
src/Mdoc/Data/Synopsis.hs view
@@ -64,9 +64,25 @@ unAnnotate $ vsep $ catMaybes- [ (".Op Fl" <+>) . pretty . esc . pack . toList <$> nonEmpty u.chars+ [ (".Op Fl" <+>) . pretty . fixMacro . esc . pack . toList <$> nonEmpty u.chars , vsep . toList <$> nonEmpty (u.shorts <> u.longs <> u.args) ]++-- | Fix for when short-switches accidentally become a macro name+--+-- For example, @docker(1)@ has short switches @-D@ and @-v@, which become:+--+-- @+-- .Op Fl Dv+-- @+--+-- We have to escape the @Dv@ since it's a macro name.+--+-- It's safe to do this always, I guess, but also easy to only do it if needed.+fixMacro :: Text -> Text+fixMacro t+ | t `elem` macroNames = "\\&" <> t+ | otherwise = t buildUsage :: [Described Positional] -> Usage ann buildUsage = foldl go mempty . sort
+ src/Mdoc/Examples/Docker.hs view
@@ -0,0 +1,45 @@+module Mdoc.Examples.Docker+ ( docker1+ ) where++import Mdoc.Prelude++import Mdoc.Data.Named+import OptEnvConf qualified+import OptEnvConf.Mdoc qualified as OptEnvConf++docker1 :: Named+docker1 =+ mempty+ & (<> OptEnvConf.getPage dockerOpt)+ & name "docker" "a self-sufficient runtime for containers"++{- FOURMOLU_DISABLE -}+dockerOpt :: OptEnvConf.Parser ()+dockerOpt = void $ (,,,,,,,,,,,)+ <$> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.long "config", OptEnvConf.metavar "string", OptEnvConf.help "Location of client config files", OptEnvConf.value "/home/patrick/.docker"])+ <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.short 'c', OptEnvConf.long "context", OptEnvConf.metavar "string", OptEnvConf.help "Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with \"docker context use\")"])+ <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.short 'D', OptEnvConf.long "debug", OptEnvConf.help "Enable debug mode"])+ <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.short 'H', OptEnvConf.long "host", OptEnvConf.metavar "string", OptEnvConf.help "Daemon socket to connect to"])+ <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.short 'l', OptEnvConf.long "log-level", OptEnvConf.metavar "string", OptEnvConf.help "Set the logging level (\"debug\", \"info\", \"warn\", \"error\", \"fatal\")", OptEnvConf.value "info"])+ <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.switch True, OptEnvConf.value False, OptEnvConf.long "tls", OptEnvConf.help "Use TLS; implied by --tlsverify"])+ <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.long "tlscacert", OptEnvConf.metavar "string", OptEnvConf.help "Trust certs signed only by this CA", OptEnvConf.value "/home/patrick/.docker/ca.pem"])+ <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.long "tlscert", OptEnvConf.metavar "string", OptEnvConf.help "Path to TLS certificate file", OptEnvConf.value "/home/patrick/.docker/cert.pem"])+ <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.reader (OptEnvConf.str @Text), OptEnvConf.long "tlskey", OptEnvConf.metavar "string", OptEnvConf.help "Path to TLS key file", OptEnvConf.value "/home/patrick/.docker/key.pem"])+ <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.switch True, OptEnvConf.value False, OptEnvConf.long "tlsverify", OptEnvConf.help "Use TLS and verify the remote"])+ <*> OptEnvConf.optional (OptEnvConf.setting [OptEnvConf.switch True, OptEnvConf.value False, OptEnvConf.short 'v', OptEnvConf.long "version", OptEnvConf.help "Print version information and quit"])+ <*> OptEnvConf.commands+ [ OptEnvConf.command "run" "Create and run a new container from an image" runOpt+ , OptEnvConf.command "exec" "Execute a command in a running container" execOpt+ , OptEnvConf.command "ps" "List containers" psOpt+ ]++runOpt :: OptEnvConf.Parser ()+runOpt = pure ()++execOpt :: OptEnvConf.Parser ()+execOpt = pure ()++psOpt :: OptEnvConf.Parser ()+psOpt = pure ()+{- FOURMOLU_ENABLE -}
src/Mdoc/Syntax/MacroName.hs view
@@ -9,6 +9,7 @@ module Mdoc.Syntax.MacroName ( MacroName (..) , macroNameText+ , macroNames -- * Pretty , prettyMacroName@@ -151,6 +152,9 @@ percent = ("%" <>) <$> T.stripPrefix "Percent" shown troff = T.stripPrefix "Troff'" shown bug = T.stripPrefix "Bug" shown++macroNames :: [Text]+macroNames = map macroNameText [minBound .. maxBound] prettyMacroName :: MacroName -> Doc Ann prettyMacroName = pretty . macroNameText
test/Mdoc/ExamplesSpec.hs view
@@ -19,6 +19,7 @@ import Data.Time (fromGregorian) import Mdoc import Mdoc.Data.Named+import Mdoc.Examples.Docker import Mdoc.Examples.Grep import Mdoc.Examples.OptEnvConf import Mdoc.Examples.Pass@@ -38,6 +39,7 @@ it "grep.1" $ exampleGolden man1 grep1 1 it "example.1" $ exampleGolden man1 example1 1 it "pass.1" $ exampleGolden man1 pass1 1+ it "docker.1" $ exampleGolden man1 docker1 1 it "conf.5" $ exampleGolden man5 conf5 5 it "example.5" $ exampleGolden man5 example5 5 it "person.5" $ exampleGolden man5 person5 5