From f44f9a1b00568e205fd68be0f0ea7728e7502a49 Mon Sep 17 00:00:00 2001 From: "kr.angelov" Date: Fri, 19 Dec 2014 08:58:02 +0000 Subject: added mkStr to the Haskell binding --- src/runtime/haskell-bind/PGF2.hsc | 11 ++++++++++- src/runtime/haskell-bind/PGF2/FFI.hs | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'src/runtime/haskell-bind') diff --git a/src/runtime/haskell-bind/PGF2.hsc b/src/runtime/haskell-bind/PGF2.hsc index f8a68bf42..7b44b6cb8 100644 --- a/src/runtime/haskell-bind/PGF2.hsc +++ b/src/runtime/haskell-bind/PGF2.hsc @@ -17,7 +17,7 @@ module PGF2 (-- * PGF -- * Concrete syntax Concr,languages,parse,parseWithHeuristics,linearize, -- * Trees - Expr,readExpr,showExpr,mkApp,unApp, + Expr,readExpr,showExpr,mkApp,unApp,mkStr, -- * Morphology MorphoAnalysis, lookupMorpho, fullFormLexicon, -- * Exceptions @@ -167,6 +167,15 @@ unApp (Expr expr master) = c_args <- peekArray (fromIntegral arity) (appl `plusPtr` (#offset PgfApplication, args)) return $ Just (fun, [Expr c_arg master | c_arg <- c_args]) +mkStr :: String -> Expr +mkStr str = + unsafePerformIO $ + withCString str $ \cstr -> do + exprPl <- gu_new_pool + c_expr <- pgf_expr_string cstr exprPl + exprFPl <- newForeignPtr gu_pool_finalizer exprPl + return (Expr c_expr exprFPl) + readExpr :: String -> Maybe Expr readExpr str = unsafePerformIO $ diff --git a/src/runtime/haskell-bind/PGF2/FFI.hs b/src/runtime/haskell-bind/PGF2/FFI.hs index 528b80ea8..8ddc536b9 100644 --- a/src/runtime/haskell-bind/PGF2/FFI.hs +++ b/src/runtime/haskell-bind/PGF2/FFI.hs @@ -182,6 +182,9 @@ foreign import ccall "pgf/pgf.h pgf_fullform_get_analyses" foreign import ccall "pgf/pgf.h pgf_expr_apply" pgf_expr_apply :: Ptr PgfApplication -> Ptr GuPool -> IO PgfExpr +foreign import ccall "pgf/pgf.h pgf_expr_string" + pgf_expr_string :: CString -> Ptr GuPool -> IO PgfExpr + foreign import ccall "pgf/pgf.h pgf_expr_unapply" pgf_expr_unapply :: PgfExpr -> Ptr GuPool -> IO (Ptr PgfApplication) -- cgit v1.2.3