packages feed

mdoc-0.1.0.0: src/Mdoc/Parse/MdocLine.hs

-- |
--
-- Module      : Mdoc.Parse.MdocLine
-- Copyright   : (c) 2026 Patrick Brisbin
-- License     : AGPL-3
-- Maintainer  : pbrisbin@gmail.com
-- Stability   : experimental
-- Portability : POSIX
module Mdoc.Parse.MdocLine
  ( parseMdocLine
  ) where

import Mdoc.Prelude

import Mdoc.MdocLine
import Mdoc.Parse
import Mdoc.Parse.Interpolation
import Mdoc.Parse.MacroArg
import Mdoc.Parse.MacroName
import Mdoc.Parse.TableLine
import Mdoc.Parse.TroffMacro

parseMdocLine :: Parser MdocLine
parseMdocLine =
  choice
    [ try comment
    , try dot <* hspace
    , try $ TroffMacro <$> parseTroffMacro
    , TableLines <$> parseTableLines
    , macroLine <* hspace
    , InterpolatedLine <$> parseInterpolationLine
    , textLine
    ]

comment :: Parser MdocLine
comment = string ".\\\"" *> hspace *> (Comment <$> restOfLine) <?> "comment"

dot :: Parser MdocLine
dot = TextLine <$> string "." <* peek (hspace >> eol) <?> "standalone dot"

macroLine :: Parser MdocLine
macroLine = macroCall MacroLine parseMacroName parseMacroArg

textLine :: Parser MdocLine
textLine = TextLine <$> restOfLine <?> "text line"