From fac915e783583399006cd9f2197870f5fc6c856b Mon Sep 17 00:00:00 2001 From: hallgren Date: Thu, 19 Mar 2015 14:14:30 +0000 Subject: [PATCH] haskell-bind: add bindings to graphviz rendering functions for abstract&parse trees --- src/runtime/haskell-bind/PGF2.hsc | 22 ++++++++++++++++++++++ src/runtime/haskell-bind/PGF2/FFI.hs | 9 ++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/runtime/haskell-bind/PGF2.hsc b/src/runtime/haskell-bind/PGF2.hsc index 0f3b46886..97460de4d 100644 --- a/src/runtime/haskell-bind/PGF2.hsc +++ b/src/runtime/haskell-bind/PGF2.hsc @@ -23,6 +23,7 @@ module PGF2 (-- * CId Type(..), Hypo, functionType, -- * Trees Expr,Fun,readExpr,showExpr,mkApp,unApp,mkStr, + graphvizAbstractTree,graphvizParseTree, -- * Morphology MorphoAnalysis, lookupMorpho, fullFormLexicon, -- * Exceptions @@ -272,6 +273,27 @@ showExpr e = peekCString s +graphvizAbstractTree :: PGF -> Expr -> String +graphvizAbstractTree p e = + unsafePerformIO $ + withGuPool $ \tmpPl -> + do (sb,out) <- newOut tmpPl + exn <- gu_new_exn tmpPl + pgf_graphviz_abstract_tree (pgf p) (expr e) out exn + s <- gu_string_buf_freeze sb tmpPl + peekCString s + + +graphvizParseTree :: Concr -> Expr -> String +graphvizParseTree c e = + unsafePerformIO $ + withGuPool $ \tmpPl -> + do (sb,out) <- newOut tmpPl + exn <- gu_new_exn tmpPl + pgf_graphviz_parse_tree (concr c) (expr e) out exn + s <- gu_string_buf_freeze sb tmpPl + peekCString s + ----------------------------------------------------------------------------- -- Functions using Concr -- Morpho analyses, parsing & linearization diff --git a/src/runtime/haskell-bind/PGF2/FFI.hs b/src/runtime/haskell-bind/PGF2/FFI.hs index 9de76fb51..d78502561 100644 --- a/src/runtime/haskell-bind/PGF2/FFI.hs +++ b/src/runtime/haskell-bind/PGF2/FFI.hs @@ -3,7 +3,7 @@ module PGF2.FFI where import Foreign.C -import Foreign.C.String +--import Foreign.C.String import Foreign.Ptr import Foreign.ForeignPtr import Control.Exception @@ -206,3 +206,10 @@ foreign import ccall "pgf/pgf.h pgf_print" foreign import ccall "pgf/expr.h pgf_read_expr" pgf_read_expr :: Ptr GuIn -> Ptr GuPool -> Ptr GuExn -> IO PgfExpr + + +foreign import ccall "pgf/graphviz.h pgf_graphviz_abstract_tree" + pgf_graphviz_abstract_tree :: Ptr PgfPGF -> PgfExpr -> Ptr GuOut -> Ptr GuExn -> IO () + +foreign import ccall "pgf/graphviz.h pgf_graphviz_parse_tree" + pgf_graphviz_parse_tree :: Ptr PgfConcr -> PgfExpr -> Ptr GuOut -> Ptr GuExn -> IO ()