From b3dc1dff04673de6ca3a36974f18450621544a08 Mon Sep 17 00:00:00 2001 From: waddlaw Date: Mon, 26 Feb 2018 17:26:50 +0900 Subject: [PATCH 1/3] Add text-latin1 package --- brittany.cabal | 1 + 1 file changed, 1 insertion(+) diff --git a/brittany.cabal b/brittany.cabal index 42277ad..f3f6eba 100644 --- a/brittany.cabal +++ b/brittany.cabal @@ -108,6 +108,7 @@ library { , cmdargs >=0.10.14 && <0.11 , czipwith >=1.0.0.0 && <1.1 , ghc-boot-th >=8.0.1 && <8.3 + , text-latin1 >= 0.3 && < 0.4 } default-extensions: { CPP From 1e8d62232c374d686e83826ea8e57d75470db702 Mon Sep 17 00:00:00 2001 From: waddlaw Date: Mon, 26 Feb 2018 17:45:09 +0900 Subject: [PATCH 2/3] Add elasticLength function --- .../Haskell/Brittany/Internal/BackendUtils.hs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Language/Haskell/Brittany/Internal/BackendUtils.hs b/src/Language/Haskell/Brittany/Internal/BackendUtils.hs index a7d8594..d5f9d52 100644 --- a/src/Language/Haskell/Brittany/Internal/BackendUtils.hs +++ b/src/Language/Haskell/Brittany/Internal/BackendUtils.hs @@ -32,6 +32,7 @@ module Language.Haskell.Brittany.Internal.BackendUtils , layoutWritePriorComments , layoutWritePostComments , layoutRemoveIndentLevelLinger + , elasticLength ) where @@ -51,6 +52,7 @@ import Language.Haskell.Brittany.Internal.Utils import GHC ( Located, GenLocated(L), moduleNameString ) +import Text.Ascii (isAscii) traceLocal @@ -102,6 +104,16 @@ layoutWriteAppend t = do , _lstate_addSepSpace = Nothing } +-- | +-- >>> elasticLength "あ" +-- 2 +-- >>> elasticLength "abc" +-- 3 +-- >>> elasticLength "aあa" +-- 4 +elasticLength :: Text -> Int +elasticLength = Text.foldl' (\len c -> if isAscii c then len + 1 else len + 2) 0 + layoutWriteAppendSpaces :: ( MonadMultiWriter Text.Builder.Builder m , MonadMultiState LayoutState m From 62f2f4977d51494250d5dbfa90a54f7e8c27d159 Mon Sep 17 00:00:00 2001 From: waddlaw Date: Mon, 26 Feb 2018 17:46:18 +0900 Subject: [PATCH 3/3] Fix ColumnAlign problem for multibyte strings #122 --- src/Language/Haskell/Brittany/Internal/Backend.hs | 2 +- src/Language/Haskell/Brittany/Internal/BackendUtils.hs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Language/Haskell/Brittany/Internal/Backend.hs b/src/Language/Haskell/Brittany/Internal/Backend.hs index c121eaf..dbc611e 100644 --- a/src/Language/Haskell/Brittany/Internal/Backend.hs +++ b/src/Language/Haskell/Brittany/Internal/Backend.hs @@ -264,7 +264,7 @@ briDocLineLength briDoc = flip StateS.evalState False $ rec briDoc where rec = \case BDEmpty -> return $ 0 - BDLit t -> StateS.put False $> Text.length t + BDLit t -> StateS.put False $> elasticLength t BDSeq bds -> sum <$> rec `mapM` bds BDCols _ bds -> sum <$> rec `mapM` bds BDSeparator -> StateS.get >>= \b -> StateS.put True $> if b then 0 else 1 diff --git a/src/Language/Haskell/Brittany/Internal/BackendUtils.hs b/src/Language/Haskell/Brittany/Internal/BackendUtils.hs index d5f9d52..63e6090 100644 --- a/src/Language/Haskell/Brittany/Internal/BackendUtils.hs +++ b/src/Language/Haskell/Brittany/Internal/BackendUtils.hs @@ -99,7 +99,7 @@ layoutWriteAppend t = do mTell $ Text.Builder.fromText $ t mModify $ \s -> s { _lstate_curYOrAddNewline = Left $ case _lstate_curYOrAddNewline s of - Left c -> c + Text.length t + spaces + Left c -> c + elasticLength t + spaces Right{} -> Text.length t + spaces , _lstate_addSepSpace = Nothing } @@ -170,7 +170,7 @@ layoutWriteNewlineBlock = do -- mSet $ state -- { _lstate_addSepSpace = Just -- $ if isJust $ _lstate_addNewline state --- then i +-- then i -- else _lstate_indLevelLinger state + i - _lstate_curY state -- } @@ -600,7 +600,7 @@ layoutIndentRestorePostComment = do -- layoutWritePriorCommentsRestore x = do -- layoutWritePriorComments x -- layoutIndentRestorePostComment --- +-- -- layoutWritePostCommentsRestore :: (Data.Data.Data ast, -- MonadMultiWriter Text.Builder.Builder m, -- MonadMultiState LayoutState m