aboutsummaryrefslogtreecommitdiff
path: root/tp-bbcode/src/Thermoprint
diff options
context:
space:
mode:
authorGregor Kleen <pngwjpgh@users.noreply.github.com>2017-01-23 16:11:37 +0100
committerGregor Kleen <pngwjpgh@users.noreply.github.com>2017-01-23 16:11:37 +0100
commit99fc4947543c1916e9fec952526a688eb7753490 (patch)
tree9361649ae4639a00cff06ad654cb42e3e07bc637 /tp-bbcode/src/Thermoprint
parent59a7e3d173c23096fe3122505b1b759f26e3292a (diff)
parent64b6ead0d1e157701f8569743eda496bc71b8351 (diff)
downloadthermoprint-99fc4947543c1916e9fec952526a688eb7753490.tar
thermoprint-99fc4947543c1916e9fec952526a688eb7753490.tar.gz
thermoprint-99fc4947543c1916e9fec952526a688eb7753490.tar.bz2
thermoprint-99fc4947543c1916e9fec952526a688eb7753490.tar.xz
thermoprint-99fc4947543c1916e9fec952526a688eb7753490.zip
Merge branch 'feat-markup'
Diffstat (limited to 'tp-bbcode/src/Thermoprint')
-rw-r--r--tp-bbcode/src/Thermoprint/Printout/BBCode.hs27
1 files changed, 23 insertions, 4 deletions
diff --git a/tp-bbcode/src/Thermoprint/Printout/BBCode.hs b/tp-bbcode/src/Thermoprint/Printout/BBCode.hs
index dd5edb0..1770b6d 100644
--- a/tp-bbcode/src/Thermoprint/Printout/BBCode.hs
+++ b/tp-bbcode/src/Thermoprint/Printout/BBCode.hs
@@ -1,4 +1,5 @@
1{-# LANGUAGE OverloadedStrings #-} 1{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE OverloadedLists #-}
2{-# LANGUAGE DeriveGeneric #-} 3{-# LANGUAGE DeriveGeneric #-}
3{-# LANGUAGE GADTs #-} 4{-# LANGUAGE GADTs #-}
4 5
@@ -13,6 +14,9 @@ module Thermoprint.Printout.BBCode
13 14
14import Data.Text (Text) 15import Data.Text (Text)
15import Data.Map (Map) 16import Data.Map (Map)
17import qualified Data.Map as Map
18import Data.Set (Set)
19import qualified Data.Set as Set
16 20
17import qualified Data.Text.Lazy as Lazy (Text) 21import qualified Data.Text.Lazy as Lazy (Text)
18import qualified Data.Text.Lazy as TL (fromStrict) 22import qualified Data.Text.Lazy as TL (fromStrict)
@@ -31,6 +35,7 @@ import Data.Bifunctor (bimap, first)
31import Control.Monad (join) 35import Control.Monad (join)
32 36
33import Data.List (groupBy) 37import Data.List (groupBy)
38import Data.Maybe (mapMaybe)
34 39
35import Text.BBCode (DomForest, DomTree(..), TreeError(..)) 40import Text.BBCode (DomForest, DomTree(..), TreeError(..))
36import qualified Text.BBCode as Raw (bbcode, BBCodeError(..)) 41import qualified Text.BBCode as Raw (bbcode, BBCodeError(..))
@@ -140,9 +145,23 @@ parse BlockCtx = fmap mconcat . mapM mergeResult' . groupBy sameCtx . map parseD
140parse ctx = mergeResult ctx . map parseDom 145parse ctx = mergeResult ctx . map parseDom
141 146
142asBlock :: CI Text -> [DomTree] -> Map (CI Text) Text -> Either SemanticError Block 147asBlock :: CI Text -> [DomTree] -> Map (CI Text) Text -> Either SemanticError Block
143asBlock "VSpace" _ = Right . VSpace . lookupAttr "height" True 1 148asBlock "VSpace" _ attrs = Right . VSpace $ lookupAttr "height" True 1 attrs
144asBlock t _ = const $ Left . UnmappedBlockElement . CI.original $ t 149asBlock t _ _ = Left . UnmappedBlockElement . CI.original $ t
145 150
146asLine :: CI Text -> [DomTree] -> Map (CI Text) Text -> Either SemanticError Line 151asLine :: CI Text -> [DomTree] -> Map (CI Text) Text -> Either SemanticError Line
147asLine "HSpace" _ = Right . HSpace . lookupAttr "width" True 1 152asLine "HSpace" _ attrs = Right . HSpace $ lookupAttr "width" True 1 attrs
148asLine t _ = const $ Left . UnmappedLineElement . CI.original $ t 153asLine c t attrs
154 | (Just m) <- lookup c $ map (\(c, _, m) -> (CI.mk [c], m)) mTable
155 = Markup [m] <$> parse LineCtx t
156 | (Just m) <- lookup c $ map (\(_, a, m) -> (a, m)) mTable
157 = Markup [m] <$> parse LineCtx t
158 | "markup" <- c
159 , ms <- Set.fromList $ mapMaybe (\(_, a, m) -> m <$ Map.lookup a attrs) mTable
160 = Markup ms <$> parse LineCtx t
161 where
162 mTable = [ ('b', "bold", Bold)
163 , ('u', "underline", Underline)
164 , ('h', "doubleHeight", DoubleHeight)
165 , ('w', "doubleWidth", DoubleWidth)
166 ]
167asLine t _ _ = Left . UnmappedLineElement . CI.original $ t