mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-02 07:42:50 -06:00
implement pre {..}
This commit is contained in:
@@ -275,6 +275,7 @@ showPGF p =
|
||||
nest 2 (vcat syms) $$
|
||||
char ']')
|
||||
modifyIORef ref $ (\doc -> doc $$ def)
|
||||
return ()
|
||||
|
||||
-- | The abstract language name is the name of the top-level
|
||||
-- abstract module
|
||||
|
||||
@@ -185,6 +185,8 @@ foreign import ccall "dynamic" callLinBuilder4 :: Dynamic (Ptr PgfLinBuilderIfac
|
||||
|
||||
foreign import ccall "dynamic" callLinBuilder5 :: Dynamic (Ptr PgfLinBuilderIface -> Ptr PgfText -> Ptr PgfExn -> IO ())
|
||||
|
||||
foreign import ccall "dynamic" callLinBuilder6 :: Dynamic (Ptr PgfLinBuilderIface -> CSize -> CSize -> Ptr (Ptr PgfText) -> Ptr PgfExn -> IO ())
|
||||
|
||||
foreign import ccall pgf_create_lincat :: Ptr PgfDB -> Ptr PGF -> Ptr Concr -> Ptr PgfText -> CSize -> Ptr (Ptr PgfText) -> Ptr PgfExn -> IO ()
|
||||
|
||||
foreign import ccall pgf_drop_lincat :: Ptr PgfDB -> Ptr Concr -> Ptr PgfText -> Ptr PgfExn -> IO ()
|
||||
|
||||
@@ -264,7 +264,7 @@ createLin name prods = Transaction $ \c_db c_abstr c_revision c_exn ->
|
||||
forM_ seqs c_exn $ \syms -> do
|
||||
fun <- (#peek PgfLinBuilderIfaceVtbl, start_sequence) vtbl
|
||||
callLinBuilder1 fun c_builder (fromIntegral (length syms)) c_exn
|
||||
mapM_ (addSymbol c_builder vtbl c_exn) syms
|
||||
forM_ syms c_exn (addSymbol c_builder vtbl c_exn)
|
||||
fun <- (#peek PgfLinBuilderIfaceVtbl, end_sequence) vtbl
|
||||
callLinBuilder0 fun c_builder c_exn
|
||||
fun <- (#peek PgfLinBuilderIfaceVtbl, end_production) vtbl
|
||||
@@ -283,6 +283,28 @@ createLin name prods = Transaction $ \c_db c_abstr c_revision c_exn ->
|
||||
fun <- (#peek PgfLinBuilderIfaceVtbl, add_symks) vtbl
|
||||
withText tok $ \c_tok ->
|
||||
callLinBuilder5 fun c_builder c_tok c_exn
|
||||
addSymbol c_builder vtbl c_exn (SymKP def alts) = do
|
||||
fun <- (#peek PgfLinBuilderIfaceVtbl, start_symkp) vtbl
|
||||
callLinBuilder2 fun c_builder (fromIntegral (length def)) (fromIntegral (length alts)) c_exn
|
||||
forM_ def c_exn (addSymbol c_builder vtbl c_exn)
|
||||
forM_ alts c_exn $ \(form,ps) -> do
|
||||
let n_ps = length ps
|
||||
(allocaBytes (n_ps*(#size PgfText*)) $ \c_ps ->
|
||||
withTexts c_ps 0 ps $ do
|
||||
fun <- (#peek PgfLinBuilderIfaceVtbl, start_symkp_alt) vtbl
|
||||
callLinBuilder6 fun c_builder (fromIntegral (length form)) (fromIntegral n_ps) c_ps c_exn)
|
||||
forM_ form c_exn (addSymbol c_builder vtbl c_exn)
|
||||
fun <- (#peek PgfLinBuilderIfaceVtbl, end_symkp_alt) vtbl
|
||||
callLinBuilder0 fun c_builder c_exn
|
||||
fun <- (#peek PgfLinBuilderIfaceVtbl, end_symkp) vtbl
|
||||
callLinBuilder0 fun c_builder c_exn
|
||||
where
|
||||
withTexts p i [] f = f
|
||||
withTexts p i (s:ss) f =
|
||||
withText s $ \c_s -> do
|
||||
pokeElemOff p i c_s
|
||||
withTexts p (i+1) ss f
|
||||
|
||||
addSymbol c_builder vtbl c_exn SymBIND = do
|
||||
fun <- (#peek PgfLinBuilderIfaceVtbl, add_symbind) vtbl
|
||||
callLinBuilder0 fun c_builder c_exn
|
||||
|
||||
Reference in New Issue
Block a user