1
0
forked from GitHub/gf-core

A new function called "completions" is added in the Haskell runtime and used in PGFService. This makes the extraction of completions more platform independent

This commit is contained in:
Krasimir Angelov
2017-09-06 15:17:28 +02:00
parent 301b100988
commit ebe7cb3b73
2 changed files with 27 additions and 22 deletions

View File

@@ -66,7 +66,7 @@ module PGF(
Forest.showBracketedString,flattenBracketedString,
-- ** Parsing
parse, parseAllLang, parseAll, parse_, parseWithRecovery,
parse, parseAllLang, parseAll, parse_, parseWithRecovery, complete,
-- ** Evaluation
PGF.compute, paraphrase,
@@ -273,6 +273,25 @@ parse_ pgf lang typ dp s =
parseWithRecovery pgf lang typ open_typs dp s = Parse.parseWithRecovery pgf lang typ open_typs dp (words s)
complete :: PGF -> Language -> Type -> String -> String -> (BracketedString,String,Map.Map Token [CId])
complete pgf from typ input prefix =
let ws = words input
ps0 = Parse.initState pgf from typ
(ps,ws') = loop ps0 ws
bs = snd (Parse.getParseOutput ps typ Nothing)
in if not (null ws')
then (bs, unwords (if null prefix then ws' else ws'++[prefix]), Map.empty)
else (bs, prefix, fmap getFuns (Parse.getCompletions ps prefix))
where
loop ps [] = (ps,[])
loop ps (w:ws) = case Parse.nextState ps (Parse.simpleParseInput w) of
Left es -> (ps,w:ws)
Right ps -> loop ps ws
getFuns ps = [cid | (funid,cid,seq) <- snd . head $ Map.toList contInfo]
where
contInfo = Parse.getContinuationInfo ps
groupResults :: [[(Language,String)]] -> [(Language,[String])]
groupResults = Map.toList . foldr more Map.empty . start . concat
where