This file is indexed.

/usr/share/doc/libghc-hledger-lib-doc/html/src/Hledger-Utils-UTF8IOCompat.html is in libghc-hledger-lib-doc 0.22-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->
<title>Hledger/Utils/UTF8IOCompat.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE CPP #-}</span>
<a name="line-2"></a><span class='hs-comment'>{- |
<a name="line-3"></a>
<a name="line-4"></a>UTF-8 aware string IO functions that will work across multiple platforms
<a name="line-5"></a>and GHC versions. Includes code from Text.Pandoc.UTF8 ((C) 2010 John
<a name="line-6"></a>MacFarlane).
<a name="line-7"></a>
<a name="line-8"></a>Example usage:
<a name="line-9"></a>
<a name="line-10"></a> import Prelude hiding (readFile,writeFile,appendFile,getContents,putStr,putStrLn)
<a name="line-11"></a> import UTF8IOCompat   (readFile,writeFile,appendFile,getContents,putStr,putStrLn)
<a name="line-12"></a> import UTF8IOCompat   (SystemString,fromSystemString,toSystemString,error',userError')
<a name="line-13"></a>
<a name="line-14"></a>2013/4/10 update: we now trust that current GHC versions &amp; platforms
<a name="line-15"></a>do the right thing, so this file is a no-op and on its way to being removed.
<a name="line-16"></a>Not carefully tested.
<a name="line-17"></a>
<a name="line-18"></a>-}</span>
<a name="line-19"></a>
<a name="line-20"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Hledger</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span><span class='hs-varop'>.</span><span class='hs-conid'>UTF8IOCompat</span> <span class='hs-layout'>(</span>
<a name="line-21"></a>  <span class='hs-varid'>readFile</span><span class='hs-layout'>,</span>
<a name="line-22"></a>  <span class='hs-varid'>writeFile</span><span class='hs-layout'>,</span>
<a name="line-23"></a>  <span class='hs-varid'>appendFile</span><span class='hs-layout'>,</span>
<a name="line-24"></a>  <span class='hs-varid'>getContents</span><span class='hs-layout'>,</span>
<a name="line-25"></a>  <span class='hs-varid'>hGetContents</span><span class='hs-layout'>,</span>
<a name="line-26"></a>  <span class='hs-varid'>putStr</span><span class='hs-layout'>,</span>
<a name="line-27"></a>  <span class='hs-varid'>putStrLn</span><span class='hs-layout'>,</span>
<a name="line-28"></a>  <span class='hs-varid'>hPutStr</span><span class='hs-layout'>,</span>
<a name="line-29"></a>  <span class='hs-varid'>hPutStrLn</span><span class='hs-layout'>,</span>
<a name="line-30"></a>  <span class='hs-comment'>--</span>
<a name="line-31"></a>  <span class='hs-conid'>SystemString</span><span class='hs-layout'>,</span>
<a name="line-32"></a>  <span class='hs-varid'>fromSystemString</span><span class='hs-layout'>,</span>
<a name="line-33"></a>  <span class='hs-varid'>toSystemString</span><span class='hs-layout'>,</span>
<a name="line-34"></a>  <span class='hs-varid'>error'</span><span class='hs-layout'>,</span>
<a name="line-35"></a>  <span class='hs-varid'>userError'</span><span class='hs-layout'>,</span>
<a name="line-36"></a><span class='hs-layout'>)</span>
<a name="line-37"></a><span class='hs-keyword'>where</span>
<a name="line-38"></a>
<a name="line-39"></a><span class='hs-comment'>-- import Control.Monad (liftM)</span>
<a name="line-40"></a><span class='hs-comment'>-- import qualified Data.ByteString.Lazy as B</span>
<a name="line-41"></a><span class='hs-comment'>-- import qualified Data.ByteString.Lazy.Char8 as B8</span>
<a name="line-42"></a><span class='hs-comment'>-- import qualified Data.ByteString.Lazy.UTF8 as U8 (toString, fromString)</span>
<a name="line-43"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Prelude</span> <span class='hs-varid'>hiding</span> <span class='hs-layout'>(</span><span class='hs-varid'>readFile</span><span class='hs-layout'>,</span> <span class='hs-varid'>writeFile</span><span class='hs-layout'>,</span> <span class='hs-varid'>appendFile</span><span class='hs-layout'>,</span> <span class='hs-varid'>getContents</span><span class='hs-layout'>,</span> <span class='hs-varid'>putStr</span><span class='hs-layout'>,</span> <span class='hs-varid'>putStrLn</span><span class='hs-layout'>)</span>
<a name="line-44"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span> <span class='hs-comment'>-- (Handle)</span>
<a name="line-45"></a><span class='hs-comment'>-- #if __GLASGOW_HASKELL__ &lt; 702</span>
<a name="line-46"></a><span class='hs-comment'>-- import Codec.Binary.UTF8.String as UTF8 (decodeString, encodeString, isUTF8Encoded)</span>
<a name="line-47"></a><span class='hs-comment'>-- import System.Info (os)</span>
<a name="line-48"></a><span class='hs-comment'>-- #endif</span>
<a name="line-49"></a>
<a name="line-50"></a><span class='hs-comment'>-- bom :: B.ByteString</span>
<a name="line-51"></a><span class='hs-comment'>-- bom = B.pack [0xEF, 0xBB, 0xBF]</span>
<a name="line-52"></a>
<a name="line-53"></a><span class='hs-comment'>-- stripBOM :: B.ByteString -&gt; B.ByteString</span>
<a name="line-54"></a><span class='hs-comment'>-- stripBOM s | bom `B.isPrefixOf` s = B.drop 3 s</span>
<a name="line-55"></a><span class='hs-comment'>-- stripBOM s = s</span>
<a name="line-56"></a>
<a name="line-57"></a><span class='hs-comment'>-- readFile :: FilePath -&gt; IO String</span>
<a name="line-58"></a><span class='hs-comment'>-- readFile = liftM (U8.toString . stripBOM) . B.readFile</span>
<a name="line-59"></a>
<a name="line-60"></a><span class='hs-comment'>-- writeFile :: FilePath -&gt; String -&gt; IO ()</span>
<a name="line-61"></a><span class='hs-comment'>-- writeFile f = B.writeFile f . U8.fromString</span>
<a name="line-62"></a>
<a name="line-63"></a><span class='hs-comment'>-- appendFile :: FilePath -&gt; String -&gt; IO ()</span>
<a name="line-64"></a><span class='hs-comment'>-- appendFile f = B.appendFile f . U8.fromString</span>
<a name="line-65"></a>
<a name="line-66"></a><span class='hs-comment'>-- getContents :: IO String</span>
<a name="line-67"></a><span class='hs-comment'>-- getContents = liftM (U8.toString . stripBOM) B.getContents</span>
<a name="line-68"></a>
<a name="line-69"></a><span class='hs-comment'>-- hGetContents :: Handle -&gt; IO String</span>
<a name="line-70"></a><span class='hs-comment'>-- hGetContents h = liftM (U8.toString . stripBOM) (B.hGetContents h)</span>
<a name="line-71"></a>
<a name="line-72"></a><span class='hs-comment'>-- putStr :: String -&gt; IO ()</span>
<a name="line-73"></a><span class='hs-comment'>-- putStr = bs_putStr . U8.fromString</span>
<a name="line-74"></a>
<a name="line-75"></a><span class='hs-comment'>-- putStrLn :: String -&gt; IO ()</span>
<a name="line-76"></a><span class='hs-comment'>-- putStrLn = bs_putStrLn . U8.fromString</span>
<a name="line-77"></a>
<a name="line-78"></a><span class='hs-comment'>-- hPutStr :: Handle -&gt; String -&gt; IO ()</span>
<a name="line-79"></a><span class='hs-comment'>-- hPutStr h = bs_hPutStr h . U8.fromString</span>
<a name="line-80"></a>
<a name="line-81"></a><span class='hs-comment'>-- hPutStrLn :: Handle -&gt; String -&gt; IO ()</span>
<a name="line-82"></a><span class='hs-comment'>-- hPutStrLn h = bs_hPutStrLn h . U8.fromString</span>
<a name="line-83"></a>
<a name="line-84"></a><span class='hs-comment'>-- -- span GHC versions including 6.12.3 - 7.4.1:</span>
<a name="line-85"></a><span class='hs-comment'>-- bs_putStr         = B8.putStr</span>
<a name="line-86"></a><span class='hs-comment'>-- bs_putStrLn       = B8.putStrLn</span>
<a name="line-87"></a><span class='hs-comment'>-- bs_hPutStr        = B8.hPut</span>
<a name="line-88"></a><span class='hs-comment'>-- bs_hPutStrLn h bs = B8.hPut h bs &gt;&gt; B8.hPut h (B.singleton 0x0a)</span>
<a name="line-89"></a>
<a name="line-90"></a>
<a name="line-91"></a><a name="SystemString"></a><span class='hs-comment'>-- | A string received from or being passed to the operating system, such</span>
<a name="line-92"></a><a name="SystemString"></a><span class='hs-comment'>-- as a file path, command-line argument, or environment variable name or</span>
<a name="line-93"></a><a name="SystemString"></a><span class='hs-comment'>-- value. With GHC versions before 7.2 on some platforms (posix) these are</span>
<a name="line-94"></a><a name="SystemString"></a><span class='hs-comment'>-- typically encoded. When converting, we assume the encoding is UTF-8 (cf</span>
<a name="line-95"></a><a name="SystemString"></a><span class='hs-comment'>-- &lt;<a href="http://www.dwheeler.com/essays/fixing-unix-linux-filenames.html#UTF8">http://www.dwheeler.com/essays/fixing-unix-linux-filenames.html#UTF8</a>&gt;).</span>
<a name="line-96"></a><a name="SystemString"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>SystemString</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>String</span>
<a name="line-97"></a>
<a name="line-98"></a><a name="fromSystemString"></a><span class='hs-comment'>-- | Convert a system string to an ordinary string, decoding from UTF-8 if</span>
<a name="line-99"></a><span class='hs-comment'>-- it appears to be UTF8-encoded and GHC version is less than 7.2.</span>
<a name="line-100"></a><span class='hs-definition'>fromSystemString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>SystemString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-101"></a><span class='hs-comment'>-- #if __GLASGOW_HASKELL__ &lt; 702</span>
<a name="line-102"></a><span class='hs-comment'>-- fromSystemString s = if UTF8.isUTF8Encoded s then UTF8.decodeString s else s</span>
<a name="line-103"></a><span class='hs-comment'>-- #else</span>
<a name="line-104"></a><span class='hs-definition'>fromSystemString</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>id</span>
<a name="line-105"></a><span class='hs-comment'>-- #endif</span>
<a name="line-106"></a>
<a name="line-107"></a><a name="toSystemString"></a><span class='hs-comment'>-- | Convert a unicode string to a system string, encoding with UTF-8 if</span>
<a name="line-108"></a><span class='hs-comment'>-- we are on a posix platform with GHC &lt; 7.2.</span>
<a name="line-109"></a><span class='hs-definition'>toSystemString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>SystemString</span>
<a name="line-110"></a><span class='hs-comment'>-- #if __GLASGOW_HASKELL__ &lt; 702</span>
<a name="line-111"></a><span class='hs-comment'>-- toSystemString = case os of</span>
<a name="line-112"></a><span class='hs-comment'>--                      "unix" -&gt; UTF8.encodeString</span>
<a name="line-113"></a><span class='hs-comment'>--                      "linux" -&gt; UTF8.encodeString</span>
<a name="line-114"></a><span class='hs-comment'>--                      "darwin" -&gt; UTF8.encodeString</span>
<a name="line-115"></a><span class='hs-comment'>--                      _ -&gt; id</span>
<a name="line-116"></a><span class='hs-comment'>-- #else</span>
<a name="line-117"></a><span class='hs-definition'>toSystemString</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>id</span>
<a name="line-118"></a><span class='hs-comment'>-- #endif</span>
<a name="line-119"></a>
<a name="line-120"></a><a name="error'"></a><span class='hs-comment'>-- | A SystemString-aware version of error.</span>
<a name="line-121"></a><span class='hs-definition'>error'</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span>
<a name="line-122"></a><span class='hs-definition'>error'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>error</span> <span class='hs-varop'>.</span> <span class='hs-varid'>toSystemString</span>
<a name="line-123"></a>
<a name="line-124"></a><a name="userError'"></a><span class='hs-comment'>-- | A SystemString-aware version of userError.</span>
<a name="line-125"></a><span class='hs-definition'>userError'</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IOError</span>
<a name="line-126"></a><span class='hs-definition'>userError'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>userError</span> <span class='hs-varop'>.</span> <span class='hs-varid'>toSystemString</span>
</pre></body>
</html>