packages feed

hse-cpp 0.1 → 0.2

raw patch · 3 files changed

+72/−73 lines, 3 filesdep ~haskell-src-extsnew-uploader

Dependency ranges changed: haskell-src-exts

Files

− Language/Haskell/Exts/Annotated/CPP.hs
@@ -1,66 +0,0 @@-module Language.Haskell.Exts.Annotated.CPP-  ( parseFileWithCommentsAndCPP-  , parseFileContentsWithCommentsAndCPP-  , defaultCpphsOptions-  , CpphsOptions(..)-  , BoolOptions(..)-  ) where--import qualified Language.Preprocessor.Cpphs as Orig-import Language.Preprocessor.Cpphs hiding (defaultCpphsOptions)-import Language.Preprocessor.Unlit-import Language.Haskell.Exts (ParseMode(..))-import Language.Haskell.Exts.Annotated-import Control.Applicative-import Data.List--parseFileWithCommentsAndCPP ::  CpphsOptions -> ParseMode -> FilePath-                      -> IO (ParseResult (Module SrcSpanInfo, [Comment]))-parseFileWithCommentsAndCPP cppopts parseMode0 file = do-    content <- readFile file-    parseFileContentsWithCommentsAndCPP cppopts parseMode content-  where-    parseMode = parseMode0 { parseFilename = file }--parseFileContentsWithCommentsAndCPP-    :: CpphsOptions -> ParseMode -> String-    -> IO (ParseResult (Module SrcSpanInfo, [Comment]))-parseFileContentsWithCommentsAndCPP cppopts p rawStr = do-    let filename = parseFilename p-        md = delit filename rawStr-        cppMode = updateExtensions p md-    processedSrc <- cpp cppopts cppMode md-    let finalMode = updateExtensions cppMode processedSrc-    return $ parseModuleWithComments finalMode processedSrc--updateExtensions :: ParseMode -> String -> ParseMode-updateExtensions p mod =-  let oldLang = baseLanguage p-      exts = extensions p-      (bLang, extraExts) =-          case (ignoreLanguagePragmas p, readExtensions mod) of-            (False, Just (mLang, es)) ->-                 (case mLang of {Nothing -> oldLang;Just newLang -> newLang}, es)-            _ -> (oldLang, [])-  in p { extensions = exts ++ extraExts-       , ignoreLanguagePragmas = False-       , baseLanguage = bLang-       }--cpp cppopts p str-  | CPP `elem` impliesExts (toExtensionList (baseLanguage p) (extensions p))-  = runCpphs cppopts (parseFilename p) str-  | otherwise = return str--delit :: String -> String -> String-delit fn = if ".lhs" `isSuffixOf` fn then unlit fn else id--defaultCpphsOptions =-  Orig.defaultCpphsOptions-  { boolopts = (boolopts Orig.defaultCpphsOptions)-      { locations = True-      , stripC89 = True-      , stripEol = False-      , hashline = False-      }-  }
+ Language/Haskell/Exts/CPP.hs view
@@ -0,0 +1,65 @@+module Language.Haskell.Exts.CPP+  ( parseFileWithCommentsAndCPP+  , parseFileContentsWithCommentsAndCPP+  , defaultCpphsOptions+  , CpphsOptions(..)+  , BoolOptions(..)+  ) where++import qualified Language.Preprocessor.Cpphs as Orig+import Language.Preprocessor.Cpphs hiding (defaultCpphsOptions)+import Language.Preprocessor.Unlit+import Language.Haskell.Exts+import Control.Applicative+import Data.List++parseFileWithCommentsAndCPP ::  CpphsOptions -> ParseMode -> FilePath+                      -> IO (ParseResult (Module SrcSpanInfo, [Comment]))+parseFileWithCommentsAndCPP cppopts parseMode0 file = do+    content <- readFile file+    parseFileContentsWithCommentsAndCPP cppopts parseMode content+  where+    parseMode = parseMode0 { parseFilename = file }++parseFileContentsWithCommentsAndCPP+    :: CpphsOptions -> ParseMode -> String+    -> IO (ParseResult (Module SrcSpanInfo, [Comment]))+parseFileContentsWithCommentsAndCPP cppopts p rawStr = do+    let filename = parseFilename p+        md = delit filename rawStr+        cppMode = updateExtensions p md+    processedSrc <- cpp cppopts cppMode md+    let finalMode = updateExtensions cppMode processedSrc+    return $ parseModuleWithComments finalMode processedSrc++updateExtensions :: ParseMode -> String -> ParseMode+updateExtensions p mod =+  let oldLang = baseLanguage p+      exts = extensions p+      (bLang, extraExts) =+          case (ignoreLanguagePragmas p, readExtensions mod) of+            (False, Just (mLang, es)) ->+                 (case mLang of {Nothing -> oldLang;Just newLang -> newLang}, es)+            _ -> (oldLang, [])+  in p { extensions = exts ++ extraExts+       , ignoreLanguagePragmas = False+       , baseLanguage = bLang+       }++cpp cppopts p str+  | CPP `elem` impliesExts (toExtensionList (baseLanguage p) (extensions p))+  = runCpphs cppopts (parseFilename p) str+  | otherwise = return str++delit :: String -> String -> String+delit fn = if ".lhs" `isSuffixOf` fn then unlit fn else id++defaultCpphsOptions =+  Orig.defaultCpphsOptions+  { boolopts = (boolopts Orig.defaultCpphsOptions)+      { locations = True+      , stripC89 = True+      , stripEol = False+      , hashline = False+      }+  }
hse-cpp.cabal view
@@ -1,23 +1,23 @@--- Initial hse-cpp.cabal generated by cabal init.  For further +-- Initial hse-cpp.cabal generated by cabal init.  For further -- documentation, see http://haskell.org/cabal/users-guide/  name:                hse-cpp-version:             0.1+version:             0.2 synopsis:            Preprocess+parse haskell code--- description:         +-- description: license:             MIT license-file:        LICENSE author:              Roman Cheplyaka maintainer:          Roman Cheplyaka <roma@ro-che.info>--- copyright:           +-- copyright: category:            Language build-type:          Simple cabal-version:       >=1.10  library-  exposed-modules:     Language.Haskell.Exts.Annotated.CPP-  -- other-modules:       +  exposed-modules:     Language.Haskell.Exts.CPP+  -- other-modules:   build-depends:       base == 4.*                      , cpphs-                     , haskell-src-exts >= 1.14+                     , haskell-src-exts >= 1.18   default-language:    Haskell2010