forked from GitHub/gf-core
Haskell bindings for the C runtime
Added Haskell bindings for the C runtime. Work in progress, the files are not (and should not be) included in makefiles or anything.
This commit is contained in:
148
src/runtime/haskell/CRuntimeFFI/PgfLow.hs
Normal file
148
src/runtime/haskell/CRuntimeFFI/PgfLow.hs
Normal file
@@ -0,0 +1,148 @@
|
||||
{-# LANGUAGE ForeignFunctionInterface #-}
|
||||
|
||||
module PgfLow where
|
||||
|
||||
import Foreign.C
|
||||
import Foreign.C.String
|
||||
import Foreign.Ptr
|
||||
import Gu
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
-- Mindless copypasting and translating of the C functions used in CRuntimeFFI
|
||||
-- From pgf.h
|
||||
|
||||
|
||||
|
||||
-- PgfPGF* pgf_read(const char* fpath, GuPool* pool, GuExn* err);
|
||||
foreign import ccall "pgf/pgf.h pgf_read"
|
||||
pgf_read :: CString -> Ptr GuPool -> Ptr GuExn -> IO (Ptr PgfPGF)
|
||||
|
||||
-- GuString pgf_abstract_name(PgfPGF*);
|
||||
foreign import ccall "pgf/pgf.h pgf_abstract_name"
|
||||
pgf_abstract_name :: Ptr PgfPGF -> IO CString
|
||||
|
||||
-- void pgf_iter_languages(PgfPGF*, GuMapItor*, GuExn* err);
|
||||
foreign import ccall "pgf/pgf.h pgf_iter_languages"
|
||||
pgf_iter_languages :: Ptr PgfPGF -> Ptr GuMapItor -> Ptr GuExn -> IO ()
|
||||
-- TODO test this function
|
||||
-- GuMapItor???
|
||||
-- implement a fun in haskell, export it to c
|
||||
-- GuMapItor contains a pointer to a function
|
||||
-- Ask Koen
|
||||
-- foreign export
|
||||
|
||||
-- PgfConcr* pgf_get_language(PgfPGF*, PgfCId lang);
|
||||
foreign import ccall "pgf/pgf.h pgf_get_language"
|
||||
pgf_get_language :: Ptr PgfPGF -> CString -> IO (Ptr PgfConcr)
|
||||
|
||||
|
||||
-- GuString pgf_concrete_name(PgfConcr*);
|
||||
foreign import ccall "pgf/pgf.h pgf_concrete_name"
|
||||
pgf_concrete_name :: Ptr PgfConcr -> IO CString
|
||||
|
||||
-- GuString pgf_language_code(PgfConcr* concr);
|
||||
foreign import ccall "pgf/pgf.h pgf_language_code"
|
||||
pgf_language_code :: Ptr PgfConcr -> IO CString
|
||||
|
||||
|
||||
--void pgf_iter_categories(PgfPGF* pgf, GuMapItor* fn, GuExn* err);
|
||||
foreign import ccall "pgf/pgf.h pgf_iter_categories"
|
||||
pgf_iter_categories :: Ptr PgfPGF -> Ptr GuMapItor -> Ptr GuExn -> IO ()
|
||||
--TODO test this function
|
||||
|
||||
-- PgfCId pgf_start_cat(PgfPGF* pgf, GuPool* pool);
|
||||
foreign import ccall "pgf/pgf.h pgf_start_cat"
|
||||
pgf_start_cat :: Ptr PgfPGF -> IO CString
|
||||
|
||||
-- void pgf_iter_functions(PgfPGF* pgf, GuMapItor* fn, GuExn* err);
|
||||
foreign import ccall "pgf/pgf.h pgf_iter_functions"
|
||||
pgf_iter_functions :: Ptr PgfPGF -> Ptr GuMapItor -> Ptr GuExn -> IO ()
|
||||
--TODO test this function
|
||||
|
||||
-- void pgf_iter_functions_by_cat(PgfPGF* pgf, PgfCId catname,
|
||||
-- GuMapItor* fn, GuExn* err);
|
||||
foreign import ccall "pgf/pgf.h pgf_iter_functions_by_cat"
|
||||
pgf_iter_functions_by_cat :: Ptr PgfPGF -> Ptr GuMapItor -> Ptr GuExn -> IO ()
|
||||
--TODO test this function
|
||||
|
||||
-- PgfType* pgf_function_type(PgfPGF* pgf, PgfCId funname);
|
||||
foreign import ccall "pgf/pgf.h pgf_function_type"
|
||||
pgf_function_type :: Ptr PgfPGF -> CString -> IO (Ptr PgfType)
|
||||
|
||||
-- GuString pgf_print_name(PgfConcr*, PgfCId id);
|
||||
foreign import ccall "pgf/pgf.h pgf_print_name"
|
||||
pgf_print_name :: Ptr PgfConcr -> CString -> IO CString
|
||||
|
||||
--void pgf_linearize(PgfConcr* concr, PgfExpr expr, GuOut* out, GuExn* err);
|
||||
foreign import ccall "pgf/pgf.h pgf_linearize"
|
||||
pgf_linearize :: Ptr PgfConcr -> PgfExpr -> Ptr GuOut -> Ptr GuExn -> IO ()
|
||||
|
||||
-- PgfExprEnum* pgf_parse(PgfConcr* concr, PgfCId cat, GuString sentence,
|
||||
-- GuExn* err, GuPool* pool, GuPool* out_pool);
|
||||
foreign import ccall "pgf/pgf.h pgf_parse"
|
||||
pgf_parse :: Ptr PgfConcr -> CString -> CString -> Ptr GuExn -> Ptr GuPool -> Ptr GuPool -> IO (Ptr PgfExprEnum)
|
||||
|
||||
--void pgf_lookup_morpho(PgfConcr *concr, GuString sentence,
|
||||
-- PgfMorphoCallback* callback, GuExn* err);
|
||||
foreign import ccall "pgf/pgf.h pgf_lookup_morpho"
|
||||
pgf_lookup_morpho :: Ptr PgfConcr -> CString -> Ptr PgfMorphoCallback -> Ptr GuExn -> IO ()
|
||||
|
||||
type Callback = Ptr PgfMorphoCallback -> CString -> CString -> Float -> Ptr GuExn -> IO ()
|
||||
|
||||
foreign import ccall "wrapper"
|
||||
wrapLookupMorpho :: Callback -> IO (FunPtr Callback)
|
||||
|
||||
|
||||
--GuEnum* pgf_fullform_lexicon(PgfConcr *concr, GuPool* pool);
|
||||
foreign import ccall "pgf/pgf.h pgf_fullform_lexicon"
|
||||
pgf_fullform_lexicon :: Ptr PgfConcr -> Ptr GuPool -> IO (Ptr GuEnum)
|
||||
|
||||
--GuString pgf_fullform_get_string(PgfFullFormEntry* entry);
|
||||
foreign import ccall "pgf/pgf.h pgf_fullform_get_string"
|
||||
pgf_fullform_get_string :: Ptr PgfFullFormEntry -> IO CString
|
||||
|
||||
-- void pgf_fullform_get_analyses(PgfFullFormEntry* entry,
|
||||
-- PgfMorphoCallback* callback, GuExn* err)
|
||||
foreign import ccall "pgf/pgf.h pgf_fullform_get_analyses"
|
||||
pgf_fullform_get_analyses :: Ptr PgfFullFormEntry -> Ptr PgfMorphoCallback -> Ptr GuExn -> IO ()
|
||||
|
||||
|
||||
--PgfApplication* pgf_expr_unapply(PgfExpr expr, GuPool* pool);
|
||||
foreign import ccall "pgf/pgf.h pgf_expr_unapply"
|
||||
pgf_expr_unapply :: PgfExpr -> Ptr GuPool -> IO (Ptr PgfApplication)
|
||||
|
||||
--int pgf_expr_arity(PgfExpr expr);
|
||||
foreign import ccall "pgf/expr.h pgf_expr_arity"
|
||||
pgf_expr_arity :: PgfExpr -> IO Int
|
||||
--Not needed anymore, solved the problem with unapply using CInt instead of Int
|
||||
|
||||
|
||||
--void pgf_print_expr(PgfExpr expr, PgfPrintContext* ctxt, int prec,
|
||||
-- GuOut* out, GuExn* err);
|
||||
foreign import ccall "pgf/expr.h pgf_print_expr"
|
||||
pgf_print_expr :: PgfExpr -> Ptr PgfPrintContext -> Int -> Ptr GuOut -> Ptr GuExn -> IO ()
|
||||
--PgfExprEnum* pgf_generate_all(PgfPGF* pgf, PgfCId cat, GuPool* pool);
|
||||
foreign import ccall "pgf/pgf.h pgf_generate_all"
|
||||
pgf_generate_all :: Ptr PgfPGF -> CString -> Ptr GuPool -> IO (Ptr PgfExprEnum)
|
||||
|
||||
-- void pgf_print(PgfPGF* pgf, GuOut* out, GuExn* err);
|
||||
foreign import ccall "pgf/pgf.h pgf_print"
|
||||
pgf_print :: Ptr PgfPGF -> Ptr GuOut -> Ptr GuExn -> IO ()
|
||||
|
||||
--PgfExpr pgf_read_expr(GuIn* in, GuPool* pool, GuExn* err);
|
||||
foreign import ccall "pgf/expr.h pgf_read_expr"
|
||||
pgf_read_expr :: Ptr GuIn -> Ptr GuPool -> Ptr GuExn -> IO PgfExpr
|
||||
|
||||
--PgfExprEnum*
|
||||
--pgf_parse_with_heuristics(PgfConcr* concr, PgfCId cat, PgfLexer *lexer,
|
||||
-- double heuristics,
|
||||
-- GuPool* pool, GuPool* out_pool);
|
||||
-- Not needed
|
||||
|
||||
-- GuEnum* pgf_complete(PgfConcr* concr, PgfCId cat, PgfLexer *lexer,
|
||||
-- GuString prefix, GuPool* pool);
|
||||
-- TODO
|
||||
|
||||
-- bool pgf_parseval(PgfConcr* concr, PgfExpr expr, PgfCId cat,
|
||||
-- double *precision, double *recall, double *exact);
|
||||
-- Not needed
|
||||
Reference in New Issue
Block a user