mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-23 03:32:51 -06:00
Use shorter lines and paragraph-filling in SRGS, JSGF and GSL printing.
This commit is contained in:
@@ -35,7 +35,7 @@ import Data.List (partition)
|
|||||||
import Text.PrettyPrint.HughesPJ
|
import Text.PrettyPrint.HughesPJ
|
||||||
|
|
||||||
width :: Int
|
width :: Int
|
||||||
width = 80
|
width = 75
|
||||||
|
|
||||||
gslPrinter :: Options -> StateGrammar -> String
|
gslPrinter :: Options -> StateGrammar -> String
|
||||||
gslPrinter opts s = renderStyle st $ prGSL $ makeSimpleSRG opts s
|
gslPrinter opts s = renderStyle st $ prGSL $ makeSimpleSRG opts s
|
||||||
@@ -63,13 +63,13 @@ prItem = f
|
|||||||
f (REUnion xs) = (if null es then empty else text "?") <> union (map f nes)
|
f (REUnion xs) = (if null es then empty else text "?") <> union (map f nes)
|
||||||
where (es,nes) = partition isEpsilon xs
|
where (es,nes) = partition isEpsilon xs
|
||||||
f (REConcat [x]) = f x
|
f (REConcat [x]) = f x
|
||||||
f (REConcat xs) = text "(" <> sep (map f xs) <> text ")"
|
f (REConcat xs) = text "(" <> fsep (map f xs) <> text ")"
|
||||||
f (RERepeat x) = text "*" <> f x
|
f (RERepeat x) = text "*" <> f x
|
||||||
f (RESymbol s) = prSymbol s
|
f (RESymbol s) = prSymbol s
|
||||||
|
|
||||||
union :: [Doc] -> Doc
|
union :: [Doc] -> Doc
|
||||||
union [x] = x
|
union [x] = x
|
||||||
union xs = text "[" <> sep xs <> text "]"
|
union xs = text "[" <> fsep xs <> text "]"
|
||||||
|
|
||||||
prSymbol :: Symbol SRGNT Token -> Doc
|
prSymbol :: Symbol SRGNT Token -> Doc
|
||||||
prSymbol (Cat (c,_)) = prCat c
|
prSymbol (Cat (c,_)) = prCat c
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ import Text.PrettyPrint.HughesPJ
|
|||||||
import Debug.Trace
|
import Debug.Trace
|
||||||
|
|
||||||
width :: Int
|
width :: Int
|
||||||
width = 80
|
width = 75
|
||||||
|
|
||||||
jsgfPrinter :: Maybe SISRFormat
|
jsgfPrinter :: Maybe SISRFormat
|
||||||
-> Options
|
-> Options
|
||||||
@@ -92,7 +92,7 @@ prItem sisr t = f 0
|
|||||||
| otherwise = (if p >= 1 then parens else id) (alts (map (f 1) xs))
|
| otherwise = (if p >= 1 then parens else id) (alts (map (f 1) xs))
|
||||||
where (es,nes) = partition isEpsilon xs
|
where (es,nes) = partition isEpsilon xs
|
||||||
f _ (REConcat []) = text "<NULL>"
|
f _ (REConcat []) = text "<NULL>"
|
||||||
f p (REConcat xs) = (if p >= 3 then parens else id) (hsep (map (f 2) xs))
|
f p (REConcat xs) = (if p >= 3 then parens else id) (fsep (map (f 2) xs))
|
||||||
f p (RERepeat x) = f 3 x <> char '*'
|
f p (RERepeat x) = f 3 x <> char '*'
|
||||||
f _ (RESymbol s) = prSymbol sisr t s
|
f _ (RESymbol s) = prSymbol sisr t s
|
||||||
|
|
||||||
@@ -125,10 +125,10 @@ comment :: String -> Doc
|
|||||||
comment s = text "//" <+> text s
|
comment s = text "//" <+> text s
|
||||||
|
|
||||||
alts :: [Doc] -> Doc
|
alts :: [Doc] -> Doc
|
||||||
alts = sep . prepunctuate (text "| ")
|
alts = fsep . prepunctuate (text "| ")
|
||||||
|
|
||||||
rule :: Bool -> SRGCat -> [Doc] -> Doc
|
rule :: Bool -> SRGCat -> [Doc] -> Doc
|
||||||
rule pub c xs = sep [p <+> prCat c <+> char '=', nest 2 (alts xs) <+> char ';']
|
rule pub c xs = p <+> prCat c <+> char '=' <+> nest 2 (alts xs) <+> char ';'
|
||||||
where p = if pub then text "public" else empty
|
where p = if pub then text "public" else empty
|
||||||
|
|
||||||
-- Pretty-printing utilities
|
-- Pretty-printing utilities
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ import Text.PrettyPrint.HughesPJ
|
|||||||
import Debug.Trace
|
import Debug.Trace
|
||||||
|
|
||||||
width :: Int
|
width :: Int
|
||||||
width = 80
|
width = 75
|
||||||
|
|
||||||
srgsAbnfPrinter :: Maybe SISRFormat
|
srgsAbnfPrinter :: Maybe SISRFormat
|
||||||
-> Bool -- ^ Include probabilities
|
-> Bool -- ^ Include probabilities
|
||||||
@@ -97,7 +97,7 @@ prItem sisr t = f 0
|
|||||||
| otherwise = (if p >= 1 then parens else id) (alts (map (f 1) xs))
|
| otherwise = (if p >= 1 then parens else id) (alts (map (f 1) xs))
|
||||||
where (es,nes) = partition isEpsilon xs
|
where (es,nes) = partition isEpsilon xs
|
||||||
f _ (REConcat []) = text "$NULL"
|
f _ (REConcat []) = text "$NULL"
|
||||||
f p (REConcat xs) = (if p >= 3 then parens else id) (hsep (map (f 2) xs))
|
f p (REConcat xs) = (if p >= 3 then parens else id) (fsep (map (f 2) xs))
|
||||||
f p (RERepeat x) = f 3 x <> text "<0->"
|
f p (RERepeat x) = f 3 x <> text "<0->"
|
||||||
f _ (RESymbol s) = prSymbol sisr t s
|
f _ (RESymbol s) = prSymbol sisr t s
|
||||||
|
|
||||||
@@ -124,10 +124,10 @@ comment :: String -> Doc
|
|||||||
comment s = text "//" <+> text s
|
comment s = text "//" <+> text s
|
||||||
|
|
||||||
alts :: [Doc] -> Doc
|
alts :: [Doc] -> Doc
|
||||||
alts = sep . prepunctuate (text "| ")
|
alts = fsep . prepunctuate (text "| ")
|
||||||
|
|
||||||
rule :: Bool -> SRGCat -> [Doc] -> Doc
|
rule :: Bool -> SRGCat -> [Doc] -> Doc
|
||||||
rule pub c xs = sep [p <+> prCat c <+> char '=', nest 2 (alts xs) <+> char ';']
|
rule pub c xs = p <+> prCat c <+> char '=' <+> nest 2 (alts xs) <+> char ';'
|
||||||
where p = if pub then text "public" else empty
|
where p = if pub then text "public" else empty
|
||||||
|
|
||||||
meta :: String -> String -> Doc
|
meta :: String -> String -> Doc
|
||||||
|
|||||||
Reference in New Issue
Block a user