packages feed

ploterific-0.2.1.2: src/Ploterific/Program/Options.hs

{- Ploterific.Program.Options
Gregory W. Schwartz

Options for the command line program.
-}

{-# LANGUAGE DataKinds         #-}
{-# LANGUAGE DeriveGeneric     #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeOperators     #-}
{-# LANGUAGE StandaloneDeriving #-}

module Ploterific.Program.Options where

-- Remote
import Options.Generic
import qualified Data.Text as T
import qualified Graphics.Vega.VegaLite as VL

-- Local
import Ploterific.Plot.Types

-- | Command line arguments
data Options
    = Options { input :: Maybe String <?> "([STDIN] | PATH) The path for the input data in tabular format, with row observations and column features."
              , output :: Maybe String <?> "([STDOUT] | PATH) HTML output path."
              , feature :: [String] <?> "(COLUMN) A list of columns to use in the plot in the format --feature col1 --feature col2 etc. for axes X, Y, etc. To force a measurement, add `:` followed by `N`, `O`, `Q`, or `T` for nominal, ordinal, quantitiative, or temporal measurements, respectively. Full list of measurements located at https://vega.github.io/vega-lite/docs/type.html."
              , facet :: Maybe String <?> "(NOTHING | COLUMN) The column containing a feature to use to facet a plot into a Trellis plot. Add measurement according to --feature if needed."
              , facetNum :: Maybe Int <?> "(NOTHING | INT) The number of columns for the Trellis plot from --facet."
              , color :: Maybe String <?> "(NOTHING | COLUMN) The column containing a feature to use for colors. Add measurement according to --feature if needed."
              , mark :: String <?> "(MARK) The mark type for the plot. Common types are Circle, Bar, Boxplot, and Line. See https://hackage.haskell.org/package/hvega-0.11.0.1/docs/Graphics-Vega-VegaLite.html#t:Mark for a list."
              , delimiter :: Maybe Char <?> "([,] | CHAR) The delimiter for the table."
              , height :: Maybe Double <?> "(Nothing | DOUBLE) The height of the plot."
              , width :: Maybe Double <?> "(Nothing | Double) The width of the plot."
              , defaultTheme :: Bool <?> "Whether to use the default theme of vega-lite."
              } deriving (Generic)

modifiers :: Modifiers
modifiers = lispCaseModifiers { shortNameModifier = short }
  where
    short "input"         = Just 'i'
    short "output"        = Just 'o'
    short "feature"       = Just 'f'
    short "facet"         = Just 't'
    short "facetNum"      = Just 'n'
    short "color"         = Just 'c'
    short "mark"          = Just 'm'
    short "delimiter"     = Just 'd'
    short "height"        = Just 'h'
    short "width"         = Just 'w'
    short "defaultTheme"  = Just 'D'
    short x               = firstLetter x

instance ParseRecord Options where
    parseRecord = parseRecordWithModifiers modifiers