From 65f012d15513814bd2cc4ad74f54edd35ade13fe Mon Sep 17 00:00:00 2001 From: bringert Date: Mon, 23 Aug 2004 07:51:36 +0000 Subject: Added CFGM format (pm -printer=cfgm) and utf8 conversion for pm. --- src/GF/API.hs | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'src/GF/API.hs') 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 -- cgit v1.2.3