{-# LINE 1 "src/KB/Text/Shape/FFI/API/Other.hsc" #-}
module KB.Text.Shape.FFI.API.Other where

import Prelude hiding (id, error)

import Foreign
import Foreign.C

import KB.Text.Shape.FFI.Handles
import KB.Text.Shape.FFI.Enums
import KB.Text.Shape.FFI.Structs



-- ** Quick test for font support of a sequence of codepoints.

-- | @void kbts_FontCoverageTestBegin(kbts_font_coverage_test *Test, kbts_font *Font);@
foreign import ccall "kbts_FontCoverageTestBegin" kbts_FontCoverageTestBegin
  :: Ptr FontCoverageTest
  -> Font
  -> IO ()

-- | @void kbts_FontCoverageTestCodepoint(kbts_font_coverage_test *Test, int Codepoint);@
foreign import ccall "kbts_FontCoverageTestCodepoint" kbts_FontCoverageTestCodepoint
  :: Ptr FontCoverageTest
  -> CInt -- ^ Codepoint
  -> IO ()

-- | @int  kbts_FontCoverageTestEnd(kbts_font_coverage_test *Test);@
foreign import ccall "kbts_FontCoverageTestEnd" kbts_FontCoverageTestEnd
  :: Ptr FontCoverageTest
  -> IO Int

-- ** Misc.

-- | @kbts_decode kbts_DecodeUtf8(const char *Utf8, kbts_un Length);@

-- | @kbts_encode_utf8 kbts_EncodeUtf8(int Codepoint);@

foreign import ccall unsafe "kbts_ScriptDirection" kbts_ScriptDirection
  :: Script
  -> Direction

-- | @int kbts_ScriptIsComplex(kbts_script Script);@
foreign import ccall unsafe "kbts_ScriptIsComplex" kbts_ScriptIsComplex
  :: Script
  -> CInt

newtype ScriptTag = ScriptTag Word32
  deriving (ScriptTag -> ScriptTag -> Bool
(ScriptTag -> ScriptTag -> Bool)
-> (ScriptTag -> ScriptTag -> Bool) -> Eq ScriptTag
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ScriptTag -> ScriptTag -> Bool
== :: ScriptTag -> ScriptTag -> Bool
$c/= :: ScriptTag -> ScriptTag -> Bool
/= :: ScriptTag -> ScriptTag -> Bool
Eq, Eq ScriptTag
Eq ScriptTag =>
(ScriptTag -> ScriptTag -> Ordering)
-> (ScriptTag -> ScriptTag -> Bool)
-> (ScriptTag -> ScriptTag -> Bool)
-> (ScriptTag -> ScriptTag -> Bool)
-> (ScriptTag -> ScriptTag -> Bool)
-> (ScriptTag -> ScriptTag -> ScriptTag)
-> (ScriptTag -> ScriptTag -> ScriptTag)
-> Ord ScriptTag
ScriptTag -> ScriptTag -> Bool
ScriptTag -> ScriptTag -> Ordering
ScriptTag -> ScriptTag -> ScriptTag
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: ScriptTag -> ScriptTag -> Ordering
compare :: ScriptTag -> ScriptTag -> Ordering
$c< :: ScriptTag -> ScriptTag -> Bool
< :: ScriptTag -> ScriptTag -> Bool
$c<= :: ScriptTag -> ScriptTag -> Bool
<= :: ScriptTag -> ScriptTag -> Bool
$c> :: ScriptTag -> ScriptTag -> Bool
> :: ScriptTag -> ScriptTag -> Bool
$c>= :: ScriptTag -> ScriptTag -> Bool
>= :: ScriptTag -> ScriptTag -> Bool
$cmax :: ScriptTag -> ScriptTag -> ScriptTag
max :: ScriptTag -> ScriptTag -> ScriptTag
$cmin :: ScriptTag -> ScriptTag -> ScriptTag
min :: ScriptTag -> ScriptTag -> ScriptTag
Ord, Int -> ScriptTag -> ShowS
[ScriptTag] -> ShowS
ScriptTag -> String
(Int -> ScriptTag -> ShowS)
-> (ScriptTag -> String)
-> ([ScriptTag] -> ShowS)
-> Show ScriptTag
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ScriptTag -> ShowS
showsPrec :: Int -> ScriptTag -> ShowS
$cshow :: ScriptTag -> String
show :: ScriptTag -> String
$cshowList :: [ScriptTag] -> ShowS
showList :: [ScriptTag] -> ShowS
Show)
  deriving newtype (Ptr ScriptTag -> IO ScriptTag
Ptr ScriptTag -> Int -> IO ScriptTag
Ptr ScriptTag -> Int -> ScriptTag -> IO ()
Ptr ScriptTag -> ScriptTag -> IO ()
ScriptTag -> Int
(ScriptTag -> Int)
-> (ScriptTag -> Int)
-> (Ptr ScriptTag -> Int -> IO ScriptTag)
-> (Ptr ScriptTag -> Int -> ScriptTag -> IO ())
-> (forall b. Ptr b -> Int -> IO ScriptTag)
-> (forall b. Ptr b -> Int -> ScriptTag -> IO ())
-> (Ptr ScriptTag -> IO ScriptTag)
-> (Ptr ScriptTag -> ScriptTag -> IO ())
-> Storable ScriptTag
forall b. Ptr b -> Int -> IO ScriptTag
forall b. Ptr b -> Int -> ScriptTag -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: ScriptTag -> Int
sizeOf :: ScriptTag -> Int
$calignment :: ScriptTag -> Int
alignment :: ScriptTag -> Int
$cpeekElemOff :: Ptr ScriptTag -> Int -> IO ScriptTag
peekElemOff :: Ptr ScriptTag -> Int -> IO ScriptTag
$cpokeElemOff :: Ptr ScriptTag -> Int -> ScriptTag -> IO ()
pokeElemOff :: Ptr ScriptTag -> Int -> ScriptTag -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO ScriptTag
peekByteOff :: forall b. Ptr b -> Int -> IO ScriptTag
$cpokeByteOff :: forall b. Ptr b -> Int -> ScriptTag -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> ScriptTag -> IO ()
$cpeek :: Ptr ScriptTag -> IO ScriptTag
peek :: Ptr ScriptTag -> IO ScriptTag
$cpoke :: Ptr ScriptTag -> ScriptTag -> IO ()
poke :: Ptr ScriptTag -> ScriptTag -> IO ()
Storable)

-- | @kbts_script kbts_ScriptTagToScript(kbts_script_tag Tag);@
foreign import ccall unsafe "kbts_ScriptTagToScript" kbts_ScriptTagToScript
  :: ScriptTag
  -> Script

--  define KBTS_FOURCC(A, B, C, D) ((A) | ((B) << 8) | ((C) << 16) | ((D) << 24))

foreign import ccall unsafe "hs_GetUnitsPerEm" hs_GetUnitsPerEm
  :: Font
  -> Word16

foreign import ccall unsafe "hs_GetCapHeight" hs_GetCapHeight
  :: Font
  -> Word16