gt-tools 0.1.2 → 0.1.3
raw patch · 3 files changed
+87/−36 lines, 3 filesdep +haskelinedep +mtldep +unixdep ~basedep ~utf8-string
Dependencies added: haskeline, mtl, unix
Dependency ranges changed: base, utf8-string
Files
- Gtc/gtc.hs +69/−18
- Gtg/gtg.hs +9/−10
- gt-tools.cabal +9/−8
Gtc/gtc.hs view
@@ -5,37 +5,88 @@ import Gt.Core import Gt.Langs-import Data.List (intercalate)+import Control.Monad.Trans+import System.Console.Haskeline hiding (catch)+import System.Environment import System.Exit+import System.Posix.Terminal import qualified System.Environment.UTF8 as U -usage :: IO ()+usage :: IO() usage = do- mapM_ putStrLn [ " Usage: 'fromLang' 'toLang' 'text'"- , " Lang is 2 sumbols code, i.e. by, en, ru.\n"- , " --help or -h - to see this help."- , " --list or -l - list of available languages.\n"+ mapM_ putStrLn [ " Usage:"+ , " Standart mode: gtc 'fromLang' 'toLang' 'text'"+ , " Interactive mode: gtc -i 'fromLang' 'toLang'"+ , " Where 'Lang' is 2 sumbols code, i.e. be, en, ru.\n"+ , " Commandline keys:"+ , " --interactive or -i - interactive mode."+ , " --help or -h - to see this help."+ , " --list or -l - list of available languages.\n" ] exitWith $ ExitFailure 1 -langs_list :: IO ()+langs_list :: IO() langs_list = putStrLn $ "\nList of available languages:\n\n" ++- (concat $ zipWith (\l d -> " " ++ l ++ " - " ++ d ++ "\n") langs langs_descrs)+ concat (zipWith (\l d -> " " ++ l ++ " - " ++ d ++ "\n") langs langs_descrs) -main :: IO ()+main :: IO() main = do- -- TODO: Need to detecet terminal encoding and make convertions- args <- U.getArgs- case args of+ -- TODO: Need to detecet terminal encoding and make convertions+ args <- U.getArgs+ case args of - ["-l"] -> langs_list- ["-h"] -> usage+ "-i":rest -> interactiveLoop rest+ ["-l"] -> langs_list+ ["-h"] -> usage - ["--list"] -> langs_list- ["--help"] -> usage+ "--interactive":rest -> interactiveLoop rest+ ["--list"] -> langs_list+ ["--help"] -> usage - from:to:rest -> do_trans from to (intercalate " " rest) >>= putStrLn+ from:to:[] -> interactiveLoop' from to+ from:to:rest -> mapM_ ((>>= putStrLn) . do_trans from to) rest _ -> usage- exitWith ExitSuccess++ exitWith ExitSuccess++-- Interactive mode processor+interactiveLoop :: [String] -> IO()+interactiveLoop params =+ case params of+ from:to:_ -> interactiveLoop' from to+ _ -> usage++haskelineSettings :: String -> Settings IO+haskelineSettings homedir = Settings {+ complete = noCompletion,+ historyFile = Just $ homedir ++ "/.gtc_history",+ autoAddHistory = True+ }++getHomeDir :: IO FilePath+getHomeDir = catch (getEnv "HOME") (\_ -> return "")++interactiveLoop' :: Lang -> Lang -> IO()+interactiveLoop' from to =+ getHomeDir >>= (\h -> runInputT (haskelineSettings h) loop)+ where+ promptLine :: IO String+ promptLine =+ do+ tty_type <- queryTerminal 0+ if tty_type+ then return "> "+ else return ""++ loop :: InputT IO()+ loop = do+ minput <- lift promptLine >>= getInputLine+ case minput of+ Nothing -> return ()+ Just "" -> loop+ Just input -> do t <- lift $ do_trans from to input+ outputStrLn $ replicate 80 '-'+ outputStrLn t+ loop
Gtg/gtg.hs view
@@ -4,7 +4,6 @@ ) where import Gt.Core-import Gt.Helpers (decodeString) import Gt.Langs import Graphics.UI.Gtk import Graphics.UI.Gtk.Glade@@ -12,9 +11,9 @@ main :: IO() main = do- initGUI+ _ <- initGUI data_dir <- getDataDir- Just xml <- xmlNew $ data_dir ++ "/main.glade"+ Just xml <- xmlNew $ data_dir ++ "/Gtg/main.glade" -- Casts window <- xmlGetWidget xml castToWindow "gtg_main"@@ -25,17 +24,17 @@ cmb_dest_lang <- xmlGetWidget xml castToComboBox "cmb_dest_lang" cmb_source_lang <- xmlGetWidget xml castToComboBox "cmb_source_lang" - comboBoxSetModelText cmb_dest_lang- comboBoxSetModelText cmb_source_lang+ _ <- comboBoxSetModelText cmb_dest_lang+ _ <- comboBoxSetModelText cmb_source_lang mapM_ (comboBoxAppendText cmb_dest_lang ) (tail langs_descrs) mapM_ (comboBoxAppendText cmb_source_lang) langs_descrs -- Actions- onClicked btn_close (widgetDestroy window)- onClicked btn_translate (trans_click ent_trans_text lbl_translation cmb_source_lang cmb_dest_lang)- onEntryActivate ent_trans_text (trans_click ent_trans_text lbl_translation cmb_source_lang cmb_dest_lang)- onDestroy window mainQuit+ _ <- onClicked btn_close (widgetDestroy window)+ _ <- onClicked btn_translate (trans_click ent_trans_text lbl_translation cmb_source_lang cmb_dest_lang)+ _ <- onEntryActivate ent_trans_text (trans_click ent_trans_text lbl_translation cmb_source_lang cmb_dest_lang)+ _ <- onDestroy window mainQuit -- Let's go widgetShowAll window@@ -57,4 +56,4 @@ src <- get_src_lang cmb_src dst <- get_dest_lang cmb_dest translated_text <- do_trans src dst text- set lbl [ labelText := decodeString translated_text ]+ set lbl [ labelText := translated_text ]
gt-tools.cabal view
@@ -1,5 +1,5 @@ name: gt-tools-version: 0.1.2+version: 0.1.3 cabal-version: >= 1.8 build-type: Simple license: GPL@@ -29,34 +29,35 @@ main-is: gtc.hs buildable: True ghc-options: -Wall- include-dirs: .- hs-source-dirs: ., Gt, Gtc+ hs-source-dirs: ., Gtc other-modules: Gt.Core, Gt.Helpers, Gt.Langs, Gt.Net, Gt.Translation build-depends:- base >= 4 && < 5,+ base >= 4.2 && < 5, containers,+ haskeline, HTTP, json,+ mtl,+ unix, url, utf8-string >= 0.3.6 executable gtg main-is: gtg.hs ghc-options: -Wall- include-dirs: .- hs-source-dirs: ., Gt, Gtg+ hs-source-dirs: ., Gtg other-modules: Gt.Core, Gt.Helpers, Gt.Langs, Gt.Net, Gt.Translation if flag(gui) buildable: True build-depends:- base >= 4 && < 5,+ base >= 4.2 && < 5, containers, HTTP, json, url, gtk, glade,- utf8-string+ utf8-string >= 0.3.6 else buildable: False