Avoid attoparsec dependency for this simple parsing task

This commit is contained in:
Joachim Breitner 2016-10-07 15:06:03 -04:00
parent e4e120bb8e
commit feec53c78c
2 changed files with 12 additions and 18 deletions

View File

@ -20,9 +20,9 @@ module XMonad.Prompt.Unicode (
) where ) where
import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Char8 as BS
import Data.Attoparsec.ByteString.Char8 hiding (take)
import Data.Char import Data.Char
import Control.Applicative import Data.Maybe
import Numeric
import System.Environment import System.Environment
import System.IO import System.IO
import System.IO.Unsafe import System.IO.Unsafe
@ -33,7 +33,7 @@ import Text.Printf
import XMonad import XMonad
import XMonad.Util.Run import XMonad.Util.Run
import XMonad.Prompt hiding (endOfLine) import XMonad.Prompt
{- $usage {- $usage
@ -61,21 +61,16 @@ entries = unsafePerformIO $ do
hPutStrLn stderr $ show e hPutStrLn stderr $ show e
hPutStrLn stderr $ "Do you have unicode-data installed?" hPutStrLn stderr $ "Do you have unicode-data installed?"
return [] return []
Right dat -> case parseOnly (p <* endOfInput) dat of Right dat -> return $ sortOn (BS.length . snd) $ parseUnicodeData dat
Left e -> do
hPutStrLn stderr $ "Failed to parse UnicodeData: " ++ show e
return []
Right r -> return $ sortOn (BS.length.snd) r
{-# NOINLINE entries #-} {-# NOINLINE entries #-}
p = many' $ do parseUnicodeData :: BS.ByteString -> [(Char, BS.ByteString)]
c <- chr <$> hexadecimal parseUnicodeData = mapMaybe parseLine . BS.lines
char ';' where
d <- takeTill (== ';') parseLine l = do
char ';' field1 : field2 : _ <- return $ BS.split ';' l
skipWhile (/= '\n') [(c,"")] <- return $ readHex (BS.unpack field1)
endOfLine return (chr c, field2)
return (c,d)
searchUnicode :: String -> [(Char, String)] searchUnicode :: String -> [(Char, String)]
searchUnicode s = map (second BS.unpack) $ filter go entries searchUnicode s = map (second BS.unpack) $ filter go entries

View File

@ -54,8 +54,7 @@ flag testing
default: False default: False
library library
build-depends: attoparsec >= 0.13 && < 0.14, build-depends: base >= 4.5 && < 5,
base >= 4.5 && < 5,
bytestring >= 0.10 && < 0.11, bytestring >= 0.10 && < 0.11,
containers >= 0.5 && < 0.6, containers >= 0.5 && < 0.6,
directory, directory,