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"