2{-# LANGUAGE FlexibleInstances #-}
3{-# LANGUAGE TypeSynonymInstances #-}
4-----------------------------------------------------------------------------
6-- Module : Language.Javascript.JSaddle.String
7-- Copyright : (c) Hamish Mackenzie
10-- Maintainer : Hamish Mackenzie <Hamish.K.Mackenzie@googlemail.com>
12-- | JavaScript string conversion functions
14-----------------------------------------------------------------------------
16module Language.Javascript.JSaddle.String (
20 -- * Data.Text helpers
26import Data.Text (Text)
27import Control.Monad.IO.Class (MonadIO(..))
28import Language.Javascript.JSaddle.Types (JSString)
30import Data.JSString.Text (textFromJSString, textToJSString)
31import GHCJS.Marshal.Internal (PFromJSVal(..))
32import GHCJS.Types (nullRef)
34import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSStringRef
35 (jsstringcreatewithcharacters, jsstringgetcharactersptr,
37import Language.Javascript.JSaddle.Native (makeNewJSString, withJSString)
38import System.IO.Unsafe (unsafePerformIO)
39import Foreign.ForeignPtr (newForeignPtr_)
40import Foreign.Ptr (nullPtr)
41import qualified Data.Text.Foreign as T (fromPtr)
42import Foreign (castPtr)
43import Data.Text.Foreign (useAsPtr)
45import Language.Javascript.JSaddle.Classes (ToJSString(..))
47-- | Convert a JavaScript string to a Haskell 'Text'
48strToText :: MonadIO m => JSString -> m Text
50strToText = return . textFromJSString
52strToText jsstring' = liftIO $ withJSString jsstring' $ \jsstring -> do
53 l <- jsstringgetlength jsstring
54 p <- jsstringgetcharactersptr jsstring
55 T.fromPtr (castPtr p) (fromIntegral l)
57{-# INLINE strToText #-}
59-- | Convert a Haskell 'Text' to a JavaScript string
60textToStr :: Text -> JSString
62textToStr = textToJSString
64textToStr text = unsafePerformIO $
65 useAsPtr text $ \p l ->
66 jsstringcreatewithcharacters (castPtr p) (fromIntegral l) >>= makeNewJSString
68{-# INLINE textToStr #-}
70nullJSString :: JSString
72nullJSString = pFromJSVal nullRef
74nullJSString = unsafePerformIO $ newForeignPtr_ nullPtr
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list