From 1e8d62232c374d686e83826ea8e57d75470db702 Mon Sep 17 00:00:00 2001 From: waddlaw Date: Mon, 26 Feb 2018 17:45:09 +0900 Subject: [PATCH] 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