swarm-0.5.0.0: 2D resource gathering game with programmable robots
LicenseBSD-3-Clause
Safe HaskellSafe-Inferred
LanguageHaskell2010

Swarm.Language.Text.Markdown

Description

Simple Markdown AST and related utilities.

Parametrising Document with the type of inline code and code blocks allows us to inspect and validate Swarm code in descriptions.

See drawMarkdown for rendering the descriptions as brick widgets.

Synopsis

Markdown document

newtype Document c Source #

The top-level markdown document.

Constructors

Document 

Fields

Instances

Instances details
Foldable Document Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

fold :: Monoid m => Document m -> m #

foldMap :: Monoid m => (a -> m) -> Document a -> m #

foldMap' :: Monoid m => (a -> m) -> Document a -> m #

foldr :: (a -> b -> b) -> b -> Document a -> b #

foldr' :: (a -> b -> b) -> b -> Document a -> b #

foldl :: (b -> a -> b) -> b -> Document a -> b #

foldl' :: (b -> a -> b) -> b -> Document a -> b #

foldr1 :: (a -> a -> a) -> Document a -> a #

foldl1 :: (a -> a -> a) -> Document a -> a #

toList :: Document a -> [a] #

null :: Document a -> Bool #

length :: Document a -> Int #

elem :: Eq a => a -> Document a -> Bool #

maximum :: Ord a => Document a -> a #

minimum :: Ord a => Document a -> a #

sum :: Num a => Document a -> a #

product :: Num a => Document a -> a #

Traversable Document Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

traverse :: Applicative f => (a -> f b) -> Document a -> f (Document b) #

sequenceA :: Applicative f => Document (f a) -> f (Document a) #

mapM :: Monad m => (a -> m b) -> Document a -> m (Document b) #

sequence :: Monad m => Document (m a) -> m (Document a) #

Functor Document Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

fmap :: (a -> b) -> Document a -> Document b #

(<$) :: a -> Document b -> Document a #

FromJSON (Document Syntax) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

ToJSON (Document Syntax) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

IsString (Document Syntax) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Monoid (Document c) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

mempty :: Document c #

mappend :: Document c -> Document c -> Document c #

mconcat :: [Document c] -> Document c #

Semigroup (Document c) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

(<>) :: Document c -> Document c -> Document c #

sconcat :: NonEmpty (Document c) -> Document c #

stimes :: Integral b => b -> Document c -> Document c #

IsList (Document a) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Associated Types

type Item (Document a) #

Methods

fromList :: [Item (Document a)] -> Document a #

fromListN :: Int -> [Item (Document a)] -> Document a #

toList :: Document a -> [Item (Document a)] #

Show c => Show (Document c) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

showsPrec :: Int -> Document c -> ShowS #

show :: Document c -> String #

showList :: [Document c] -> ShowS #

HasAttributes (Document c) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Rangeable (Document c) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

ranged :: SourceRange -> Document c -> Document c #

Eq c => Eq (Document c) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

(==) :: Document c -> Document c -> Bool #

(/=) :: Document c -> Document c -> Bool #

IsBlock (Paragraph Text) (Document Text) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

type Item (Document a) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

type Item (Document a) = Paragraph a

newtype Paragraph c Source #

Markdown paragraphs that contain inline leaf nodes.

The idea is that paragraphs do not have line breaks, and so the inline elements follow each other. In particular inline code can be followed by text without space between them (e.g. `logger`s).

Constructors

Paragraph 

Fields

Instances

Instances details
Foldable Paragraph Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

fold :: Monoid m => Paragraph m -> m #

foldMap :: Monoid m => (a -> m) -> Paragraph a -> m #

foldMap' :: Monoid m => (a -> m) -> Paragraph a -> m #

foldr :: (a -> b -> b) -> b -> Paragraph a -> b #

foldr' :: (a -> b -> b) -> b -> Paragraph a -> b #

foldl :: (b -> a -> b) -> b -> Paragraph a -> b #

foldl' :: (b -> a -> b) -> b -> Paragraph a -> b #

foldr1 :: (a -> a -> a) -> Paragraph a -> a #

foldl1 :: (a -> a -> a) -> Paragraph a -> a #

toList :: Paragraph a -> [a] #

null :: Paragraph a -> Bool #

length :: Paragraph a -> Int #

elem :: Eq a => a -> Paragraph a -> Bool #

maximum :: Ord a => Paragraph a -> a #

minimum :: Ord a => Paragraph a -> a #

sum :: Num a => Paragraph a -> a #

product :: Num a => Paragraph a -> a #

Traversable Paragraph Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

traverse :: Applicative f => (a -> f b) -> Paragraph a -> f (Paragraph b) #

sequenceA :: Applicative f => Paragraph (f a) -> f (Paragraph a) #

mapM :: Monad m => (a -> m b) -> Paragraph a -> m (Paragraph b) #

sequence :: Monad m => Paragraph (m a) -> m (Paragraph a) #

Functor Paragraph Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

fmap :: (a -> b) -> Paragraph a -> Paragraph b #

(<$) :: a -> Paragraph b -> Paragraph a #

ToJSON (Paragraph Syntax) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

IsString (Paragraph Syntax) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Monoid (Paragraph c) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Semigroup (Paragraph c) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

(<>) :: Paragraph c -> Paragraph c -> Paragraph c #

sconcat :: NonEmpty (Paragraph c) -> Paragraph c #

stimes :: Integral b => b -> Paragraph c -> Paragraph c #

Show c => Show (Paragraph c) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

HasAttributes (Paragraph c) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

IsInline (Paragraph Text) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Rangeable (Paragraph c) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

ranged :: SourceRange -> Paragraph c -> Paragraph c #

Eq c => Eq (Paragraph c) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

(==) :: Paragraph c -> Paragraph c -> Bool #

(/=) :: Paragraph c -> Paragraph c -> Bool #

PrettyPrec a => ToStream (Paragraph a) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

IsBlock (Paragraph Text) (Document Text) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

data Node c Source #

Inline leaf nodes.

The raw node is from the raw_annotation extension, and can be used for typesentitiesinvalid code.

Instances

Instances details
Foldable Node Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

fold :: Monoid m => Node m -> m #

foldMap :: Monoid m => (a -> m) -> Node a -> m #

foldMap' :: Monoid m => (a -> m) -> Node a -> m #

foldr :: (a -> b -> b) -> b -> Node a -> b #

foldr' :: (a -> b -> b) -> b -> Node a -> b #

foldl :: (b -> a -> b) -> b -> Node a -> b #

foldl' :: (b -> a -> b) -> b -> Node a -> b #

foldr1 :: (a -> a -> a) -> Node a -> a #

foldl1 :: (a -> a -> a) -> Node a -> a #

toList :: Node a -> [a] #

null :: Node a -> Bool #

length :: Node a -> Int #

elem :: Eq a => a -> Node a -> Bool #

maximum :: Ord a => Node a -> a #

minimum :: Ord a => Node a -> a #

sum :: Num a => Node a -> a #

product :: Num a => Node a -> a #

Traversable Node Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

traverse :: Applicative f => (a -> f b) -> Node a -> f (Node b) #

sequenceA :: Applicative f => Node (f a) -> f (Node a) #

mapM :: Monad m => (a -> m b) -> Node a -> m (Node b) #

sequence :: Monad m => Node (m a) -> m (Node a) #

Functor Node Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

fmap :: (a -> b) -> Node a -> Node b #

(<$) :: a -> Node b -> Node a #

Show c => Show (Node c) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

showsPrec :: Int -> Node c -> ShowS #

show :: Node c -> String #

showList :: [Node c] -> ShowS #

Eq c => Eq (Node c) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

(==) :: Node c -> Node c -> Bool #

(/=) :: Node c -> Node c -> Bool #

PrettyPrec a => ToStream (Node a) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

toStream :: Node a -> [StreamNode] Source #

data TxtAttr Source #

Simple text attributes that make it easier to find key info in descriptions.

Constructors

Strong 
Emphasis 

Instances

Instances details
Show TxtAttr Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Eq TxtAttr Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

(==) :: TxtAttr -> TxtAttr -> Bool #

(/=) :: TxtAttr -> TxtAttr -> Bool #

Ord TxtAttr Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

fromTextM :: MonadFail m => Text -> m (Document Syntax) Source #

Read Markdown document and parse&validate the code.

If you want only the document with code as Text, use the fromTextPure function.

fromText :: Text -> Document Syntax Source #

Parse Markdown document, but throw on invalid code.

docToText :: PrettyPrec a => Document a -> Text Source #

Convert Document to Text.

Note that this will strip some markdown, emphasis and bold marks. If you want to get markdown again, use docToMark.

docToMark :: PrettyPrec a => Document a -> Text Source #

Convert Document to markdown text.

Token stream

data StreamNode' t Source #

Token stream that can be easily converted to text or brick widgets.

TODO: #574 Code blocks should probably be handled separately.

Constructors

TextNode (Set TxtAttr) t 
CodeNode t 
RawNode String t 

Instances

Instances details
Functor StreamNode' Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

fmap :: (a -> b) -> StreamNode' a -> StreamNode' b #

(<$) :: a -> StreamNode' b -> StreamNode' a #

Show t => Show (StreamNode' t) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Eq t => Eq (StreamNode' t) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

class ToStream a where Source #

Convert elements to one dimensional stream of nodes, that is easy to format and layout.

If you want to split the stream at line length, use the chunksOf function afterward.

Methods

toStream :: a -> [StreamNode] Source #

Instances

Instances details
PrettyPrec a => ToStream (Node a) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

Methods

toStream :: Node a -> [StreamNode] Source #

PrettyPrec a => ToStream (Paragraph a) Source # 
Instance details

Defined in Swarm.Language.Text.Markdown

toText :: ToStream a => a -> Text Source #

This is the naive and easy way to get text from markdown document.

Utilities

chunksOf :: Int -> [StreamNode] -> [[StreamNode]] Source #

Get chunks of nodes not exceeding length and broken at word boundary.