aboutsummaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGregor Kleen <gkleen@yggdrasil.li>2016-01-18 11:36:09 +0000
committerGregor Kleen <gkleen@yggdrasil.li>2016-01-18 11:36:09 +0000
commitf0ad3abb87d540c75a397a722ca5310d6d16cec9 (patch)
tree2a0459dc1d401ec7ed13372af7cce573760a5b3a /spec
parentc605c0b51011f794256df1b7b3ddeb305bb91902 (diff)
downloadthermoprint-f0ad3abb87d540c75a397a722ca5310d6d16cec9.tar
thermoprint-f0ad3abb87d540c75a397a722ca5310d6d16cec9.tar.gz
thermoprint-f0ad3abb87d540c75a397a722ca5310d6d16cec9.tar.bz2
thermoprint-f0ad3abb87d540c75a397a722ca5310d6d16cec9.tar.xz
thermoprint-f0ad3abb87d540c75a397a722ca5310d6d16cec9.zip
Made attributes more lenient yet
Diffstat (limited to 'spec')
-rw-r--r--spec/src/Thermoprint/Printout/BBCode.hs4
-rw-r--r--spec/src/Thermoprint/Printout/BBCode/Attribute.hs14
2 files changed, 12 insertions, 6 deletions
diff --git a/spec/src/Thermoprint/Printout/BBCode.hs b/spec/src/Thermoprint/Printout/BBCode.hs
index 33101e5..8825732 100644
--- a/spec/src/Thermoprint/Printout/BBCode.hs
+++ b/spec/src/Thermoprint/Printout/BBCode.hs
@@ -119,9 +119,9 @@ parse :: Monoid a => Context a -> [DomTree] -> Either SemanticError a
119parse ctx = mergeResult ctx . map parseDom 119parse ctx = mergeResult ctx . map parseDom
120 120
121asBlock :: CI Text -> [DomTree] -> Map (CI Text) Text -> Either SemanticError Block 121asBlock :: CI Text -> [DomTree] -> Map (CI Text) Text -> Either SemanticError Block
122asBlock "VSpace" _ = Right . VSpace . lookupAttr "height" 1 122asBlock "VSpace" _ = Right . VSpace . lookupAttr "height" True 1
123asBlock t _ = const $ Left . UnmappedBlockElement . CI.original $ t 123asBlock t _ = const $ Left . UnmappedBlockElement . CI.original $ t
124 124
125asLine :: CI Text -> [DomTree] -> Map (CI Text) Text -> Either SemanticError Line 125asLine :: CI Text -> [DomTree] -> Map (CI Text) Text -> Either SemanticError Line
126asLine "HSpace" _ = Right . HSpace . lookupAttr "width" 1 126asLine "HSpace" _ = Right . HSpace . lookupAttr "width" True 1
127asLine t _ = const $ Left . UnmappedLineElement . CI.original $ t 127asLine t _ = const $ Left . UnmappedLineElement . CI.original $ t
diff --git a/spec/src/Thermoprint/Printout/BBCode/Attribute.hs b/spec/src/Thermoprint/Printout/BBCode/Attribute.hs
index 60815c8..538cca2 100644
--- a/spec/src/Thermoprint/Printout/BBCode/Attribute.hs
+++ b/spec/src/Thermoprint/Printout/BBCode/Attribute.hs
@@ -7,7 +7,7 @@ module Thermoprint.Printout.BBCode.Attribute
7 ) where 7 ) where
8 8
9import Data.Text (Text) 9import Data.Text (Text)
10import qualified Data.Text as T (unpack) 10import qualified Data.Text as T (unpack, empty)
11 11
12import Data.Map (Map) 12import Data.Map (Map)
13import qualified Data.Map as Map (lookup) 13import qualified Data.Map as Map (lookup)
@@ -18,6 +18,8 @@ import qualified Data.CaseInsensitive as CI
18import Text.Read (readMaybe) 18import Text.Read (readMaybe)
19import Data.Maybe (fromMaybe) 19import Data.Maybe (fromMaybe)
20 20
21import Control.Applicative (Alternative(..))
22
21-- | We build our own version of 'Read' so we can override the presentation used 23-- | We build our own version of 'Read' so we can override the presentation used
22-- 24--
23-- We provide a default implementation for 'Read a => Attribute a' 25-- We provide a default implementation for 'Read a => Attribute a'
@@ -28,6 +30,10 @@ class Attribute a where
28 30
29instance Attribute Integer 31instance Attribute Integer
30 32
31lookupAttr :: Attribute a => CI Text -> a -> Map (CI Text) Text -> a 33lookupAttr :: Attribute a => CI Text -> Bool -> a -> Map (CI Text) Text -> a
32-- ^ Extract an attribute by name 34-- ^ Extract an attribute by name -- the 'Bool' attribute specifies whether we additionally accept the empty string as key
33lookupAttr t def attrs = fromMaybe def $ Map.lookup t attrs >>= attrRead 35lookupAttr t emptyOk def attrs = fromMaybe def $ (emptyOk' $ Map.lookup t attrs) >>= attrRead
36 where
37 emptyOk'
38 | emptyOk = (<|> Map.lookup (CI.mk T.empty) attrs)
39 | otherwise = id