blaze-markup-0.8.3.0: A blazingly fast markup combinator library for Haskell

Safe Haskell | None
Language | Haskell2010

Text.Blaze.Internal

Contents

- Important types.
- Creating custom tags and attributes.
- Converting values to Markup.
- Comments
- Converting values to tags.
- Converting values to attribute values.
- Setting attributes
- Modifying Markup elements
- Querying Markup elements

Description

The BlazeMarkup core, consisting of functions that offer the power to generate custom markup elements. It also offers user-centric functions, which are exposed through Text.Blaze.

While this module is exported, usage of it is not recommended, unless you know what you are doing. This module might undergo changes at any time.

Synopsis

- data ChoiceString
  - = Static !StaticString
  - | String String
  - | Text Text
  - | ByteString ByteString
  - | PreEscaped ChoiceString
  - | External ChoiceString
  - | AppendChoiceString ChoiceString ChoiceString
  - | EmptyChoiceString
- data StaticString = StaticString {
  - getString :: String -> String
  - getUtf8ByteString :: ByteString
  - getText :: Text
  }
- data MarkupM a
  - = Parent StaticString StaticString StaticString (MarkupM a)
  - | CustomParent ChoiceString (MarkupM a)
  - | Leaf StaticString StaticString StaticString a
  - | CustomLeaf ChoiceString Bool a
  - | Content ChoiceString a
  - | Comment ChoiceString a
  - | Append (MarkupM b) (MarkupM a)
  - | AddAttribute StaticString StaticString ChoiceString (MarkupM a)
  - | AddCustomAttribute ChoiceString ChoiceString (MarkupM a)
  - | Empty a
- type Markup = MarkupM ()
- data Tag
- data Attribute
- data AttributeValue
- customParent :: Tag -> Markup -> Markup
- customLeaf :: Tag -> Bool -> Markup
- attribute :: Tag -> Tag -> AttributeValue -> Attribute
- dataAttribute :: Tag -> AttributeValue -> Attribute
- customAttribute :: Tag -> AttributeValue -> Attribute
- text :: Text -> Markup
- preEscapedText :: Text -> Markup
- lazyText :: Text -> Markup
- preEscapedLazyText :: Text -> Markup
- textBuilder :: Builder -> Markup
- preEscapedTextBuilder :: Builder -> Markup
- string :: String -> Markup
- preEscapedString :: String -> Markup
- unsafeByteString :: ByteString -> Markup
- unsafeLazyByteString :: ByteString -> Markup
- textComment :: Text -> Markup
- lazyTextComment :: Text -> Markup
- stringComment :: String -> Markup
- unsafeByteStringComment :: ByteString -> Markup
- unsafeLazyByteStringComment :: ByteString -> Markup
- textTag :: Text -> Tag
- stringTag :: String -> Tag
- textValue :: Text -> AttributeValue
- preEscapedTextValue :: Text -> AttributeValue
- lazyTextValue :: Text -> AttributeValue
- preEscapedLazyTextValue :: Text -> AttributeValue
- textBuilderValue :: Builder -> AttributeValue
- preEscapedTextBuilderValue :: Builder -> AttributeValue
- stringValue :: String -> AttributeValue
- preEscapedStringValue :: String -> AttributeValue
- unsafeByteStringValue :: ByteString -> AttributeValue
- unsafeLazyByteStringValue :: ByteString -> AttributeValue
- class Attributable h
- (!) :: Attributable h => h -> Attribute -> h
- (!?) :: Attributable h => h -> (Bool, Attribute) -> h
- contents :: MarkupM a -> MarkupM a
- external :: MarkupM a -> MarkupM a
- null :: MarkupM a -> Bool

# Important types.

data ChoiceString Source #

A string denoting input from different string representations.

Constructors

Static !StaticString | Static data
String String | A Haskell String
Text Text | A Text value
ByteString ByteString | An encoded bytestring
PreEscaped ChoiceString | A pre-escaped string
External ChoiceString | External data in style/script tags, should be checked for validity
AppendChoiceString ChoiceString ChoiceString | Concatenation
EmptyChoiceString | Empty string

#### Instances

Instances details

Monoid ChoiceString Source # |
Instance details Defined in Text.Blaze.Internal Methods mempty :: ChoiceString Source # mappend :: ChoiceString -> ChoiceString -> ChoiceString Source # mconcat :: [ChoiceString] -> ChoiceString Source #
Semigroup ChoiceString Source # |
Instance details Defined in Text.Blaze.Internal Methods (<>) :: ChoiceString -> ChoiceString -> ChoiceString Source # sconcat :: NonEmpty ChoiceString -> ChoiceString Source # stimes :: Integral b => b -> ChoiceString -> ChoiceString Source #
IsString ChoiceString Source # |
Instance details Defined in Text.Blaze.Internal Methods fromString :: String -> ChoiceString Source #

data StaticString Source #

A static string that supports efficient output to all possible backends.

Constructors

StaticString |

Fields

- getString :: String -> String

  Appending haskell string

- getUtf8ByteString :: ByteString

  UTF-8 encoded bytestring

- getText :: Text

  Text value

#### Instances

Instances details

IsString StaticString Source # |
Instance details Defined in Text.Blaze.Internal Methods fromString :: String -> StaticString Source #

data MarkupM a Source #

The core Markup datatype.

Constructors

Parent StaticString StaticString StaticString (MarkupM a) | Tag, open tag, end tag, content
CustomParent ChoiceString (MarkupM a) | Custom parent
Leaf StaticString StaticString StaticString a | Tag, open tag, end tag
CustomLeaf ChoiceString Bool a | Custom leaf
Content ChoiceString a | HTML content
Comment ChoiceString a | HTML comment. Note: you should wrap the `ChoiceString` in a `PreEscaped`.
Append (MarkupM b) (MarkupM a) | Concatenation of two HTML pieces
AddAttribute StaticString StaticString ChoiceString (MarkupM a) | Add an attribute to the inner HTML. Raw key, key, value, HTML to receive the attribute.
AddCustomAttribute ChoiceString ChoiceString (MarkupM a) | Add a custom attribute to the inner HTML.
Empty a | Empty HTML.

#### Instances

Instances details

ToMarkup Markup Source # |
Instance details Defined in Text.Blaze Methods toMarkup :: Markup -> Markup Source # preEscapedToMarkup :: Markup -> Markup Source #
Applicative MarkupM Source # |
Instance details Defined in Text.Blaze.Internal Methods pure :: a -> MarkupM a Source # (<*>) :: MarkupM (a -> b) -> MarkupM a -> MarkupM b Source # liftA2 :: (a -> b -> c) -> MarkupM a -> MarkupM b -> MarkupM c Source # (*>) :: MarkupM a -> MarkupM b -> MarkupM b Source # (<*) :: MarkupM a -> MarkupM b -> MarkupM a Source #
Functor MarkupM Source # |
Instance details Defined in Text.Blaze.Internal Methods fmap :: (a -> b) -> MarkupM a -> MarkupM b Source # (<$) :: a -> MarkupM b -> MarkupM a Source #
Monad MarkupM Source # |
Instance details Defined in Text.Blaze.Internal Methods (>>=) :: MarkupM a -> (a -> MarkupM b) -> MarkupM b Source # (>>) :: MarkupM a -> MarkupM b -> MarkupM b Source # return :: a -> MarkupM a Source #
ToMarkup [Markup] Source # |
Instance details Defined in Text.Blaze Methods toMarkup :: [Markup] -> Markup Source # preEscapedToMarkup :: [Markup] -> Markup Source #
Attributable (MarkupM a) Source # |
Instance details Defined in Text.Blaze.Internal Methods (!) :: MarkupM a -> Attribute -> MarkupM a Source #
Monoid a => Monoid (MarkupM a) Source # |
Instance details Defined in Text.Blaze.Internal Methods mempty :: MarkupM a Source # mappend :: MarkupM a -> MarkupM a -> MarkupM a Source # mconcat :: [MarkupM a] -> MarkupM a Source #
Monoid a => Semigroup (MarkupM a) Source # |
Instance details Defined in Text.Blaze.Internal Methods (<>) :: MarkupM a -> MarkupM a -> MarkupM a Source # sconcat :: NonEmpty (MarkupM a) -> MarkupM a Source # stimes :: Integral b => b -> MarkupM a -> MarkupM a Source #
a ~ () => IsString (MarkupM a) Source # |
Instance details Defined in Text.Blaze.Internal Methods fromString :: String -> MarkupM a Source #
Attributable (MarkupM a -> MarkupM b) Source # |
Instance details Defined in Text.Blaze.Internal Methods (!) :: (MarkupM a -> MarkupM b) -> Attribute -> MarkupM a -> MarkupM b Source #

type Markup = MarkupM () Source #

Simplification of the `MarkupM` datatype.

data Tag Source #

Type for an HTML tag. This can be seen as an internal string type used by BlazeMarkup.

#### Instances

Instances details

IsString Tag Source # |
Instance details Defined in Text.Blaze.Internal Methods fromString :: String -> Tag Source #

data Attribute Source #

Type for an attribute.

#### Instances

Instances details

Monoid Attribute Source # |
Instance details Defined in Text.Blaze.Internal Methods mempty :: Attribute Source # mappend :: Attribute -> Attribute -> Attribute Source # mconcat :: [Attribute] -> Attribute Source #
Semigroup Attribute Source # |
Instance details Defined in Text.Blaze.Internal Methods (<>) :: Attribute -> Attribute -> Attribute Source # sconcat :: NonEmpty Attribute -> Attribute Source # stimes :: Integral b => b -> Attribute -> Attribute Source #

data AttributeValue Source #

The type for the value part of an attribute.

#### Instances

Instances details

ToValue AttributeValue Source # |
Instance details Defined in Text.Blaze Methods toValue :: AttributeValue -> AttributeValue Source # preEscapedToValue :: AttributeValue -> AttributeValue Source #
Monoid AttributeValue Source # |
Instance details Defined in Text.Blaze.Internal Methods mempty :: AttributeValue Source # mappend :: AttributeValue -> AttributeValue -> AttributeValue Source # mconcat :: [AttributeValue] -> AttributeValue Source #
Semigroup AttributeValue Source # |
Instance details Defined in Text.Blaze.Internal Methods (<>) :: AttributeValue -> AttributeValue -> AttributeValue Source # sconcat :: NonEmpty AttributeValue -> AttributeValue Source # stimes :: Integral b => b -> AttributeValue -> AttributeValue Source #
IsString AttributeValue Source # |
Instance details Defined in Text.Blaze.Internal Methods fromString :: String -> AttributeValue Source #

# Creating custom tags and attributes.

customParent Source #

Arguments

:: Tag | Element tag
-> Markup | Content
-> Markup | Resulting markup

Create a custom parent element

customLeaf Source #

Arguments

:: Tag | Element tag
-> Bool | Close the leaf?
-> Markup | Resulting markup

Create a custom leaf element

attribute Source #

Arguments

:: Tag | Raw key
-> Tag | Shared key string for the HTML attribute.
-> AttributeValue | Value for the HTML attribute.
-> Attribute | Resulting HTML attribute.

Create an HTML attribute that can be applied to an HTML element later using the `!` operator.

dataAttribute Source #

Arguments

:: Tag | Name of the attribute.
-> AttributeValue | Value for the attribute.
-> Attribute | Resulting HTML attribute.

From HTML 5 onwards, the user is able to specify custom data attributes.

An example:

    <p data-foo="bar">Hello.</p>

We support this in BlazeMarkup using this function. The above fragment could be described using BlazeMarkup with:

    p ! dataAttribute "foo" "bar" $ "Hello."

customAttribute Source #

Arguments

:: Tag | Name of the attribute
-> AttributeValue | Value for the attribute
-> Attribute | Resulting HTML attribtue

Create a custom attribute. This is not specified in the HTML spec, but some JavaScript libraries rely on it.

An example:

    <select dojoType="select">foo</select>

Can be produced using:

    select ! customAttribute "dojoType" "select" $ "foo"

# Converting values to Markup.

text Source #

Arguments

:: Text | Text to render.
-> Markup | Resulting HTML fragment.

Render text. Functions like these can be used to supply content in HTML.

preEscapedText Source #

Arguments

:: Text | Text to insert
-> Markup | Resulting HTML fragment

Render text without escaping.

lazyText Source #

Arguments

:: Text | Text to insert
-> Markup | Resulting HTML fragment

A variant of `text` for lazy `Text`.

preEscapedLazyText Source #

Arguments

:: Text | Text to insert
-> Markup | Resulting HTML fragment

A variant of `preEscapedText` for lazy `Text`

textBuilder Source #

Arguments

:: Builder | Text to insert
-> Markup | Resulting HTML fragment

A variant of `text` for text `Builder`.

preEscapedTextBuilder Source #

Arguments

:: Builder | Text to insert
-> Markup | Resulting HTML fragment

A variant of `preEscapedText` for lazy `Text`

string Source #

Arguments

:: String | String to insert.
-> Markup | Resulting HTML fragment.

Create an HTML snippet from a `String`.

preEscapedString Source #

Arguments

:: String | String to insert.
-> Markup | Resulting HTML fragment.

Create an HTML snippet from a `String` without escaping

unsafeByteString Source #

Arguments

:: ByteString | Value to insert.
-> Markup | Resulting HTML fragment.

Insert a `ByteString`. This is an unsafe operation:

- The `ByteString` could have the wrong encoding.
- The `ByteString` might contain illegal HTML characters (no escaping is done).

unsafeLazyByteString Source #

Arguments

:: ByteString | Value to insert
-> Markup | Resulting HTML fragment

Insert a lazy `ByteString`. See `unsafeByteString` for reasons why this is an unsafe operation.

# Comments

textComment :: Text -> Markup Source #

Create a comment from a `Text` value. The text should not contain `"--"`. This is not checked by the library.

lazyTextComment :: Text -> Markup Source #

Create a comment from a `Text` value. The text should not contain `"--"`. This is not checked by the library.

stringComment :: String -> Markup Source #

Create a comment from a `String` value. The text should not contain `"--"`. This is not checked by the library.

unsafeByteStringComment :: ByteString -> Markup Source #

Create a comment from a `ByteString` value. The text should not contain `"--"`. This is not checked by the library.

unsafeLazyByteStringComment :: ByteString -> Markup Source #

Create a comment from a `ByteString` value. The text should not contain `"--"`. This is not checked by the library.

# Converting values to tags.

textTag Source #

Arguments

:: Text | Text to create a tag from
-> Tag | Resulting tag

Create a `Tag` from some `Text`.

stringTag Source #

Arguments

:: String | String to create a tag from
-> Tag | Resulting tag

Create a `Tag` from a `String`.

# Converting values to attribute values.

textValue Source #

Arguments

:: Text | The actual value.
-> AttributeValue | Resulting attribute value.

Render an attribute value from `Text`.

preEscapedTextValue Source #

Arguments

:: Text | The actual value
-> AttributeValue | Resulting attribute value

Render an attribute value from `Text` without escaping.

lazyTextValue Source #

Arguments

:: Text | The actual value
-> AttributeValue | Resulting attribute value

A variant of `textValue` for lazy `Text`

preEscapedLazyTextValue Source #

Arguments

:: Text | The actual value
-> AttributeValue | Resulting attribute value

A variant of `preEscapedTextValue` for lazy `Text`

textBuilderValue Source #

Arguments

:: Builder | The actual value
-> AttributeValue | Resulting attribute value

A variant of `textValue` for text `Builder`

preEscapedTextBuilderValue Source #

Arguments

:: Builder | The actual value
-> AttributeValue | Resulting attribute value

A variant of `preEscapedTextValue` for text `Builder`

stringValue :: String -> AttributeValue Source #

Create an attribute value from a `String`.

preEscapedStringValue :: String -> AttributeValue Source #

Create an attribute value from a `String` without escaping.

unsafeByteStringValue Source #

Arguments

:: ByteString | ByteString value
-> AttributeValue | Resulting attribute value

Create an attribute value from a `ByteString`. See `unsafeByteString` for reasons why this might not be a good idea.

unsafeLazyByteStringValue Source #

Arguments

:: ByteString | ByteString value
-> AttributeValue | Resulting attribute value

Create an attribute value from a lazy `ByteString`. See `unsafeByteString` for reasons why this might not be a good idea.

# Setting attributes

class Attributable h Source #

Used for applying attributes. You should not define your own instances of this class.

Minimal complete definition

(!)

#### Instances

Instances details

Attributable (MarkupM a) Source # |
Instance details Defined in Text.Blaze.Internal Methods (!) :: MarkupM a -> Attribute -> MarkupM a Source #
Attributable (MarkupM a -> MarkupM b) Source # |
Instance details Defined in Text.Blaze.Internal Methods (!) :: (MarkupM a -> MarkupM b) -> Attribute -> MarkupM a -> MarkupM b Source #

(!) :: Attributable h => h -> Attribute -> h Source #

Apply an attribute to an element.

Example:

    img ! src "foo.png"

Result:

    <img src="foo.png" />

This can be used on nested elements as well.

Example:

    p ! style "float: right" $ "Hello!"

Result:

    <p style="float: right">Hello!</p>

(!?) :: Attributable h => h -> (Bool, Attribute) -> h Source #

Shorthand for setting an attribute depending on a conditional.

Example:

    p !? (isBig, A.class "big") $ "Hello"

Gives the same result as:

    (if isBig then p ! A.class "big" else p) "Hello"

# Modifying Markup elements

contents :: MarkupM a -> MarkupM a Source #

Take only the text content of an HTML tree.

    contents $ do
        p ! $ "Hello "
        p ! $ "Word!"

Result:

    Hello World!

external :: MarkupM a -> MarkupM a Source #

Mark HTML as external data. External data can be:

- CSS data in a `style` tag;
- Script data in a `script` tag.

This function is applied automatically when using the `style` or `script` combinators.

# Querying Markup elements

null :: MarkupM a -> Bool Source #

Check if a `Markup` value is completely empty (renders to the empty string).