idna2008-0.0.1.0: Data/Text/IDNA2008.hs
-- |
-- Module: $Header$
-- Description: Encoding hostnames according to IDNA2008
-- Copyright: Copyright © 2011 Jon Kristensen
-- License: BSD3
--
-- Maintainer: jon.kristensen@pontarius.org
-- Stability: unstable
-- Portability: portable
--
-- Makes a Unicode hostname internationalized. The code is currently prototyped
-- and untested.
module Data.Text.IDNA2008 (toASCII) where
import Data.List (intersperse)
import Data.List.Split (splitOn)
import Data.Maybe (fromJust)
import Data.Text.Punycode (encode)
-- |
-- Converts a Unicode hostname into an internationalized ASCII hostname.
toASCII :: String -> Maybe String
toASCII t = if Nothing `elem` encodedLabels
then Nothing
else Just encodedHostname
where
labels :: [String]
labels = splitOn "." t
encodedLabels :: [Maybe String]
encodedLabels = map encode labels
encodedHostname :: String
encodedHostname = concat $ intersperse "." $ map fromJust encodedLabels