# HG changeset patch # User unc0rr # Date 1390505296 -14400 # Node ID bf1a5ef4ef1452e977b3cdd74611a8bdb9d4d818 # Parent 52e293f14977c554a321107dd3955f5d54c0a672 confusables.txt to insert query converter diff -r 52e293f14977 -r bf1a5ef4ef14 tools/confuse.hs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/confuse.hs Thu Jan 23 23:28:16 2014 +0400 @@ -0,0 +1,27 @@ +{-# LANGUAGE OverloadedStrings #-} +module Confuse where + +import Numeric +import Data.Char +import Control.Monad +import qualified Data.ByteString as B +import qualified Data.ByteString.UTF8 as UTF8 + +hx :: [Char] -> String +hx cs = let ch = (chr . fst . last . readHex $ cs) in + case ch of + '\'' -> "''" + '\\' -> "\\\\" + c -> c : [] + +conv :: String -> B.ByteString +conv s = B.concat ["('", UTF8.fromString i, "', '", UTF8.fromString r, "')"] + where + i :: String + i = hx s + r :: String + r = concatMap hx . words . takeWhile ((/=) ';') . tail $ dropWhile ((/=) '\t') s + +main = do + ll <- liftM (filter (isHexDigit . head) . filter (not . null) . lines) $ readFile "confusables.txt" + B.writeFile "insert.sql" . B.intercalate ",\n" . map conv $ ll