-- ------------------------------------------------------------

{- |
   Module     : Text.XML.HXT.DOM.UTF8Decoding
   Copyright  : Copyright (C) 2005 Uwe Schmidt
   License    : MIT

   Maintainer : Uwe Schmidt (uwe@fh-wedel.de)
   Stability  : stable
   Portability: portable
   Version    : $Id$

   Interface for Data.Char.UTF8 funtions

-}

-- ------------------------------------------------------------

module Text.XML.HXT.DOM.UTF8Decoding (
   decodeUtf8,
   decodeUtf8EmbedErrors,
   )
where

import qualified Data.Char.UTF8 as UTF8
import Data.Word (Word8)

-- | calls 'Data.Char.UTF8.decode' for parsing and decoding UTF-8

decodeUtf8	:: String -> (String, [String])
decodeUtf8 str
    = (res, map (uncurry toErrStr) errs)
    where
    (res, errs) = UTF8.decode . stringToByteString $ str

decodeUtf8EmbedErrors	:: String -> [Either String Char]
decodeUtf8EmbedErrors str
    = map (either (Left . uncurry toErrStr) Right) $
      UTF8.decodeEmbedErrors $ stringToByteString $ str

stringToByteString :: String -> [Word8]
stringToByteString = map (toEnum . fromEnum)

toErrStr :: UTF8.Error -> Int -> String
toErrStr err pos
	= " at input position " ++ show pos ++ ": " ++ show err

-- ------------------------------------------------------------