Commit b23eb7d8 authored by Simon Marlow's avatar Simon Marlow
Browse files

FIX #1561: don't use tabs in pretty-printed output at all.

Tabs aren't guaranteed to be 8 spaces on every output device, so we
shouldn't be using them.  Instead I added a little optimisation to
use chunks of 8 spaces for long indentations.
parent da4dda13
...@@ -989,26 +989,29 @@ display mode IBOX(page_width) IBOX(ribbon_width) txt end doc ...@@ -989,26 +989,29 @@ display mode IBOX(page_width) IBOX(ribbon_width) txt end doc
other -> lay1 k s sl p other -> lay1 k s sl p
lay1 k s sl p = Str (indent k) `txt` (s `txt` lay2 (k PLUS sl) p) lay1 k s sl p = indent k (s `txt` lay2 (k PLUS sl) p)
lay2 k (NilAbove p) = nl_text `txt` lay k p lay2 k (NilAbove p) = nl_text `txt` lay k p
lay2 k (TextBeside s sl p) = s `txt` (lay2 (k PLUS sl) p) lay2 k (TextBeside s sl p) = s `txt` (lay2 (k PLUS sl) p)
lay2 k (Nest _ p) = lay2 k p lay2 k (Nest _ p) = lay2 k p
lay2 k Empty = end lay2 k Empty = end
-- optimise long indentations using LitString chunks of 8 spaces
indent n r | n GREQ ILIT(8) = LStr " "# 8# `txt`
indent (n MINUS ILIT(8)) r
| otherwise = Str (spaces n) `txt` r
in in
lay ILIT(0) doc lay ILIT(0) doc
}} }}
cant_fail = error "easy_display: NoDoc" cant_fail = error "easy_display: NoDoc"
indent n | n GREQ ILIT(8) = '\t' : indent (n MINUS ILIT(8))
| otherwise = spaces n
multi_ch n ch | n LTEQ ILIT(0) = "" multi_ch n ch | n LTEQ ILIT(0) = ""
| otherwise = ch : multi_ch (n MINUS ILIT(1)) ch | otherwise = ch : multi_ch (n MINUS ILIT(1)) ch
spaces n | n LTEQ ILIT(0) = "" spaces n | n LTEQ ILIT(0) = ""
| otherwise = ' ' : spaces (n MINUS ILIT(1)) | otherwise = ' ' : spaces (n MINUS ILIT(1))
\end{code} \end{code}
\begin{code} \begin{code}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment