-- Support for @darcs help markdown@
module Darcs.UI.Options.Markdown ( optionsMarkdown ) where

import Prelude ()
import Darcs.Prelude

import Data.Functor.Compose ( Compose(..) )
import System.Console.GetOpt ( OptDescr(..), ArgDescr(..) )
import Darcs.UI.Options.Util ( DarcsOptDescr )

optionsMarkdown :: [DarcsOptDescr f] -> String
optionsMarkdown :: [DarcsOptDescr f] -> String
optionsMarkdown opts :: [DarcsOptDescr f]
opts = [String] -> String
unlines
  [ "<table>", [String] -> String
unlines ((DarcsOptDescr f -> String) -> [DarcsOptDescr f] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map DarcsOptDescr f -> String
forall f. DarcsOptDescr f -> String
optionMarkdown [DarcsOptDescr f]
opts), "</table>" ]

optionMarkdown :: DarcsOptDescr f -> String
optionMarkdown :: DarcsOptDescr f -> String
optionMarkdown (Compose (Option a :: String
a b :: [String]
b (NoArg _) h :: String
h)) = [String] -> String
unlines
 [ "<tr>", "<td>", String -> String
showShortOptionsMd String
a, "</td>"
         , "<td>", [String] -> String
showLongOptionsMd [String]
b , "</td>"
         , "<td>", String
h, "</td>"
 , "</tr>" ]
optionMarkdown (Compose (Option a :: String
a b :: [String]
b (ReqArg _ arg :: String
arg) h :: String
h)) = [String] -> String
unlines
 [ "<tr>", "<td>", String -> String
showShortOptionsMd String
a, "</td>"
         , "<td>", [String] -> String
showLongOptionsMd ((String -> String) -> [String] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String -> String -> String
forall a. [a] -> [a] -> [a]
++(' ' Char -> String -> String
forall a. a -> [a] -> [a]
: String
arg)) [String]
b), "</td>"
         , "<td>", String
h, "</td>", "</tr>" ]
optionMarkdown (Compose (Option a :: String
a b :: [String]
b (OptArg _ arg :: String
arg) h :: String
h)) = [String] -> String
unlines
 [ "<tr>", "<td>", String -> String
showShortOptionsMd String
a, "</td>"
         , "<td>", [String] -> String
showLongOptionsMd ((String -> String) -> [String] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String -> String -> String
forall a. [a] -> [a] -> [a]
++("[="String -> String -> String
forall a. [a] -> [a] -> [a]
++String
argString -> String -> String
forall a. [a] -> [a] -> [a]
++"]")) [String]
b), "</td>"
         , "<td>", String
h, "</td>", "</tr>" ]

showShortOptionsMd :: [Char] -> String
showShortOptionsMd :: String -> String
showShortOptionsMd []     = ""
showShortOptionsMd [c :: Char
c]    = "`-"String -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
c]String -> String -> String
forall a. [a] -> [a] -> [a]
++"` "
showShortOptionsMd (c :: Char
c:cs :: String
cs) = "`-"String -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
c]String -> String -> String
forall a. [a] -> [a] -> [a]
++"`,"String -> String -> String
forall a. [a] -> [a] -> [a]
++String -> String
showShortOptionsMd String
cs

showLongOptionsMd :: [String] -> String
showLongOptionsMd :: [String] -> String
showLongOptionsMd []     = " "
showLongOptionsMd [s :: String
s]    = "`--" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
s String -> String -> String
forall a. [a] -> [a] -> [a]
++ "` "
showLongOptionsMd (s :: String
s:ss :: [String]
ss) = "`--" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
s String -> String -> String
forall a. [a] -> [a] -> [a]
++ "`,"String -> String -> String
forall a. [a] -> [a] -> [a]
++ [String] -> String
showLongOptionsMd [String]
ss