diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2013-12-10 16:11:47 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2013-12-10 16:11:47 +0000 |
| commit | 0851308099f625bb451f80e62e33137df199322f (patch) | |
| tree | a2758d78b2e3ae4df7c04e3f50bd9860332f8076 /src/runtime/haskell-bind/PgfLow.hs | |
| parent | 97d56065c4f03d7004c1f32ede2ff93ced1e7757 (diff) | |
move src/runtime/haskell/CRuntimeFFI to src/runtime/haskell-bind. Don't mess up with the stable Haskell runtime!
Diffstat (limited to 'src/runtime/haskell-bind/PgfLow.hs')
| -rw-r--r-- | src/runtime/haskell-bind/PgfLow.hs | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/src/runtime/haskell-bind/PgfLow.hs b/src/runtime/haskell-bind/PgfLow.hs new file mode 100644 index 000000000..dc53baeb0 --- /dev/null +++ b/src/runtime/haskell-bind/PgfLow.hs @@ -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 |
