summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorjao <jao@gnu.org>2018-11-25 06:13:29 +0000
committerjao <jao@gnu.org>2018-11-25 06:13:29 +0000
commit9d2c98871bbd04c585fae034072f934b5c3e8093 (patch)
tree468bb9565efe6e14bad3828d21912ca4155aafd3
parent3cf0041960837701c325b698460678aea1c449b4 (diff)
downloadxmobar-9d2c98871bbd04c585fae034072f934b5c3e8093.tar.gz
xmobar-9d2c98871bbd04c585fae034072f934b5c3e8093.tar.bz2
Parsers wee refactoring
-rw-r--r--src/lib/Xmobar.hs4
-rw-r--r--src/lib/Xmobar/Template.hs65
-rw-r--r--src/lib/Xmobar/X11/Bitmap.hs2
-rw-r--r--src/lib/Xmobar/X11/Draw.hs2
-rw-r--r--src/lib/Xmobar/X11/EventLoop.hs4
-rw-r--r--src/lib/Xmobar/X11/Parsers.hs (renamed from src/lib/Xmobar/Parsers.hs)51
-rw-r--r--src/lib/Xmobar/X11/Types.hs2
-rw-r--r--xmobar.cabal3
8 files changed, 76 insertions, 57 deletions
diff --git a/src/lib/Xmobar.hs b/src/lib/Xmobar.hs
index ecc664a..897d671 100644
--- a/src/lib/Xmobar.hs
+++ b/src/lib/Xmobar.hs
@@ -46,7 +46,7 @@ import Control.Exception (bracket)
import Xmobar.Config
import Xmobar.Runnable
-import Xmobar.Parsers
+import Xmobar.Template
import Xmobar.System.Signal (setupSignalHandler, withDeferSignals)
import Xmobar.X11.Types
import Xmobar.X11.EventLoop (startLoop, startCommand)
@@ -89,7 +89,7 @@ xmobar conf = withDeferSignals $ do
d <- openDisplay ""
fs <- initFont d (font conf)
fl <- mapM (initFont d) (additionalFonts conf)
- cls <- mapM (parseTemplate conf) (splitTemplate conf)
+ cls <- mapM (parseCommands conf) (splitTemplate conf)
sig <- setupSignalHandler
bracket (mapM (mapM $ startCommand sig) cls)
cleanupThreads
diff --git a/src/lib/Xmobar/Template.hs b/src/lib/Xmobar/Template.hs
new file mode 100644
index 0000000..bd4852a
--- /dev/null
+++ b/src/lib/Xmobar/Template.hs
@@ -0,0 +1,65 @@
+------------------------------------------------------------------------------
+-- |
+-- Module: Xmobar.Template
+-- Copyright: (c) 2018 Jose Antonio Ortega Ruiz
+-- License: BSD3-style (see LICENSE)
+--
+-- Maintainer: jao@gnu.org
+-- Stability: unstable
+-- Portability: portable
+-- Created: Sun Nov 25, 2018 05:49
+--
+--
+-- Handling the top-level output template
+--
+------------------------------------------------------------------------------
+
+
+module Xmobar.Template(parseCommands) where
+
+import qualified Data.Map as Map
+import Text.ParserCombinators.Parsec
+
+import Xmobar.Commands
+import Xmobar.Config
+import Xmobar.Runnable
+
+-- | Parses the output template string
+templateStringParser :: Config -> Parser (String,String,String)
+templateStringParser c = do
+ s <- allTillSep c
+ com <- templateCommandParser c
+ ss <- allTillSep c
+ return (com, s, ss)
+
+-- | Parses the command part of the template string
+templateCommandParser :: Config -> Parser String
+templateCommandParser c =
+ let chr = char . head . sepChar
+ in between (chr c) (chr c) (allTillSep c)
+
+-- | Combines the template parsers
+templateParser :: Config -> Parser [(String,String,String)]
+templateParser = many . templateStringParser
+
+-- | Actually runs the template parsers
+parseCommands :: Config -> String -> IO [(Runnable,String,String)]
+parseCommands c s =
+ do str <- case parse (templateParser c) "" s of
+ Left _ -> return [("", s, "")]
+ Right x -> return x
+ let cl = map alias (commands c)
+ m = Map.fromList $ zip cl (commands c)
+ return $ combine c m str
+
+-- | Given a finite "Map" and a parsed template produce the resulting
+-- output string.
+combine :: Config -> Map.Map String Runnable
+ -> [(String, String, String)] -> [(Runnable,String,String)]
+combine _ _ [] = []
+combine c m ((ts,s,ss):xs) = (com, s, ss) : combine c m xs
+ where com = Map.findWithDefault dflt ts m
+ dflt = Run $ Com ts [] [] 10
+
+allTillSep :: Config -> Parser String
+allTillSep = many . noneOf . sepChar
diff --git a/src/lib/Xmobar/X11/Bitmap.hs b/src/lib/Xmobar/X11/Bitmap.hs
index dee3966..c0dba14 100644
--- a/src/lib/Xmobar/X11/Bitmap.hs
+++ b/src/lib/Xmobar/X11/Bitmap.hs
@@ -24,7 +24,7 @@ import System.Directory (doesFileExist)
import System.FilePath ((</>))
import System.Mem.Weak ( addFinalizer )
import Xmobar.X11.ColorCache
-import Xmobar.Parsers (Widget(..))
+import Xmobar.X11.Parsers (Widget(..))
import Xmobar.Actions (Action)
#ifdef XPM
diff --git a/src/lib/Xmobar/X11/Draw.hs b/src/lib/Xmobar/X11/Draw.hs
index 3fe6f5c..d0c78a8 100644
--- a/src/lib/Xmobar/X11/Draw.hs
+++ b/src/lib/Xmobar/X11/Draw.hs
@@ -29,7 +29,6 @@ import Data.Map hiding (foldr, map, filter)
import Graphics.X11.Xlib hiding (textExtents, textWidth)
import Graphics.X11.Xlib.Extras
-import Xmobar.Parsers (Widget(..))
import Xmobar.Actions (Action(..))
import qualified Xmobar.X11.Bitmap as B
import Xmobar.X11.Types
@@ -37,6 +36,7 @@ import Xmobar.X11.XUtil
import Xmobar.Config
import Xmobar.X11.ColorCache
import Xmobar.X11.Window (drawBorder)
+import Xmobar.X11.Parsers (Widget(..))
#ifdef XFT
import Xmobar.X11.MinXft
diff --git a/src/lib/Xmobar/X11/EventLoop.hs b/src/lib/Xmobar/X11/EventLoop.hs
index 231d953..cc08acd 100644
--- a/src/lib/Xmobar/X11/EventLoop.hs
+++ b/src/lib/Xmobar/X11/EventLoop.hs
@@ -37,14 +37,14 @@ import Data.Map hiding (foldr, map, filter)
import Data.Maybe (fromJust, isJust)
import Xmobar.Config
-import Xmobar.Parsers
import Xmobar.Commands
import Xmobar.Actions
import Xmobar.Runnable
+import Xmobar.Utils
import Xmobar.System.Signal
+import Xmobar.X11.Parsers
import Xmobar.X11.Window
import Xmobar.X11.XUtil
-import Xmobar.Utils
import Xmobar.X11.Draw
import Xmobar.X11.Bitmap as Bitmap
import Xmobar.X11.Types
diff --git a/src/lib/Xmobar/Parsers.hs b/src/lib/Xmobar/X11/Parsers.hs
index d8bd409..8c1abac 100644
--- a/src/lib/Xmobar/Parsers.hs
+++ b/src/lib/Xmobar/X11/Parsers.hs
@@ -10,23 +10,16 @@
-- Stability : unstable
-- Portability : unportable
--
--- Parsers needed for Xmobar, a text based status bar
+-- Parsing for template substrings
--
-----------------------------------------------------------------------------
-module Xmobar.Parsers
- ( parseString
- , parseTemplate
- , Widget(..)
- ) where
+module Xmobar.X11.Parsers (parseString, Widget(..)) where
import Xmobar.Config
-import Xmobar.Runnable
-import Xmobar.Commands
import Xmobar.Actions
import Control.Monad (guard, mzero)
-import qualified Data.Map as Map
import Text.ParserCombinators.Parsec
import Graphics.X11.Types (Button)
@@ -151,43 +144,3 @@ fontParser c a = do
-- | Parses a color specification (hex or named)
colors :: Parser String
colors = many1 (alphaNum <|> char ',' <|> char '#')
-
--- | Parses the output template string
-templateStringParser :: Config -> Parser (String,String,String)
-templateStringParser c = do
- s <- allTillSep c
- com <- templateCommandParser c
- ss <- allTillSep c
- return (com, s, ss)
-
--- | Parses the command part of the template string
-templateCommandParser :: Config -> Parser String
-templateCommandParser c =
- let chr = char . head . sepChar
- in between (chr c) (chr c) (allTillSep c)
-
--- | Combines the template parsers
-templateParser :: Config -> Parser [(String,String,String)]
-templateParser = many . templateStringParser
-
--- | Actually runs the template parsers
-parseTemplate :: Config -> String -> IO [(Runnable,String,String)]
-parseTemplate c s =
- do str <- case parse (templateParser c) "" s of
- Left _ -> return [("", s, "")]
- Right x -> return x
- let cl = map alias (commands c)
- m = Map.fromList $ zip cl (commands c)
- return $ combine c m str
-
--- | Given a finite "Map" and a parsed template produce the resulting
--- output string.
-combine :: Config -> Map.Map String Runnable
- -> [(String, String, String)] -> [(Runnable,String,String)]
-combine _ _ [] = []
-combine c m ((ts,s,ss):xs) = (com, s, ss) : combine c m xs
- where com = Map.findWithDefault dflt ts m
- dflt = Run $ Com ts [] [] 10
-
-allTillSep :: Config -> Parser String
-allTillSep = many . noneOf . sepChar
diff --git a/src/lib/Xmobar/X11/Types.hs b/src/lib/Xmobar/X11/Types.hs
index 77249b3..c5c7ade 100644
--- a/src/lib/Xmobar/X11/Types.hs
+++ b/src/lib/Xmobar/X11/Types.hs
@@ -15,7 +15,7 @@
------------------------------------------------------------------------------
-module Xmobar.X11.Types (X , XConf (..)) where
+module Xmobar.X11.Types (X, XConf (..)) where
import Graphics.X11.Xlib
import Control.Monad.Reader
diff --git a/xmobar.cabal b/xmobar.cabal
index 88cfbf5..76182dc 100644
--- a/xmobar.cabal
+++ b/xmobar.cabal
@@ -100,13 +100,14 @@ library
Xmobar.Commands,
Xmobar.Runnable
- other-modules: Xmobar.Parsers,
+ other-modules: Xmobar.Template,
Xmobar.Utils,
Xmobar.System.StatFS,
Xmobar.System.Environment,
Xmobar.System.Localize,
Xmobar.System.Signal,
Xmobar.System.Kbd,
+ Xmobar.X11.Parsers,
Xmobar.X11.Types,
Xmobar.X11.XUtil,
Xmobar.X11.Bitmap,