packages feed

morley-1.3.0: src/Util/IO/GHC.hs

-- SPDX-FileCopyrightText: 2002 The University Court of the University of Glasgow
--
-- SPDX-License-Identifier: LicenseRef-BSD-3-Clause-GHC

module Util.IO.GHC
  ( hSetTranslit
  ) where

import GHC.IO.Encoding (textEncodingName)
import System.IO (hGetEncoding, hSetEncoding, mkTextEncoding)


-- This function was copied (with slight modifications) from
-- <https://gitlab.haskell.org/ghc/ghc/blob/7105fb66a7bacf822f7f23028136f89ff5737d0e/libraries/ghc-boot/GHC/HandleEncoding.hs>

-- | Change the character encoding of the given Handle to transliterate
-- on unsupported characters instead of throwing an exception.
hSetTranslit :: Handle -> IO ()
hSetTranslit h = do
    menc <- hGetEncoding h
    case fmap textEncodingName menc of
        Just name | '/' `notElem` name -> do
            enc' <- mkTextEncoding $ name ++ "//TRANSLIT"
            hSetEncoding h enc'
        _ -> pass