content: module CabalGild.Unstable.Action.StripBlanks where
  
  import qualified Data.ByteString.Char8 as Latin1
  import qualified Distribution.Fields as Fields
  
  -- | High level wrapper around 'field' that makes this action easier to compose
  -- with other actions.
  run ::
    (Applicative m) =>
    ([Fields.Field a], cs) ->
    m ([Fields.Field a], cs)
  run (fs, cs) = pure (fmap field fs, cs)
  
  -- | Strips blank space from the field recursively. In practice there should
  -- not be any leading or trailing blank space to begin with. However the legacy
  -- curly bracket syntax can introduce trailing blank space. For example with
  -- @s { f : x }@ the field value will have a trailing space (@"x "@).
  field :: Fields.Field a -> Fields.Field a
  field f = case f of
    Fields.Field n fls ->
      Fields.Field (name n) (fmap fieldLine fls)
    Fields.Section n sas fs ->
      Fields.Section (name n) (fmap sectionArg sas) (fmap field fs)
  
  -- | Strips blank space from the field's name.
  name :: Fields.Name a -> Fields.Name a
  name (Fields.Name a bs) = Fields.Name a (Latin1.strip bs)
  
  -- | Strips blank space from the field line.
  fieldLine :: Fields.FieldLine a -> Fields.FieldLine a
  fieldLine (Fields.FieldLine a bs) = Fields.FieldLine a (Latin1.strip bs)
  
  -- | Strips blank space from the section argument.
  sectionArg :: Fields.SectionArg a -> Fields.SectionArg a
  sectionArg sa = case sa of
    Fields.SecArgName a bs ->
      Fields.SecArgName a (Latin1.strip bs)
    Fields.SecArgStr a bs ->
      Fields.SecArgStr a (Latin1.strip bs)
    Fields.SecArgOther a bs ->
      Fields.SecArgOther a (Latin1.strip bs)
  