{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}

-- | Defines supporting types.
module Zenacy.HTML.Internal.Types
  ( HTMLNamespace(..)
  , HTMLAttrNamespace(..)
  ) where

import Data.Default
  ( Default(..)
  )

-- | An HTML namespace type.
data HTMLNamespace
  = HTMLNamespaceHTML
  | HTMLNamespaceSVG
  | HTMLNamespaceMathML
    deriving (HTMLNamespace -> HTMLNamespace -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: HTMLNamespace -> HTMLNamespace -> Bool
$c/= :: HTMLNamespace -> HTMLNamespace -> Bool
== :: HTMLNamespace -> HTMLNamespace -> Bool
$c== :: HTMLNamespace -> HTMLNamespace -> Bool
Eq, Eq HTMLNamespace
HTMLNamespace -> HTMLNamespace -> Bool
HTMLNamespace -> HTMLNamespace -> Ordering
HTMLNamespace -> HTMLNamespace -> HTMLNamespace
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: HTMLNamespace -> HTMLNamespace -> HTMLNamespace
$cmin :: HTMLNamespace -> HTMLNamespace -> HTMLNamespace
max :: HTMLNamespace -> HTMLNamespace -> HTMLNamespace
$cmax :: HTMLNamespace -> HTMLNamespace -> HTMLNamespace
>= :: HTMLNamespace -> HTMLNamespace -> Bool
$c>= :: HTMLNamespace -> HTMLNamespace -> Bool
> :: HTMLNamespace -> HTMLNamespace -> Bool
$c> :: HTMLNamespace -> HTMLNamespace -> Bool
<= :: HTMLNamespace -> HTMLNamespace -> Bool
$c<= :: HTMLNamespace -> HTMLNamespace -> Bool
< :: HTMLNamespace -> HTMLNamespace -> Bool
$c< :: HTMLNamespace -> HTMLNamespace -> Bool
compare :: HTMLNamespace -> HTMLNamespace -> Ordering
$ccompare :: HTMLNamespace -> HTMLNamespace -> Ordering
Ord, Int -> HTMLNamespace -> ShowS
[HTMLNamespace] -> ShowS
HTMLNamespace -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [HTMLNamespace] -> ShowS
$cshowList :: [HTMLNamespace] -> ShowS
show :: HTMLNamespace -> String
$cshow :: HTMLNamespace -> String
showsPrec :: Int -> HTMLNamespace -> ShowS
$cshowsPrec :: Int -> HTMLNamespace -> ShowS
Show)

-- | An HTML attribute namespace type.
data HTMLAttrNamespace
  = HTMLAttrNamespaceNone
  | HTMLAttrNamespaceXLink
  | HTMLAttrNamespaceXML
  | HTMLAttrNamespaceXMLNS
    deriving (HTMLAttrNamespace -> HTMLAttrNamespace -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: HTMLAttrNamespace -> HTMLAttrNamespace -> Bool
$c/= :: HTMLAttrNamespace -> HTMLAttrNamespace -> Bool
== :: HTMLAttrNamespace -> HTMLAttrNamespace -> Bool
$c== :: HTMLAttrNamespace -> HTMLAttrNamespace -> Bool
Eq, Eq HTMLAttrNamespace
HTMLAttrNamespace -> HTMLAttrNamespace -> Bool
HTMLAttrNamespace -> HTMLAttrNamespace -> Ordering
HTMLAttrNamespace -> HTMLAttrNamespace -> HTMLAttrNamespace
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: HTMLAttrNamespace -> HTMLAttrNamespace -> HTMLAttrNamespace
$cmin :: HTMLAttrNamespace -> HTMLAttrNamespace -> HTMLAttrNamespace
max :: HTMLAttrNamespace -> HTMLAttrNamespace -> HTMLAttrNamespace
$cmax :: HTMLAttrNamespace -> HTMLAttrNamespace -> HTMLAttrNamespace
>= :: HTMLAttrNamespace -> HTMLAttrNamespace -> Bool
$c>= :: HTMLAttrNamespace -> HTMLAttrNamespace -> Bool
> :: HTMLAttrNamespace -> HTMLAttrNamespace -> Bool
$c> :: HTMLAttrNamespace -> HTMLAttrNamespace -> Bool
<= :: HTMLAttrNamespace -> HTMLAttrNamespace -> Bool
$c<= :: HTMLAttrNamespace -> HTMLAttrNamespace -> Bool
< :: HTMLAttrNamespace -> HTMLAttrNamespace -> Bool
$c< :: HTMLAttrNamespace -> HTMLAttrNamespace -> Bool
compare :: HTMLAttrNamespace -> HTMLAttrNamespace -> Ordering
$ccompare :: HTMLAttrNamespace -> HTMLAttrNamespace -> Ordering
Ord, Int -> HTMLAttrNamespace -> ShowS
[HTMLAttrNamespace] -> ShowS
HTMLAttrNamespace -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [HTMLAttrNamespace] -> ShowS
$cshowList :: [HTMLAttrNamespace] -> ShowS
show :: HTMLAttrNamespace -> String
$cshow :: HTMLAttrNamespace -> String
showsPrec :: Int -> HTMLAttrNamespace -> ShowS
$cshowsPrec :: Int -> HTMLAttrNamespace -> ShowS
Show)

-- | Defines a default namespace.
instance Default HTMLNamespace where
  def :: HTMLNamespace
def = HTMLNamespace
HTMLNamespaceHTML

-- | Defines a default attribute namespace.
instance Default HTMLAttrNamespace where
  def :: HTMLAttrNamespace
def = HTMLAttrNamespace
HTMLAttrNamespaceNone