an API to retrieve a single language

This commit is contained in:
Krasimir Angelov
2024-09-20 17:34:10 +02:00
parent e722916728
commit 8878eddb7d
4 changed files with 39 additions and 1 deletions
+11 -1
View File
@@ -76,7 +76,7 @@ module PGF2 (-- * PGF
graphvizWordAlignment, graphvizLRAutomaton,
-- * Concrete syntax
ConcName,Concr,languages,concreteName,languageCode,concreteFlag,
ConcName,Concr,languages,language,concreteName,languageCode,concreteFlag,
-- ** Linearization
linearize, linearizeAll, tabularLinearize, tabularLinearizeAll,
@@ -299,6 +299,16 @@ languages p = unsafePerformIO $ do
fptr <- newForeignPtrEnv pgf_free_concr_revision (a_db p) (castPtr c_revision)
writeIORef ref (Map.insert name (Concr (a_db p) fptr) concrs)
language :: PGF -> ConcName -> Maybe Concr
language p name = unsafePerformIO $
(withForeignPtr (a_revision p) $ \c_revision ->
withText name $ \c_name -> do
res <- withPgfExn "language" (pgf_get_concrete (a_db p) c_revision c_name)
if res == nullPtr
then return Nothing
else do fptr <- newForeignPtrEnv pgf_free_concr_revision (a_db p) res
return (Just (Concr (a_db p) fptr)))
showPGF :: PGF -> String
showPGF p =
render (text "abstract" <+> ppAbstractName p <+> char '{' $$
+2
View File
@@ -178,6 +178,8 @@ foreign import ccall pgf_iter_categories :: Ptr PgfDB -> Ptr PGF -> Ptr PgfItor
foreign import ccall pgf_iter_concretes :: Ptr PgfDB -> Ptr PGF -> Ptr PgfItor -> Ptr PgfExn -> IO ()
foreign import ccall pgf_get_concrete :: Ptr PgfDB -> Ptr PGF -> Ptr PgfItor -> Ptr PgfExn -> IO (Ptr Concr)
foreign import ccall pgf_start_cat :: Ptr PgfDB -> Ptr PGF -> Ptr PgfUnmarshaller -> Ptr PgfExn -> IO (StablePtr Type)
foreign import ccall pgf_category_context :: Ptr PgfDB -> Ptr PGF -> Ptr PgfText -> Ptr CSize -> Ptr PgfUnmarshaller -> Ptr PgfExn -> IO (Ptr PgfTypeHypo)