summaryrefslogtreecommitdiff
path: root/src-3.0/GF/Infra/CompactPrint.hs
blob: 486c9e183ae597f86ad5d2b6eb74b5c6ae29613f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
module GF.Infra.CompactPrint where
import Data.Char

compactPrint = compactPrintCustom keywordGF (const False)

compactPrintGFCC = compactPrintCustom (const False) keywordGFCC

compactPrintCustom pre post = dps . concat . map (spaceIf pre post) . words 

dps = dropWhile isSpace

spaceIf pre post w = case w of
  _ | pre w -> "\n" ++ w
  _ | post w -> w ++ "\n"
  c:_ | isAlpha c || isDigit c -> " " ++ w
  '_':_  -> " " ++ w
  _ -> w

keywordGF w = elem w ["cat","fun","lin","lincat","lindef","oper","param"]
keywordGFCC w = 
  last w == ';' || 
  elem w ["flags","fun","cat","lin","oper","lincat","lindef","printname","param"]