summaryrefslogtreecommitdiff
path: root/src/GF/API.hs
diff options
context:
space:
mode:
authorbringert <unknown>2004-08-23 07:51:36 +0000
committerbringert <unknown>2004-08-23 07:51:36 +0000
commit65f012d15513814bd2cc4ad74f54edd35ade13fe (patch)
tree089419071773038e8357a6b97a9ec0481df2a338 /src/GF/API.hs
parent25ffe15333a881022047409a1c12a17dd41d1198 (diff)
Added CFGM format (pm -printer=cfgm) and utf8 conversion for pm.
Diffstat (limited to 'src/GF/API.hs')
-rw-r--r--src/GF/API.hs24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/GF/API.hs b/src/GF/API.hs
index 5a55f5b1f..f1fd3a50e 100644
--- a/src/GF/API.hs
+++ b/src/GF/API.hs
@@ -33,6 +33,7 @@ import ShellState
import Linear
import GFC
import qualified Grammar as G
+import Modules
import PrGrammar
import qualified Compute as Co
import qualified Ident as I
@@ -284,12 +285,21 @@ prMultiGrammar opts = M.showMGrammar (oElem optimizeCanon opts)
optPrintGrammar :: Options -> StateGrammar -> String
optPrintGrammar opts = customOrDefault opts grammarPrinter customGrammarPrinter
-optPrintSyntax :: Options -> GF.Grammar -> String
-optPrintSyntax opts = customOrDefault opts grammarPrinter customSyntaxPrinter
+optPrintMultiGrammar :: Options -> CanonGrammar -> String
+optPrintMultiGrammar opts = pmg . encode
+ where
+ pmg = customOrDefault opts grammarPrinter customMultiGrammarPrinter
+ -- if -utf8 was given, convert from language specific codings
+ encode = if oElem useUTF8 opts then mapModules moduleToUTF8 else id
+ moduleToUTF8 m =
+ m{ jments = mapTree (onSnd (mapInfoTerms code)) (jments m),
+ flags = setFlag "coding" "utf8" (flags m) }
+ where code = onTokens (anyCodingToUTF8 (moduleOpts m))
+ moduleOpts = Opts . okError . mapM CG.redFlag . flags
-prCanonGrammar :: CanonGrammar -> String
-prCanonGrammar = MC.prCanon
+optPrintSyntax :: Options -> GF.Grammar -> String
+optPrintSyntax opts = customOrDefault opts grammarPrinter customSyntaxPrinter
optPrintTree :: Options -> GFGrammar -> Tree -> String
optPrintTree opts = customOrDefault opts grammarPrinter customTermPrinter
@@ -328,13 +338,19 @@ optTokenizer opts gr = show . customOrDefault opts useTokenizer customTokenizer
-- performs UTF8 if the language does not have flag coding=utf8; replaces name*U
+-- convert a Unicode string into a UTF8 encoded string
optEncodeUTF8 :: GFGrammar -> String -> String
optEncodeUTF8 gr = case getOptVal (stateOptions gr) uniCoding of
Just "utf8" -> id
_ -> encodeUTF8
+-- convert a UTF8 encoded string into a Unicode string
optDecodeUTF8 :: GFGrammar -> String -> String
optDecodeUTF8 gr = case getOptVal (stateOptions gr) uniCoding of
Just "utf8" -> decodeUTF8
_ -> id
+-- convert a string encoded with some coding given by the coding flag to UTF8
+anyCodingToUTF8 :: Options -> String -> String
+anyCodingToUTF8 opts =
+ encodeUTF8 . customOrDefault opts uniCoding customUniCoding