From 1aa759dca35ff639b2eda74fc9af19728fa03b73 Mon Sep 17 00:00:00 2001 From: Nathan Faubion Date: Sat, 22 Aug 2020 09:26:21 -0700 Subject: [PATCH] Fix indent position calculation --- src/Dodo.purs | 8 +++++-- test/snapshots/DodoRibbonRatio.output | 28 +++++++++++++++++++++++++ test/snapshots/DodoRibbonRatio.purs | 30 +++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 test/snapshots/DodoRibbonRatio.output create mode 100644 test/snapshots/DodoRibbonRatio.purs diff --git a/src/Dodo.purs b/src/Dodo.purs index 5875229..9a70d82 100644 --- a/src/Dodo.purs +++ b/src/Dodo.purs @@ -317,7 +317,11 @@ print (Printer printer) opts = flip go initState <<< pure <<< Doc Text len str | state.position.column == 0 && state.indent > 0 -> go stack state - { position { column = state.indent } + { position + { column = state.indent + , indent = state.indent + , ribbonWidth = calcRibbonWidth (opts.pageWidth - state.indent) + } , buffer = Buffer.modify (printer.writeIndent state.indent state.indentSpaces) state.buffer } | otherwise -> do @@ -375,7 +379,7 @@ print (Printer printer) opts = flip go initState <<< pure <<< Doc | otherwise -> go (Doc doc1 : stk) state WithPosition k - | state.position.column == 0 && state.indent > 0 -> do + | state.position.column == 0 && state.indent > state.position.indent -> do let renderPosition = state.position { column = state.indent diff --git a/test/snapshots/DodoRibbonRatio.output b/test/snapshots/DodoRibbonRatio.output new file mode 100644 index 0000000..2416416 --- /dev/null +++ b/test/snapshots/DodoRibbonRatio.output @@ -0,0 +1,28 @@ +Quisque finibus tellus non molestie porta. In non posuere metus, vitae tincidunt +enim. Nam quis elit pharetra, elementum elit lacinia, efficitur nibh. Cras +lobortis neque sed ante ornare rutrum. Maecenas sed urna nisl. Phasellus aliquam +finibus ex vitae iaculis. Vestibulum ante ipsum primis in faucibus orci luctus +et ultrices posuere cubilia curae; Suspendisse eget tortor eget sapien tincidunt +vestibulum eu a velit. Pellentesque eu tortor ut lectus sodales ornare. + Quisque finibus tellus non molestie porta. In non posuere metus, vitae + tincidunt enim. Nam quis elit pharetra, elementum elit lacinia, efficitur + nibh. Cras lobortis neque sed ante ornare rutrum. Maecenas sed urna nisl. + Phasellus aliquam finibus ex vitae iaculis. Vestibulum ante ipsum primis in + faucibus orci luctus et ultrices posuere cubilia curae; Suspendisse eget + tortor eget sapien tincidunt vestibulum eu a velit. Pellentesque eu tortor + ut lectus sodales ornare. + Quisque finibus tellus non molestie porta. In non posuere metus, vitae + tincidunt enim. Nam quis elit pharetra, elementum elit lacinia, + efficitur nibh. Cras lobortis neque sed ante ornare rutrum. Maecenas sed + urna nisl. Phasellus aliquam finibus ex vitae iaculis. Vestibulum ante + ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; + Suspendisse eget tortor eget sapien tincidunt vestibulum eu a velit. + Pellentesque eu tortor ut lectus sodales ornare. + Quisque finibus tellus non molestie porta. In non posuere metus, + vitae tincidunt enim. Nam quis elit pharetra, elementum elit + lacinia, efficitur nibh. Cras lobortis neque sed ante ornare rutrum. + Maecenas sed urna nisl. Phasellus aliquam finibus ex vitae iaculis. + Vestibulum ante ipsum primis in faucibus orci luctus et ultrices + posuere cubilia curae; Suspendisse eget tortor eget sapien tincidunt + vestibulum eu a velit. Pellentesque eu tortor ut lectus sodales + ornare. diff --git a/test/snapshots/DodoRibbonRatio.purs b/test/snapshots/DodoRibbonRatio.purs new file mode 100644 index 0000000..d323b0b --- /dev/null +++ b/test/snapshots/DodoRibbonRatio.purs @@ -0,0 +1,30 @@ +module DodoRibbonRatio where + +import Prelude + +import Dodo (Doc, fourSpaces, indent, lines, plainText, print, textParagraph) +import Effect (Effect) +import Effect.Class.Console as Console + +test :: forall a. Doc a +test = lines + [ latin + , indent $ indent latin + , indent $ indent $ indent $ indent latin + , indent $ indent $ indent $ indent $ indent $ indent latin + ] + where + latin = textParagraph + """ + Quisque finibus tellus non molestie porta. In non posuere metus, vitae + tincidunt enim. Nam quis elit pharetra, elementum elit lacinia, efficitur + nibh. Cras lobortis neque sed ante ornare rutrum. Maecenas sed urna nisl. + Phasellus aliquam finibus ex vitae iaculis. Vestibulum ante ipsum primis + in faucibus orci luctus et ultrices posuere cubilia curae; Suspendisse + eget tortor eget sapien tincidunt vestibulum eu a velit. Pellentesque eu + tortor ut lectus sodales ornare. + """ + +main :: Effect Unit +main = do + Console.log $ print plainText (fourSpaces { pageWidth = 160, ribbonRatio = 0.5 }) test