module HaskellWorks.Data.Xml.Internal.Words where

import Data.Word
import Data.Word8

isLeadingDigit :: Word8 -> Bool
isLeadingDigit w = w == _hyphen || (w >= _0 && w <= _9)

isTrailingDigit :: Word8 -> Bool
isTrailingDigit w = w == _plus || w == _hyphen || (w >= _0 && w <= _9) || w == _period || w == _E || w == _e

isAlphabetic :: Word8 -> Bool
isAlphabetic w = (w >= _A && w <= _Z) || (w >= _a && w <= _z)

isQuote :: Word8 -> Bool
isQuote w = w == _quotedbl || w == _quotesingle

isNameStartChar :: Word8 -> Bool
isNameStartChar w = w == _underscore || w == _colon || isAlphabetic w
                 || w `isIn` (0xc0, 0xd6)
                 || w `isIn` (0xd8, 0xf6)
                 || w `isIn` (0xf8, 0xff)

isNameChar :: Word8 -> Bool
isNameChar w = isNameStartChar w || w == _hyphen || w == _period
            || w == 0xb7 || w `isIn` (0, 9)

isXml :: Word8 -> Bool
isXml w = w == _less || w == _greater

isTextStart :: Word8 -> Bool
isTextStart w = not (isSpace w) && w /= _less && w /= _greater

isIn :: Word8 -> (Word8, Word8) -> Bool
isIn w (s, e) = w >= s && w <= e
{-# INLINE isIn #-}