Copyright | © 2017–present Mark Karpov |
---|---|
License | BSD 3 clause |
Maintainer | Mark Karpov <[email protected]> |
Stability | experimental |
Portability | portable |
Safe Haskell | None |
Language | GHC2021 |
Text.MMark.Internal.Type
Description
Internal type definitions. The public subset of these is re-exported from Text.MMark.Extension.
Since: 0.0.8.0
Synopsis
- data MMark = MMark {
- mmarkYaml :: Maybe Value
- mmarkBlocks :: [Bni]
- mmarkExtension :: Extension
- data Extension = Extension {
- extBlockTrans :: Endo Bni
- extBlockRender :: Render (Block (Ois, Html ()))
- extInlineTrans :: Endo Inline
- extInlineRender :: Render Inline
- newtype Render a = Render {}
- type Bni = Block (NonEmpty Inline)
- data Block a
- data CellAlign
- data Inline
- data Ois
- mkOisInternal :: NonEmpty Inline -> Ois
- getOis :: Ois -> NonEmpty Inline
Documentation
Representation of complete markdown document. You can't look inside of
MMark
on purpose. The only way to influence an MMark
document you
obtain as a result of parsing is via the extension mechanism.
Constructors
MMark | |
Fields
|
An extension. You can apply extensions with useExtension
and useExtensions
functions. The Text.MMark.Extension
module provides tools for writing your own extensions.
Note that Extension
is an instance of Semigroup
and Monoid
, i.e.
you can combine several extensions into one. Since the (
operator
is right-associative and <>
)mconcat
is a right fold under the hood, the
expression
l <> r
means that the extension r
will be applied before the extension l
,
similar to how Endo
works. This may seem counter-intuitive, but only
with this logic we get consistency of ordering with more complex
expressions:
e2 <> e1 <> e0 == e2 <> (e1 <> e0)
Here, e0
will be applied first, then e1
, then e2
. The same applies
to expressions involving mconcat
—extensions closer to beginning of the
list passed to mconcat
will be applied later.
Constructors
Extension | |
Fields
|
An internal type that captures the extensible rendering process we use.
Render
has a function inside which transforms a rendering function of
the type a -> Html ()
.
Since: 0.0.8.0
We can think of a markdown document as a collection of
blocks—structural elements like paragraphs, block quotations, lists,
headings, thematic breaks, and code blocks. Some blocks (like block
quotes and list items) contain other blocks; others (like headings and
paragraphs) contain inline content, see Inline
.
We can divide blocks into two types: container blocks, which can contain other blocks, and leaf blocks, which cannot.
Constructors
ThematicBreak | Thematic break, leaf block |
Heading1 a | Heading (level 1), leaf block |
Heading2 a | Heading (level 2), leaf block |
Heading3 a | Heading (level 3), leaf block |
Heading4 a | Heading (level 4), leaf block |
Heading5 a | Heading (level 5), leaf block |
Heading6 a | Heading (level 6), leaf block |
CodeBlock (Maybe Text) Text | Code block, leaf block with info string and contents |
Naked a | Naked content, without an enclosing tag |
Paragraph a | Paragraph, leaf block |
Blockquote [Block a] | Blockquote container block |
OrderedList Word (NonEmpty [Block a]) | Ordered list ( |
UnorderedList (NonEmpty [Block a]) | Unordered list, container block |
Table (NonEmpty CellAlign) (NonEmpty (NonEmpty a)) | Table, first argument is the alignment options, then we have a
The first row is always the header row, because pipe-tables that we support cannot lack a header row. Since: 0.0.4.0 |
Instances
Options for cell alignment in tables.
Since: 0.0.4.0
Constructors
CellAlignDefault | No specific alignment specified |
CellAlignLeft | Left-alignment |
CellAlignRight | Right-alignment |
CellAlignCenter | Center-alignment |
Instances
Data CellAlign Source # | |||||
Defined in Text.MMark.Internal.Type Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> CellAlign -> c CellAlign # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c CellAlign # toConstr :: CellAlign -> Constr # dataTypeOf :: CellAlign -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c CellAlign) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CellAlign) # gmapT :: (forall b. Data b => b -> b) -> CellAlign -> CellAlign # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> CellAlign -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> CellAlign -> r # gmapQ :: (forall d. Data d => d -> u) -> CellAlign -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> CellAlign -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> CellAlign -> m CellAlign # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> CellAlign -> m CellAlign # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> CellAlign -> m CellAlign # | |||||
Generic CellAlign Source # | |||||
Defined in Text.MMark.Internal.Type Associated Types
| |||||
Show CellAlign Source # | |||||
NFData CellAlign Source # | |||||
Defined in Text.MMark.Internal.Type | |||||
Eq CellAlign Source # | |||||
Ord CellAlign Source # | |||||
type Rep CellAlign Source # | |||||
Defined in Text.MMark.Internal.Type type Rep CellAlign = D1 ('MetaData "CellAlign" "Text.MMark.Internal.Type" "mmark-0.0.8.0-LfKQY1DhBX55dIRLvrPBQ2" 'False) ((C1 ('MetaCons "CellAlignDefault" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "CellAlignLeft" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "CellAlignRight" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "CellAlignCenter" 'PrefixI 'False) (U1 :: Type -> Type))) |
Inline markdown content.
Constructors
Plain Text | Plain text |
LineBreak | Line break (hard) |
Emphasis (NonEmpty Inline) | Emphasis |
Strong (NonEmpty Inline) | Strong emphasis |
Strikeout (NonEmpty Inline) | Strikeout |
Subscript (NonEmpty Inline) | Subscript |
Superscript (NonEmpty Inline) | Superscript |
CodeSpan Text | Code span |
Link (NonEmpty Inline) URI (Maybe Text) | Link with text, destination, and optionally title |
Image (NonEmpty Inline) URI (Maybe Text) | Image with description, URL, and optionally title |
Instances
Data Inline Source # | |||||
Defined in Text.MMark.Internal.Type Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Inline -> c Inline # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Inline # toConstr :: Inline -> Constr # dataTypeOf :: Inline -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Inline) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Inline) # gmapT :: (forall b. Data b => b -> b) -> Inline -> Inline # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Inline -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Inline -> r # gmapQ :: (forall d. Data d => d -> u) -> Inline -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Inline -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Inline -> m Inline # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Inline -> m Inline # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Inline -> m Inline # | |||||
Generic Inline Source # | |||||
Defined in Text.MMark.Internal.Type Associated Types
| |||||
Show Inline Source # | |||||
NFData Inline Source # | |||||
Defined in Text.MMark.Internal.Type | |||||
Eq Inline Source # | |||||
Ord Inline Source # | |||||
type Rep Inline Source # | |||||
Defined in Text.MMark.Internal.Type type Rep Inline = D1 ('MetaData "Inline" "Text.MMark.Internal.Type" "mmark-0.0.8.0-LfKQY1DhBX55dIRLvrPBQ2" 'False) (((C1 ('MetaCons "Plain" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :+: C1 ('MetaCons "LineBreak" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Emphasis" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty Inline))) :+: (C1 ('MetaCons "Strong" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty Inline))) :+: C1 ('MetaCons "Strikeout" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty Inline)))))) :+: ((C1 ('MetaCons "Subscript" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty Inline))) :+: C1 ('MetaCons "Superscript" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty Inline)))) :+: (C1 ('MetaCons "CodeSpan" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :+: (C1 ('MetaCons "Link" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty Inline)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 URI) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text)))) :+: C1 ('MetaCons "Image" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty Inline)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 URI) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text)))))))) |
A wrapper for “original inlines”. Source inlines are wrapped in this
during rendering of inline components and then it's available to block
render, but only for inspection. Altering of Ois
is not possible
because the user cannot construct a value of the Ois
type, he/she can
only inspect it with getOis
.