Merge 62f2f4977d
into e4dea87839
commit
ce8d55acf6
|
@ -108,6 +108,7 @@ library {
|
||||||
, cmdargs >=0.10.14 && <0.11
|
, cmdargs >=0.10.14 && <0.11
|
||||||
, czipwith >=1.0.0.0 && <1.1
|
, czipwith >=1.0.0.0 && <1.1
|
||||||
, ghc-boot-th >=8.0.1 && <8.3
|
, ghc-boot-th >=8.0.1 && <8.3
|
||||||
|
, text-latin1 >= 0.3 && < 0.4
|
||||||
}
|
}
|
||||||
default-extensions: {
|
default-extensions: {
|
||||||
CPP
|
CPP
|
||||||
|
|
|
@ -264,7 +264,7 @@ briDocLineLength briDoc = flip StateS.evalState False $ rec briDoc
|
||||||
where
|
where
|
||||||
rec = \case
|
rec = \case
|
||||||
BDEmpty -> return $ 0
|
BDEmpty -> return $ 0
|
||||||
BDLit t -> StateS.put False $> Text.length t
|
BDLit t -> StateS.put False $> elasticLength t
|
||||||
BDSeq bds -> sum <$> rec `mapM` bds
|
BDSeq bds -> sum <$> rec `mapM` bds
|
||||||
BDCols _ bds -> sum <$> rec `mapM` bds
|
BDCols _ bds -> sum <$> rec `mapM` bds
|
||||||
BDSeparator -> StateS.get >>= \b -> StateS.put True $> if b then 0 else 1
|
BDSeparator -> StateS.get >>= \b -> StateS.put True $> if b then 0 else 1
|
||||||
|
|
|
@ -32,6 +32,7 @@ module Language.Haskell.Brittany.Internal.BackendUtils
|
||||||
, layoutWritePriorComments
|
, layoutWritePriorComments
|
||||||
, layoutWritePostComments
|
, layoutWritePostComments
|
||||||
, layoutRemoveIndentLevelLinger
|
, layoutRemoveIndentLevelLinger
|
||||||
|
, elasticLength
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
|
@ -51,6 +52,7 @@ import Language.Haskell.Brittany.Internal.Utils
|
||||||
|
|
||||||
import GHC ( Located, GenLocated(L), moduleNameString )
|
import GHC ( Located, GenLocated(L), moduleNameString )
|
||||||
|
|
||||||
|
import Text.Ascii (isAscii)
|
||||||
|
|
||||||
|
|
||||||
traceLocal
|
traceLocal
|
||||||
|
@ -97,11 +99,21 @@ layoutWriteAppend t = do
|
||||||
mTell $ Text.Builder.fromText $ t
|
mTell $ Text.Builder.fromText $ t
|
||||||
mModify $ \s -> s
|
mModify $ \s -> s
|
||||||
{ _lstate_curYOrAddNewline = Left $ case _lstate_curYOrAddNewline s of
|
{ _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
|
Right{} -> Text.length t + spaces
|
||||||
, _lstate_addSepSpace = Nothing
|
, _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
|
layoutWriteAppendSpaces
|
||||||
:: ( MonadMultiWriter Text.Builder.Builder m
|
:: ( MonadMultiWriter Text.Builder.Builder m
|
||||||
, MonadMultiState LayoutState m
|
, MonadMultiState LayoutState m
|
||||||
|
@ -158,7 +170,7 @@ layoutWriteNewlineBlock = do
|
||||||
-- mSet $ state
|
-- mSet $ state
|
||||||
-- { _lstate_addSepSpace = Just
|
-- { _lstate_addSepSpace = Just
|
||||||
-- $ if isJust $ _lstate_addNewline state
|
-- $ if isJust $ _lstate_addNewline state
|
||||||
-- then i
|
-- then i
|
||||||
-- else _lstate_indLevelLinger state + i - _lstate_curY state
|
-- else _lstate_indLevelLinger state + i - _lstate_curY state
|
||||||
-- }
|
-- }
|
||||||
|
|
||||||
|
@ -588,7 +600,7 @@ layoutIndentRestorePostComment = do
|
||||||
-- layoutWritePriorCommentsRestore x = do
|
-- layoutWritePriorCommentsRestore x = do
|
||||||
-- layoutWritePriorComments x
|
-- layoutWritePriorComments x
|
||||||
-- layoutIndentRestorePostComment
|
-- layoutIndentRestorePostComment
|
||||||
--
|
--
|
||||||
-- layoutWritePostCommentsRestore :: (Data.Data.Data ast,
|
-- layoutWritePostCommentsRestore :: (Data.Data.Data ast,
|
||||||
-- MonadMultiWriter Text.Builder.Builder m,
|
-- MonadMultiWriter Text.Builder.Builder m,
|
||||||
-- MonadMultiState LayoutState m
|
-- MonadMultiState LayoutState m
|
||||||
|
|
Loading…
Reference in New Issue