Automatic reformating by stylish-haskell.
This commit is contained in:
parent
bf54a6335a
commit
ff16db1aa3
79 changed files with 612 additions and 606 deletions
|
@ -42,18 +42,18 @@ module Text.Pandoc.App (
|
||||||
) where
|
) where
|
||||||
import qualified Control.Exception as E
|
import qualified Control.Exception as E
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import Control.Monad.Except (throwError, catchError)
|
import Control.Monad.Except (catchError, throwError)
|
||||||
import Control.Monad.Trans
|
import Control.Monad.Trans
|
||||||
import Data.Monoid
|
|
||||||
import Data.Aeson (FromJSON (..), ToJSON (..), defaultOptions, eitherDecode',
|
import Data.Aeson (FromJSON (..), ToJSON (..), defaultOptions, eitherDecode',
|
||||||
encode, genericToEncoding)
|
encode, genericToEncoding)
|
||||||
import qualified Data.ByteString as BS
|
import qualified Data.ByteString as BS
|
||||||
import qualified Data.ByteString.Lazy as B
|
import qualified Data.ByteString.Lazy as B
|
||||||
import Data.Char (toLower, toUpper)
|
import Data.Char (toLower, toUpper)
|
||||||
import Data.Foldable (foldrM)
|
import Data.Foldable (foldrM)
|
||||||
import Data.List (intercalate, isPrefixOf, isSuffixOf, sort, find)
|
import Data.List (find, intercalate, isPrefixOf, isSuffixOf, sort)
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
import Data.Maybe (fromMaybe, isJust, isNothing)
|
import Data.Maybe (fromMaybe, isJust, isNothing)
|
||||||
|
import Data.Monoid
|
||||||
import qualified Data.Set as Set
|
import qualified Data.Set as Set
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
|
@ -72,25 +72,25 @@ import System.Environment (getArgs, getEnvironment, getProgName)
|
||||||
import System.Exit (ExitCode (..), exitSuccess)
|
import System.Exit (ExitCode (..), exitSuccess)
|
||||||
import System.FilePath
|
import System.FilePath
|
||||||
import System.IO (nativeNewline, stdout)
|
import System.IO (nativeNewline, stdout)
|
||||||
import System.IO.Error (isDoesNotExistError)
|
|
||||||
import qualified System.IO as IO (Newline (..))
|
import qualified System.IO as IO (Newline (..))
|
||||||
|
import System.IO.Error (isDoesNotExistError)
|
||||||
import Text.Pandoc
|
import Text.Pandoc
|
||||||
|
import Text.Pandoc.BCP47 (Lang (..), parseBCP47)
|
||||||
import Text.Pandoc.Builder (setMeta)
|
import Text.Pandoc.Builder (setMeta)
|
||||||
import Text.Pandoc.Class (PandocIO, extractMedia, fillMediaBag, getLog,
|
import Text.Pandoc.Class (PandocIO, extractMedia, fillMediaBag, getLog, openURL,
|
||||||
setResourcePath, setTrace, report, setRequestHeader,
|
readDataFile, readDefaultDataFile, readFileStrict,
|
||||||
setUserDataDir, readFileStrict, readDataFile,
|
report, setInputFiles, setOutputFile,
|
||||||
readDefaultDataFile, setTranslations, openURL,
|
setRequestHeader, setResourcePath, setTrace,
|
||||||
setInputFiles, setOutputFile)
|
setTranslations, setUserDataDir)
|
||||||
import Text.Pandoc.Highlighting (highlightingStyles)
|
import Text.Pandoc.Highlighting (highlightingStyles)
|
||||||
import Text.Pandoc.BCP47 (parseBCP47, Lang(..))
|
import Text.Pandoc.Lua (LuaException (..), runLuaFilter)
|
||||||
import Text.Pandoc.Lua (runLuaFilter, LuaException(..))
|
|
||||||
import Text.Pandoc.Writers.Math (defaultMathJaxURL, defaultKaTeXURL)
|
|
||||||
import Text.Pandoc.PDF (makePDF)
|
import Text.Pandoc.PDF (makePDF)
|
||||||
import Text.Pandoc.Process (pipeProcess)
|
import Text.Pandoc.Process (pipeProcess)
|
||||||
import Text.Pandoc.SelfContained (makeDataURI, makeSelfContained)
|
import Text.Pandoc.SelfContained (makeDataURI, makeSelfContained)
|
||||||
import Text.Pandoc.Shared (headerShift, isURI, ordNub,
|
import Text.Pandoc.Shared (eastAsianLineBreakFilter, headerShift, isURI, ordNub,
|
||||||
safeRead, tabFilter, eastAsianLineBreakFilter)
|
safeRead, tabFilter)
|
||||||
import qualified Text.Pandoc.UTF8 as UTF8
|
import qualified Text.Pandoc.UTF8 as UTF8
|
||||||
|
import Text.Pandoc.Writers.Math (defaultKaTeXURL, defaultMathJaxURL)
|
||||||
import Text.Pandoc.XML (toEntities)
|
import Text.Pandoc.XML (toEntities)
|
||||||
import Text.Printf
|
import Text.Printf
|
||||||
#ifndef _WINDOWS
|
#ifndef _WINDOWS
|
||||||
|
@ -414,7 +414,7 @@ convertWithOpts opts = do
|
||||||
|
|
||||||
case lookup "lang" (optMetadata opts) of
|
case lookup "lang" (optMetadata opts) of
|
||||||
Just l -> case parseBCP47 l of
|
Just l -> case parseBCP47 l of
|
||||||
Left _ -> return ()
|
Left _ -> return ()
|
||||||
Right l' -> setTranslations l'
|
Right l' -> setTranslations l'
|
||||||
Nothing -> setTranslations $ Lang "en" "" "US" []
|
Nothing -> setTranslations $ Lang "en" "" "US" []
|
||||||
|
|
||||||
|
@ -649,7 +649,7 @@ data Opt = Opt
|
||||||
, optResourcePath :: [FilePath] -- ^ Path to search for images etc
|
, optResourcePath :: [FilePath] -- ^ Path to search for images etc
|
||||||
, optRequestHeaders :: [(String, String)] -- ^ Headers for HTTP requests
|
, optRequestHeaders :: [(String, String)] -- ^ Headers for HTTP requests
|
||||||
, optEol :: LineEnding -- ^ Style of line-endings to use
|
, optEol :: LineEnding -- ^ Style of line-endings to use
|
||||||
, optStripComments :: Bool -- ^ Skip HTML comments
|
, optStripComments :: Bool -- ^ Skip HTML comments
|
||||||
} deriving (Generic, Show)
|
} deriving (Generic, Show)
|
||||||
|
|
||||||
instance ToJSON Opt where
|
instance ToJSON Opt where
|
||||||
|
@ -844,7 +844,7 @@ applyLuaFilters mbDatadir filters format d = do
|
||||||
let go f d' = do
|
let go f d' = do
|
||||||
res <- runLuaFilter mbDatadir f format d'
|
res <- runLuaFilter mbDatadir f format d'
|
||||||
case res of
|
case res of
|
||||||
Right x -> return x
|
Right x -> return x
|
||||||
Left (LuaException s) -> E.throw (PandocFilterError f s)
|
Left (LuaException s) -> E.throw (PandocFilterError f s)
|
||||||
foldrM ($) d $ map go expandedFilters
|
foldrM ($) d $ map go expandedFilters
|
||||||
|
|
||||||
|
|
|
@ -35,18 +35,18 @@ module Text.Pandoc.BCP47 (
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
import Control.Monad (guard)
|
import Control.Monad (guard)
|
||||||
import Data.Char (isAscii, isLetter, isUpper, isLower, toUpper, toLower,
|
import Data.Char (isAlphaNum, isAscii, isLetter, isLower, isUpper, toLower,
|
||||||
isAlphaNum)
|
toUpper)
|
||||||
import Data.List (intercalate)
|
import Data.List (intercalate)
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import qualified Text.Parsec as P
|
import qualified Text.Parsec as P
|
||||||
|
|
||||||
-- | Represents BCP 47 language/country code.
|
-- | Represents BCP 47 language/country code.
|
||||||
data Lang = Lang{ langLanguage :: String
|
data Lang = Lang{ langLanguage :: String
|
||||||
, langScript :: String
|
, langScript :: String
|
||||||
, langRegion :: String
|
, langRegion :: String
|
||||||
, langVariants :: [String] }
|
, langVariants :: [String] }
|
||||||
deriving (Eq, Ord, Show)
|
deriving (Eq, Ord, Show)
|
||||||
|
|
||||||
-- | Render a Lang as BCP 47.
|
-- | Render a Lang as BCP 47.
|
||||||
|
|
|
@ -34,11 +34,11 @@ module Text.Pandoc.CSV (
|
||||||
ParseError
|
ParseError
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Text.Parsec
|
import Control.Monad (void)
|
||||||
import Text.Parsec.Text (Parser)
|
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Control.Monad (void)
|
import Text.Parsec
|
||||||
|
import Text.Parsec.Text (Parser)
|
||||||
|
|
||||||
data CSVOptions = CSVOptions{
|
data CSVOptions = CSVOptions{
|
||||||
csvDelim :: Char
|
csvDelim :: Char
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
module Text.Pandoc.Data (dataFiles) where
|
module Text.Pandoc.Data (dataFiles) where
|
||||||
|
|
||||||
import Data.FileEmbed
|
|
||||||
import qualified Data.ByteString as B
|
import qualified Data.ByteString as B
|
||||||
|
import Data.FileEmbed
|
||||||
import System.FilePath (splitDirectories)
|
import System.FilePath (splitDirectories)
|
||||||
import qualified System.FilePath.Posix as Posix
|
import qualified System.FilePath.Posix as Posix
|
||||||
|
|
||||||
|
|
|
@ -37,12 +37,12 @@ module Text.Pandoc.Error (
|
||||||
import Control.Exception (Exception)
|
import Control.Exception (Exception)
|
||||||
import Data.Generics (Typeable)
|
import Data.Generics (Typeable)
|
||||||
import GHC.Generics (Generic)
|
import GHC.Generics (Generic)
|
||||||
|
import Network.HTTP.Client (HttpException)
|
||||||
|
import System.Exit (ExitCode (..), exitWith)
|
||||||
|
import System.IO (stderr)
|
||||||
|
import qualified Text.Pandoc.UTF8 as UTF8
|
||||||
import Text.Parsec.Error
|
import Text.Parsec.Error
|
||||||
import Text.Parsec.Pos hiding (Line)
|
import Text.Parsec.Pos hiding (Line)
|
||||||
import qualified Text.Pandoc.UTF8 as UTF8
|
|
||||||
import System.Exit (exitWith, ExitCode(..))
|
|
||||||
import System.IO (stderr)
|
|
||||||
import Network.HTTP.Client (HttpException)
|
|
||||||
|
|
||||||
type Input = String
|
type Input = String
|
||||||
|
|
||||||
|
|
|
@ -45,14 +45,14 @@ module Text.Pandoc.Extensions ( Extension(..)
|
||||||
, githubMarkdownExtensions
|
, githubMarkdownExtensions
|
||||||
, multimarkdownExtensions )
|
, multimarkdownExtensions )
|
||||||
where
|
where
|
||||||
|
import Data.Aeson (FromJSON (..), ToJSON (..), defaultOptions,
|
||||||
|
genericToEncoding)
|
||||||
import Data.Bits (clearBit, setBit, testBit, (.|.))
|
import Data.Bits (clearBit, setBit, testBit, (.|.))
|
||||||
import Data.Data (Data)
|
import Data.Data (Data)
|
||||||
import Data.Typeable (Typeable)
|
import Data.Typeable (Typeable)
|
||||||
import GHC.Generics (Generic)
|
import GHC.Generics (Generic)
|
||||||
import Text.Pandoc.Shared (safeRead)
|
import Text.Pandoc.Shared (safeRead)
|
||||||
import Text.Parsec
|
import Text.Parsec
|
||||||
import Data.Aeson (ToJSON(..), FromJSON(..),
|
|
||||||
genericToEncoding, defaultOptions)
|
|
||||||
|
|
||||||
newtype Extensions = Extensions Integer
|
newtype Extensions = Extensions Integer
|
||||||
deriving (Show, Read, Eq, Ord, Data, Typeable, Generic)
|
deriving (Show, Read, Eq, Ord, Data, Typeable, Generic)
|
||||||
|
|
|
@ -36,19 +36,19 @@ module Text.Pandoc.Lua (LuaException (..), pushPandocModule, runLuaFilter) where
|
||||||
import Control.Monad (mplus, unless, when, (>=>))
|
import Control.Monad (mplus, unless, when, (>=>))
|
||||||
import Control.Monad.Identity (Identity)
|
import Control.Monad.Identity (Identity)
|
||||||
import Control.Monad.Trans (MonadIO (..))
|
import Control.Monad.Trans (MonadIO (..))
|
||||||
import Data.Data (DataType, Data, toConstr, showConstr, dataTypeOf,
|
import Data.Data (Data, DataType, dataTypeConstrs, dataTypeName, dataTypeOf,
|
||||||
dataTypeConstrs, dataTypeName, tyconUQname)
|
showConstr, toConstr, tyconUQname)
|
||||||
import Data.Foldable (foldrM)
|
import Data.Foldable (foldrM)
|
||||||
import Data.IORef (IORef, newIORef, readIORef)
|
import Data.IORef (IORef, newIORef, readIORef)
|
||||||
import Data.Map (Map)
|
import Data.Map (Map)
|
||||||
import Data.Maybe (isJust)
|
import Data.Maybe (isJust)
|
||||||
import Foreign.Lua (Lua, FromLuaStack (peek), LuaException (..), StackIndex,
|
import Foreign.Lua (FromLuaStack (peek), Lua, LuaException (..), StackIndex,
|
||||||
Status (OK), ToLuaStack (push))
|
Status (OK), ToLuaStack (push))
|
||||||
import Text.Pandoc.Class (PandocIO, getMediaBag, setMediaBag,
|
import Text.Pandoc.Class (CommonState, PandocIO, getCommonState, getMediaBag,
|
||||||
getCommonState, CommonState)
|
setMediaBag)
|
||||||
import Text.Pandoc.MediaBag (MediaBag)
|
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Lua.PandocModule (pushPandocModule, pushMediaBagModule)
|
import Text.Pandoc.Lua.PandocModule (pushMediaBagModule, pushPandocModule)
|
||||||
|
import Text.Pandoc.MediaBag (MediaBag)
|
||||||
import Text.Pandoc.Walk (walkM)
|
import Text.Pandoc.Walk (walkM)
|
||||||
|
|
||||||
import qualified Data.Map as Map
|
import qualified Data.Map as Map
|
||||||
|
@ -182,7 +182,7 @@ instance FromLuaStack LuaFilter where
|
||||||
filterFn <- Lua.tryLua (peek (-1))
|
filterFn <- Lua.tryLua (peek (-1))
|
||||||
Lua.pop 1
|
Lua.pop 1
|
||||||
return $ case filterFn of
|
return $ case filterFn of
|
||||||
Left _ -> acc
|
Left _ -> acc
|
||||||
Right f -> (c, f) : acc
|
Right f -> (c, f) : acc
|
||||||
in LuaFilter . Map.fromList <$> foldrM fn [] constrs
|
in LuaFilter . Map.fromList <$> foldrM fn [] constrs
|
||||||
|
|
||||||
|
@ -209,7 +209,7 @@ elementOrList x = do
|
||||||
mbres <- Lua.peekEither topOfStack
|
mbres <- Lua.peekEither topOfStack
|
||||||
case mbres of
|
case mbres of
|
||||||
Right res -> [res] <$ Lua.pop 1
|
Right res -> [res] <$ Lua.pop 1
|
||||||
Left _ -> Lua.toList topOfStack <* Lua.pop 1
|
Left _ -> Lua.toList topOfStack <* Lua.pop 1
|
||||||
|
|
||||||
singleElement :: FromLuaStack a => a -> Lua a
|
singleElement :: FromLuaStack a => a -> Lua a
|
||||||
singleElement x = do
|
singleElement x = do
|
||||||
|
|
|
@ -34,24 +34,24 @@ module Text.Pandoc.Lua.PandocModule
|
||||||
import Control.Monad (unless, zipWithM_)
|
import Control.Monad (unless, zipWithM_)
|
||||||
import Data.ByteString.Char8 (unpack)
|
import Data.ByteString.Char8 (unpack)
|
||||||
import Data.Default (Default (..))
|
import Data.Default (Default (..))
|
||||||
|
import Data.Digest.Pure.SHA (sha1, showDigest)
|
||||||
import Data.IORef
|
import Data.IORef
|
||||||
import Data.Maybe (fromMaybe)
|
import Data.Maybe (fromMaybe)
|
||||||
import Data.Text (pack)
|
import Data.Text (pack)
|
||||||
import Foreign.Lua (Lua, FromLuaStack, NumResults, liftIO)
|
import Foreign.Lua (FromLuaStack, Lua, NumResults, liftIO)
|
||||||
import Foreign.Lua.FunctionCalling (ToHaskellFunction)
|
import Foreign.Lua.FunctionCalling (ToHaskellFunction)
|
||||||
import Text.Pandoc.Class (readDataFile, runIO,
|
import System.Exit (ExitCode (..))
|
||||||
runIOorExplode, setUserDataDir, CommonState(..),
|
import Text.Pandoc.Class (CommonState (..), fetchItem, putCommonState,
|
||||||
putCommonState, fetchItem, setMediaBag)
|
readDataFile, runIO, runIOorExplode, setMediaBag,
|
||||||
import Text.Pandoc.Options (ReaderOptions(readerExtensions))
|
setUserDataDir)
|
||||||
import Text.Pandoc.Lua.StackInstances ()
|
import Text.Pandoc.Lua.StackInstances ()
|
||||||
import Text.Pandoc.Readers (Reader (..), getReader)
|
|
||||||
import Text.Pandoc.MIME (MimeType)
|
import Text.Pandoc.MIME (MimeType)
|
||||||
|
import Text.Pandoc.Options (ReaderOptions (readerExtensions))
|
||||||
import Text.Pandoc.Process (pipeProcess)
|
import Text.Pandoc.Process (pipeProcess)
|
||||||
import System.Exit (ExitCode(..))
|
import Text.Pandoc.Readers (Reader (..), getReader)
|
||||||
import Data.Digest.Pure.SHA (sha1, showDigest)
|
|
||||||
|
|
||||||
import qualified Foreign.Lua as Lua
|
|
||||||
import qualified Data.ByteString.Lazy as BL
|
import qualified Data.ByteString.Lazy as BL
|
||||||
|
import qualified Foreign.Lua as Lua
|
||||||
import qualified Text.Pandoc.MediaBag as MB
|
import qualified Text.Pandoc.MediaBag as MB
|
||||||
|
|
||||||
-- | Push the "pandoc" on the lua stack.
|
-- | Push the "pandoc" on the lua stack.
|
||||||
|
|
|
@ -33,10 +33,11 @@ StackValue instances for pandoc types.
|
||||||
module Text.Pandoc.Lua.StackInstances () where
|
module Text.Pandoc.Lua.StackInstances () where
|
||||||
|
|
||||||
import Control.Applicative ((<|>))
|
import Control.Applicative ((<|>))
|
||||||
import Foreign.Lua (Lua, LuaInteger, LuaNumber, Type (..), FromLuaStack (peek),
|
import Foreign.Lua (FromLuaStack (peek), Lua, LuaInteger, LuaNumber, StackIndex,
|
||||||
ToLuaStack (push), StackIndex, throwLuaError, tryLua)
|
ToLuaStack (push), Type (..), throwLuaError, tryLua)
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Lua.Util (addValue, adjustIndexBy, getTable, pushViaConstructor)
|
import Text.Pandoc.Lua.Util (addValue, adjustIndexBy, getTable,
|
||||||
|
pushViaConstructor)
|
||||||
import Text.Pandoc.Shared (safeRead)
|
import Text.Pandoc.Shared (safeRead)
|
||||||
|
|
||||||
import qualified Foreign.Lua as Lua
|
import qualified Foreign.Lua as Lua
|
||||||
|
@ -139,7 +140,7 @@ instance FromLuaStack Int where
|
||||||
safeRead' :: Read a => String -> Lua a
|
safeRead' :: Read a => String -> Lua a
|
||||||
safeRead' s = case safeRead s of
|
safeRead' s = case safeRead s of
|
||||||
Nothing -> throwLuaError ("Could not read: " ++ s)
|
Nothing -> throwLuaError ("Could not read: " ++ s)
|
||||||
Just x -> return x
|
Just x -> return x
|
||||||
|
|
||||||
-- | Push an meta value element to the top of the lua stack.
|
-- | Push an meta value element to the top of the lua stack.
|
||||||
pushMetaValue :: MetaValue -> Lua ()
|
pushMetaValue :: MetaValue -> Lua ()
|
||||||
|
@ -293,7 +294,7 @@ getTag idx = do
|
||||||
Lua.settop top
|
Lua.settop top
|
||||||
case r of
|
case r of
|
||||||
Left (Lua.LuaException err) -> throwLuaError err
|
Left (Lua.LuaException err) -> throwLuaError err
|
||||||
Right res -> return res
|
Right res -> return res
|
||||||
|
|
||||||
withAttr :: (Attr -> a -> b) -> (LuaAttr, a) -> b
|
withAttr :: (Attr -> a -> b) -> (LuaAttr, a) -> b
|
||||||
withAttr f (attributes, x) = f (fromLuaAttr attributes) x
|
withAttr f (attributes, x) = f (fromLuaAttr attributes) x
|
||||||
|
|
|
@ -40,8 +40,8 @@ module Text.Pandoc.Lua.Util
|
||||||
, pushViaConstructor
|
, pushViaConstructor
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Foreign.Lua (Lua, FromLuaStack (..), ToLuaStack (..), NumArgs,
|
import Foreign.Lua (FromLuaStack (..), Lua, NumArgs, StackIndex,
|
||||||
StackIndex, getglobal')
|
ToLuaStack (..), getglobal')
|
||||||
import Foreign.Lua.Api (call, pop, rawget, rawgeti, rawset, rawseti)
|
import Foreign.Lua.Api (call, pop, rawget, rawgeti, rawset, rawseti)
|
||||||
|
|
||||||
-- | Adjust the stack index, assuming that @n@ new elements have been pushed on
|
-- | Adjust the stack index, assuming that @n@ new elements have been pushed on
|
||||||
|
|
|
@ -45,8 +45,8 @@ module Text.Pandoc.Options ( module Text.Pandoc.Extensions
|
||||||
, def
|
, def
|
||||||
, isEnabled
|
, isEnabled
|
||||||
) where
|
) where
|
||||||
import Data.Aeson (ToJSON(..), FromJSON(..),
|
import Data.Aeson (FromJSON (..), ToJSON (..), defaultOptions,
|
||||||
genericToEncoding, defaultOptions)
|
genericToEncoding)
|
||||||
import Data.Data (Data)
|
import Data.Data (Data)
|
||||||
import Data.Default
|
import Data.Default
|
||||||
import qualified Data.Set as Set
|
import qualified Data.Set as Set
|
||||||
|
|
|
@ -36,15 +36,15 @@ import qualified Codec.Picture as JP
|
||||||
import qualified Control.Exception as E
|
import qualified Control.Exception as E
|
||||||
import Control.Monad (unless, when)
|
import Control.Monad (unless, when)
|
||||||
import Control.Monad.Trans (MonadIO (..))
|
import Control.Monad.Trans (MonadIO (..))
|
||||||
import qualified Data.Text as T
|
|
||||||
import qualified Data.Text.IO as TextIO
|
|
||||||
import Data.Text (Text)
|
|
||||||
import qualified Data.ByteString as BS
|
import qualified Data.ByteString as BS
|
||||||
import Data.ByteString.Lazy (ByteString)
|
import Data.ByteString.Lazy (ByteString)
|
||||||
import qualified Data.ByteString.Lazy as BL
|
import qualified Data.ByteString.Lazy as BL
|
||||||
import qualified Data.ByteString.Lazy.Char8 as BC
|
import qualified Data.ByteString.Lazy.Char8 as BC
|
||||||
import Data.Maybe (fromMaybe)
|
import Data.Maybe (fromMaybe)
|
||||||
import Data.Monoid ((<>))
|
import Data.Monoid ((<>))
|
||||||
|
import Data.Text (Text)
|
||||||
|
import qualified Data.Text as T
|
||||||
|
import qualified Data.Text.IO as TextIO
|
||||||
import System.Directory
|
import System.Directory
|
||||||
import System.Environment
|
import System.Environment
|
||||||
import System.Exit (ExitCode (..))
|
import System.Exit (ExitCode (..))
|
||||||
|
@ -57,7 +57,7 @@ import System.IO.Error (IOError, isDoesNotExistError)
|
||||||
import System.IO.Error (isDoesNotExistError)
|
import System.IO.Error (isDoesNotExistError)
|
||||||
#endif
|
#endif
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Error (PandocError(PandocPDFProgramNotFoundError))
|
import Text.Pandoc.Error (PandocError (PandocPDFProgramNotFoundError))
|
||||||
import Text.Pandoc.MIME (getMimeType)
|
import Text.Pandoc.MIME (getMimeType)
|
||||||
import Text.Pandoc.Options (HTMLMathMethod (..), WriterOptions (..))
|
import Text.Pandoc.Options (HTMLMathMethod (..), WriterOptions (..))
|
||||||
import Text.Pandoc.Process (pipeProcess)
|
import Text.Pandoc.Process (pipeProcess)
|
||||||
|
@ -68,10 +68,9 @@ import Text.Pandoc.Writers.Shared (getField, metaToJSON)
|
||||||
#ifdef _WINDOWS
|
#ifdef _WINDOWS
|
||||||
import Data.List (intercalate)
|
import Data.List (intercalate)
|
||||||
#endif
|
#endif
|
||||||
import Text.Pandoc.Class (PandocIO, report, runIO, runIOorExplode,
|
import Text.Pandoc.Class (PandocIO, extractMedia, fillMediaBag, getCommonState,
|
||||||
setVerbosity, getVerbosity,
|
getVerbosity, putCommonState, report, runIO,
|
||||||
fillMediaBag, extractMedia, putCommonState,
|
runIOorExplode, setVerbosity)
|
||||||
getCommonState)
|
|
||||||
import Text.Pandoc.Logging
|
import Text.Pandoc.Logging
|
||||||
|
|
||||||
#ifdef _WINDOWS
|
#ifdef _WINDOWS
|
||||||
|
|
|
@ -70,7 +70,9 @@ module Text.Pandoc.Readers
|
||||||
|
|
||||||
import Control.Monad.Except (throwError)
|
import Control.Monad.Except (throwError)
|
||||||
import Data.Aeson
|
import Data.Aeson
|
||||||
|
import qualified Data.ByteString.Lazy as BL
|
||||||
import Data.List (intercalate)
|
import Data.List (intercalate)
|
||||||
|
import Data.Text (Text)
|
||||||
import Text.Pandoc.Class
|
import Text.Pandoc.Class
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Error
|
import Text.Pandoc.Error
|
||||||
|
@ -86,7 +88,6 @@ import Text.Pandoc.Readers.HTML
|
||||||
import Text.Pandoc.Readers.LaTeX
|
import Text.Pandoc.Readers.LaTeX
|
||||||
import Text.Pandoc.Readers.Markdown
|
import Text.Pandoc.Readers.Markdown
|
||||||
import Text.Pandoc.Readers.MediaWiki
|
import Text.Pandoc.Readers.MediaWiki
|
||||||
import Text.Pandoc.Readers.Vimwiki
|
|
||||||
import Text.Pandoc.Readers.Muse
|
import Text.Pandoc.Readers.Muse
|
||||||
import Text.Pandoc.Readers.Native
|
import Text.Pandoc.Readers.Native
|
||||||
import Text.Pandoc.Readers.Odt
|
import Text.Pandoc.Readers.Odt
|
||||||
|
@ -94,14 +95,13 @@ import Text.Pandoc.Readers.OPML
|
||||||
import Text.Pandoc.Readers.Org
|
import Text.Pandoc.Readers.Org
|
||||||
import Text.Pandoc.Readers.RST
|
import Text.Pandoc.Readers.RST
|
||||||
import Text.Pandoc.Readers.Textile
|
import Text.Pandoc.Readers.Textile
|
||||||
import Text.Pandoc.Readers.TWiki
|
|
||||||
import Text.Pandoc.Readers.TikiWiki
|
import Text.Pandoc.Readers.TikiWiki
|
||||||
|
import Text.Pandoc.Readers.TWiki
|
||||||
import Text.Pandoc.Readers.Txt2Tags
|
import Text.Pandoc.Readers.Txt2Tags
|
||||||
|
import Text.Pandoc.Readers.Vimwiki
|
||||||
import Text.Pandoc.Shared (mapLeft)
|
import Text.Pandoc.Shared (mapLeft)
|
||||||
import Text.Parsec.Error
|
|
||||||
import qualified Text.Pandoc.UTF8 as UTF8
|
import qualified Text.Pandoc.UTF8 as UTF8
|
||||||
import qualified Data.ByteString.Lazy as BL
|
import Text.Parsec.Error
|
||||||
import Data.Text (Text)
|
|
||||||
|
|
||||||
data Reader m = TextReader (ReaderOptions -> Text -> m Pandoc)
|
data Reader m = TextReader (ReaderOptions -> Text -> m Pandoc)
|
||||||
| ByteStringReader (ReaderOptions -> BL.ByteString -> m Pandoc)
|
| ByteStringReader (ReaderOptions -> BL.ByteString -> m Pandoc)
|
||||||
|
|
|
@ -34,10 +34,10 @@ where
|
||||||
|
|
||||||
import CMarkGFM
|
import CMarkGFM
|
||||||
import Control.Monad.State
|
import Control.Monad.State
|
||||||
import Data.Char (isLetter, isAlphaNum, isSpace, toLower)
|
import Data.Char (isAlphaNum, isLetter, isSpace, toLower)
|
||||||
import Data.List (groupBy)
|
import Data.List (groupBy)
|
||||||
import Data.Text (Text, unpack)
|
|
||||||
import qualified Data.Map as Map
|
import qualified Data.Map as Map
|
||||||
|
import Data.Text (Text, unpack)
|
||||||
import Text.Pandoc.Class (PandocMonad)
|
import Text.Pandoc.Class (PandocMonad)
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Emoji (emojis)
|
import Text.Pandoc.Emoji (emojis)
|
||||||
|
@ -153,9 +153,9 @@ addBlock opts (Node _ (TABLE alignments) nodes) = do
|
||||||
(h:rs) -> (h, rs)
|
(h:rs) -> (h, rs)
|
||||||
[] -> ([], [])
|
[] -> ([], [])
|
||||||
isRow (Node _ TABLE_ROW _) = True
|
isRow (Node _ TABLE_ROW _) = True
|
||||||
isRow _ = False
|
isRow _ = False
|
||||||
isCell (Node _ TABLE_CELL _) = True
|
isCell (Node _ TABLE_CELL _) = True
|
||||||
isCell _ = False
|
isCell _ = False
|
||||||
toRow (Node _ TABLE_ROW ns) = map toCell $ filter isCell ns
|
toRow (Node _ TABLE_ROW ns) = map toCell $ filter isCell ns
|
||||||
toRow (Node _ t _) = error $ "toRow encountered non-row " ++ show t
|
toRow (Node _ t _) = error $ "toRow encountered non-row " ++ show t
|
||||||
toCell (Node _ TABLE_CELL []) = []
|
toCell (Node _ TABLE_CELL []) = []
|
||||||
|
@ -170,30 +170,30 @@ addBlock _ _ = id
|
||||||
isBlockNode :: Node -> Bool
|
isBlockNode :: Node -> Bool
|
||||||
isBlockNode (Node _ nodetype _) =
|
isBlockNode (Node _ nodetype _) =
|
||||||
case nodetype of
|
case nodetype of
|
||||||
DOCUMENT -> True
|
DOCUMENT -> True
|
||||||
THEMATIC_BREAK -> True
|
THEMATIC_BREAK -> True
|
||||||
PARAGRAPH -> True
|
PARAGRAPH -> True
|
||||||
BLOCK_QUOTE -> True
|
BLOCK_QUOTE -> True
|
||||||
HTML_BLOCK _ -> True
|
HTML_BLOCK _ -> True
|
||||||
CUSTOM_BLOCK _ _ -> True
|
CUSTOM_BLOCK _ _ -> True
|
||||||
CODE_BLOCK _ _ -> True
|
CODE_BLOCK _ _ -> True
|
||||||
HEADING _ -> True
|
HEADING _ -> True
|
||||||
LIST _ -> True
|
LIST _ -> True
|
||||||
ITEM -> True
|
ITEM -> True
|
||||||
TEXT _ -> False
|
TEXT _ -> False
|
||||||
SOFTBREAK -> False
|
SOFTBREAK -> False
|
||||||
LINEBREAK -> False
|
LINEBREAK -> False
|
||||||
HTML_INLINE _ -> False
|
HTML_INLINE _ -> False
|
||||||
CUSTOM_INLINE _ _ -> False
|
CUSTOM_INLINE _ _ -> False
|
||||||
CODE _ -> False
|
CODE _ -> False
|
||||||
EMPH -> False
|
EMPH -> False
|
||||||
STRONG -> False
|
STRONG -> False
|
||||||
LINK _ _ -> False
|
LINK _ _ -> False
|
||||||
IMAGE _ _ -> False
|
IMAGE _ _ -> False
|
||||||
STRIKETHROUGH -> False
|
STRIKETHROUGH -> False
|
||||||
TABLE _ -> False
|
TABLE _ -> False
|
||||||
TABLE_ROW -> False
|
TABLE_ROW -> False
|
||||||
TABLE_CELL -> False
|
TABLE_CELL -> False
|
||||||
|
|
||||||
children :: Node -> [Node]
|
children :: Node -> [Node]
|
||||||
children (Node _ _ ns) = ns
|
children (Node _ _ ns) = ns
|
||||||
|
|
|
@ -35,18 +35,18 @@ Conversion of creole text to 'Pandoc' document.
|
||||||
module Text.Pandoc.Readers.Creole ( readCreole
|
module Text.Pandoc.Readers.Creole ( readCreole
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Control.Monad.Except (liftM2, throwError, guard)
|
import Control.Monad.Except (guard, liftM2, throwError)
|
||||||
import qualified Data.Foldable as F
|
import qualified Data.Foldable as F
|
||||||
import qualified Text.Pandoc.Builder as B
|
|
||||||
import Text.Pandoc.Class (PandocMonad(..))
|
|
||||||
import Text.Pandoc.Definition
|
|
||||||
import Text.Pandoc.Options
|
|
||||||
import Text.Pandoc.Parsing hiding (enclosed)
|
|
||||||
import Text.Pandoc.Shared (crFilter)
|
|
||||||
import Data.Maybe (fromMaybe)
|
import Data.Maybe (fromMaybe)
|
||||||
import Data.Monoid
|
import Data.Monoid
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
|
import qualified Text.Pandoc.Builder as B
|
||||||
|
import Text.Pandoc.Class (PandocMonad (..))
|
||||||
|
import Text.Pandoc.Definition
|
||||||
|
import Text.Pandoc.Options
|
||||||
|
import Text.Pandoc.Parsing hiding (enclosed)
|
||||||
|
import Text.Pandoc.Shared (crFilter)
|
||||||
|
|
||||||
|
|
||||||
-- | Read creole from an input string and return a Pandoc document.
|
-- | Read creole from an input string and return a Pandoc document.
|
||||||
|
|
|
@ -472,10 +472,10 @@ rowToBlocksList (Row cells) = do
|
||||||
-- like trimInlines, but also take out linebreaks
|
-- like trimInlines, but also take out linebreaks
|
||||||
trimSps :: Inlines -> Inlines
|
trimSps :: Inlines -> Inlines
|
||||||
trimSps (Many ils) = Many $ Seq.dropWhileL isSp $ Seq.dropWhileR isSp $ ils
|
trimSps (Many ils) = Many $ Seq.dropWhileL isSp $ Seq.dropWhileR isSp $ ils
|
||||||
where isSp Space = True
|
where isSp Space = True
|
||||||
isSp SoftBreak = True
|
isSp SoftBreak = True
|
||||||
isSp LineBreak = True
|
isSp LineBreak = True
|
||||||
isSp _ = False
|
isSp _ = False
|
||||||
|
|
||||||
parStyleToTransform :: ParagraphStyle -> (Blocks -> Blocks)
|
parStyleToTransform :: ParagraphStyle -> (Blocks -> Blocks)
|
||||||
parStyleToTransform pPr
|
parStyleToTransform pPr
|
||||||
|
|
|
@ -13,12 +13,12 @@ import Control.DeepSeq (NFData, deepseq)
|
||||||
import Control.Monad (guard, liftM)
|
import Control.Monad (guard, liftM)
|
||||||
import Control.Monad.Except (throwError)
|
import Control.Monad.Except (throwError)
|
||||||
import qualified Data.ByteString.Lazy as BL (ByteString)
|
import qualified Data.ByteString.Lazy as BL (ByteString)
|
||||||
import qualified Data.Text.Lazy.Encoding as TL
|
|
||||||
import qualified Data.Text.Lazy as TL
|
|
||||||
import Data.List (isInfixOf, isPrefixOf)
|
import Data.List (isInfixOf, isPrefixOf)
|
||||||
import qualified Data.Map as M (Map, elems, fromList, lookup)
|
import qualified Data.Map as M (Map, elems, fromList, lookup)
|
||||||
import Data.Maybe (fromMaybe, mapMaybe)
|
import Data.Maybe (fromMaybe, mapMaybe)
|
||||||
import Data.Monoid ((<>))
|
import Data.Monoid ((<>))
|
||||||
|
import qualified Data.Text.Lazy as TL
|
||||||
|
import qualified Data.Text.Lazy.Encoding as TL
|
||||||
import Network.URI (unEscapeString)
|
import Network.URI (unEscapeString)
|
||||||
import System.FilePath (dropFileName, dropFileName, normalise, splitFileName,
|
import System.FilePath (dropFileName, dropFileName, normalise, splitFileName,
|
||||||
takeFileName, (</>))
|
takeFileName, (</>))
|
||||||
|
|
|
@ -16,9 +16,9 @@ module Text.Pandoc.Readers.Haddock
|
||||||
|
|
||||||
import Control.Monad.Except (throwError)
|
import Control.Monad.Except (throwError)
|
||||||
import Data.List (intersperse, stripPrefix)
|
import Data.List (intersperse, stripPrefix)
|
||||||
import Data.Text (Text, unpack)
|
|
||||||
import Data.Maybe (fromMaybe)
|
import Data.Maybe (fromMaybe)
|
||||||
import Data.Monoid ((<>))
|
import Data.Monoid ((<>))
|
||||||
|
import Data.Text (Text, unpack)
|
||||||
import Documentation.Haddock.Parser
|
import Documentation.Haddock.Parser
|
||||||
import Documentation.Haddock.Types
|
import Documentation.Haddock.Types
|
||||||
import Text.Pandoc.Builder (Blocks, Inlines)
|
import Text.Pandoc.Builder (Blocks, Inlines)
|
||||||
|
@ -27,7 +27,7 @@ import Text.Pandoc.Class (PandocMonad)
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Error
|
import Text.Pandoc.Error
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Shared (splitBy, trim, crFilter)
|
import Text.Pandoc.Shared (crFilter, splitBy, trim)
|
||||||
|
|
||||||
|
|
||||||
-- | Parse Haddock markup and return a 'Pandoc' document.
|
-- | Parse Haddock markup and return a 'Pandoc' document.
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
{-# LANGUAGE FlexibleInstances #-}
|
||||||
{-# LANGUAGE PatternGuards #-}
|
|
||||||
{-# LANGUAGE FlexibleInstances #-}
|
|
||||||
{-# LANGUAGE MultiParamTypeClasses #-}
|
{-# LANGUAGE MultiParamTypeClasses #-}
|
||||||
{-# LANGUAGE ScopedTypeVariables #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
{-# LANGUAGE PatternGuards #-}
|
||||||
|
{-# LANGUAGE ScopedTypeVariables #-}
|
||||||
{-
|
{-
|
||||||
Copyright (C) 2006-2017 John MacFarlane <jgm@berkeley.edu>
|
Copyright (C) 2006-2017 John MacFarlane <jgm@berkeley.edu>
|
||||||
|
|
||||||
|
@ -44,35 +44,33 @@ import Control.Applicative (many, optional, (<|>))
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import Control.Monad.Except (throwError)
|
import Control.Monad.Except (throwError)
|
||||||
import Control.Monad.Trans (lift)
|
import Control.Monad.Trans (lift)
|
||||||
import Data.Char (chr, isAlphaNum, isLetter, ord, isDigit, toLower)
|
import Data.Char (chr, isAlphaNum, isDigit, isLetter, ord, toLower)
|
||||||
import Data.Default
|
import Data.Default
|
||||||
import Data.Text (Text)
|
|
||||||
import qualified Data.Text as T
|
|
||||||
import Data.List (intercalate, isPrefixOf)
|
import Data.List (intercalate, isPrefixOf)
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
import qualified Data.Set as Set
|
|
||||||
import Data.Maybe (fromMaybe, maybeToList)
|
import Data.Maybe (fromMaybe, maybeToList)
|
||||||
|
import qualified Data.Set as Set
|
||||||
|
import Data.Text (Text)
|
||||||
|
import qualified Data.Text as T
|
||||||
import Safe (minimumDef)
|
import Safe (minimumDef)
|
||||||
import System.FilePath (addExtension, replaceExtension, takeExtension)
|
import System.FilePath (addExtension, replaceExtension, takeExtension)
|
||||||
|
import Text.Pandoc.BCP47 (Lang (..), renderLang)
|
||||||
import Text.Pandoc.Builder
|
import Text.Pandoc.Builder
|
||||||
import Text.Pandoc.Class (PandocMonad, PandocPure, lookupEnv,
|
import Text.Pandoc.Class (PandocMonad, PandocPure, getResourcePath, lookupEnv,
|
||||||
readFileFromDirs, report, setResourcePath,
|
readFileFromDirs, report, setResourcePath,
|
||||||
getResourcePath, setTranslations, translateTerm)
|
setTranslations, translateTerm)
|
||||||
import qualified Text.Pandoc.Translations as Translations
|
import Text.Pandoc.Error (PandocError (PandocMacroLoop, PandocParseError, PandocParsecError))
|
||||||
import Text.Pandoc.BCP47 (Lang(..), renderLang)
|
|
||||||
import Text.Pandoc.Highlighting (fromListingsLanguage, languagesByExtension)
|
import Text.Pandoc.Highlighting (fromListingsLanguage, languagesByExtension)
|
||||||
import Text.Pandoc.ImageSize (numUnit, showFl)
|
import Text.Pandoc.ImageSize (numUnit, showFl)
|
||||||
import Text.Pandoc.Logging
|
import Text.Pandoc.Logging
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Parsing hiding (many, optional, withRaw,
|
import Text.Pandoc.Parsing hiding (blankline, many, mathDisplay, mathInline,
|
||||||
mathInline, mathDisplay,
|
optional, space, spaces, withRaw, (<|>))
|
||||||
space, (<|>), spaces, blankline)
|
import Text.Pandoc.Readers.LaTeX.Types (ExpansionPoint (..), Macro (..),
|
||||||
|
Tok (..), TokType (..))
|
||||||
import Text.Pandoc.Shared
|
import Text.Pandoc.Shared
|
||||||
import Text.Pandoc.Readers.LaTeX.Types (Macro(..), ExpansionPoint(..), Tok(..),
|
import qualified Text.Pandoc.Translations as Translations
|
||||||
TokType(..))
|
|
||||||
import Text.Pandoc.Walk
|
import Text.Pandoc.Walk
|
||||||
import Text.Pandoc.Error
|
|
||||||
(PandocError(PandocParsecError, PandocParseError, PandocMacroLoop))
|
|
||||||
import Text.Parsec.Pos
|
import Text.Parsec.Pos
|
||||||
|
|
||||||
-- for debugging:
|
-- for debugging:
|
||||||
|
@ -100,10 +98,10 @@ parseLaTeX = do
|
||||||
let meta = sMeta st
|
let meta = sMeta st
|
||||||
let doc' = doc bs
|
let doc' = doc bs
|
||||||
let headerLevel (Header n _ _) = [n]
|
let headerLevel (Header n _ _) = [n]
|
||||||
headerLevel _ = []
|
headerLevel _ = []
|
||||||
let bottomLevel = minimumDef 1 $ query headerLevel doc'
|
let bottomLevel = minimumDef 1 $ query headerLevel doc'
|
||||||
let adjustHeaders m (Header n attr ils) = Header (n+m) attr ils
|
let adjustHeaders m (Header n attr ils) = Header (n+m) attr ils
|
||||||
adjustHeaders _ x = x
|
adjustHeaders _ x = x
|
||||||
let (Pandoc _ bs') =
|
let (Pandoc _ bs') =
|
||||||
-- handle the case where you have \part or \chapter
|
-- handle the case where you have \part or \chapter
|
||||||
(if bottomLevel < 1
|
(if bottomLevel < 1
|
||||||
|
@ -261,7 +259,7 @@ applyMacros s = (guardDisabled Ext_latex_macros >> return s) <|>
|
||||||
, sMacros = extractMacros pstate }
|
, sMacros = extractMacros pstate }
|
||||||
res <- runParserT retokenize lstate "math" (tokenize "math" (T.pack s))
|
res <- runParserT retokenize lstate "math" (tokenize "math" (T.pack s))
|
||||||
case res of
|
case res of
|
||||||
Left e -> fail (show e)
|
Left e -> fail (show e)
|
||||||
Right s' -> return s'
|
Right s' -> return s'
|
||||||
|
|
||||||
rawLaTeXBlock :: (PandocMonad m, HasMacros s, HasReaderOptions s)
|
rawLaTeXBlock :: (PandocMonad m, HasMacros s, HasReaderOptions s)
|
||||||
|
@ -378,8 +376,8 @@ isSpaceOrTab '\t' = True
|
||||||
isSpaceOrTab _ = False
|
isSpaceOrTab _ = False
|
||||||
|
|
||||||
isLetterOrAt :: Char -> Bool
|
isLetterOrAt :: Char -> Bool
|
||||||
isLetterOrAt '@' = True
|
isLetterOrAt '@' = True
|
||||||
isLetterOrAt c = isLetter c
|
isLetterOrAt c = isLetter c
|
||||||
|
|
||||||
isLowerHex :: Char -> Bool
|
isLowerHex :: Char -> Bool
|
||||||
isLowerHex x = x >= '0' && x <= '9' || x >= 'a' && x <= 'f'
|
isLowerHex x = x >= '0' && x <= '9' || x >= 'a' && x <= 'f'
|
||||||
|
@ -400,7 +398,7 @@ satisfyTok f =
|
||||||
| otherwise = Nothing
|
| otherwise = Nothing
|
||||||
updatePos :: SourcePos -> Tok -> [Tok] -> SourcePos
|
updatePos :: SourcePos -> Tok -> [Tok] -> SourcePos
|
||||||
updatePos _spos _ (Tok pos _ _ : _) = pos
|
updatePos _spos _ (Tok pos _ _ : _) = pos
|
||||||
updatePos spos _ [] = spos
|
updatePos spos _ [] = spos
|
||||||
|
|
||||||
doMacros :: PandocMonad m => Int -> LP m ()
|
doMacros :: PandocMonad m => Int -> LP m ()
|
||||||
doMacros n = do
|
doMacros n = do
|
||||||
|
@ -477,20 +475,20 @@ tokTypeIn toktypes (Tok _ tt _) = tt `elem` toktypes
|
||||||
controlSeq :: PandocMonad m => Text -> LP m Tok
|
controlSeq :: PandocMonad m => Text -> LP m Tok
|
||||||
controlSeq name = satisfyTok isNamed
|
controlSeq name = satisfyTok isNamed
|
||||||
where isNamed (Tok _ (CtrlSeq n) _) = n == name
|
where isNamed (Tok _ (CtrlSeq n) _) = n == name
|
||||||
isNamed _ = False
|
isNamed _ = False
|
||||||
|
|
||||||
symbol :: PandocMonad m => Char -> LP m Tok
|
symbol :: PandocMonad m => Char -> LP m Tok
|
||||||
symbol c = satisfyTok isc
|
symbol c = satisfyTok isc
|
||||||
where isc (Tok _ Symbol d) = case T.uncons d of
|
where isc (Tok _ Symbol d) = case T.uncons d of
|
||||||
Just (c',_) -> c == c'
|
Just (c',_) -> c == c'
|
||||||
_ -> False
|
_ -> False
|
||||||
isc _ = False
|
isc _ = False
|
||||||
|
|
||||||
symbolIn :: PandocMonad m => [Char] -> LP m Tok
|
symbolIn :: PandocMonad m => [Char] -> LP m Tok
|
||||||
symbolIn cs = satisfyTok isInCs
|
symbolIn cs = satisfyTok isInCs
|
||||||
where isInCs (Tok _ Symbol d) = case T.uncons d of
|
where isInCs (Tok _ Symbol d) = case T.uncons d of
|
||||||
Just (c,_) -> c `elem` cs
|
Just (c,_) -> c `elem` cs
|
||||||
_ -> False
|
_ -> False
|
||||||
isInCs _ = False
|
isInCs _ = False
|
||||||
|
|
||||||
sp :: PandocMonad m => LP m ()
|
sp :: PandocMonad m => LP m ()
|
||||||
|
@ -499,19 +497,19 @@ sp = whitespace <|> endline
|
||||||
whitespace :: PandocMonad m => LP m ()
|
whitespace :: PandocMonad m => LP m ()
|
||||||
whitespace = () <$ satisfyTok isSpaceTok
|
whitespace = () <$ satisfyTok isSpaceTok
|
||||||
where isSpaceTok (Tok _ Spaces _) = True
|
where isSpaceTok (Tok _ Spaces _) = True
|
||||||
isSpaceTok _ = False
|
isSpaceTok _ = False
|
||||||
|
|
||||||
newlineTok :: PandocMonad m => LP m ()
|
newlineTok :: PandocMonad m => LP m ()
|
||||||
newlineTok = () <$ satisfyTok isNewlineTok
|
newlineTok = () <$ satisfyTok isNewlineTok
|
||||||
|
|
||||||
isNewlineTok :: Tok -> Bool
|
isNewlineTok :: Tok -> Bool
|
||||||
isNewlineTok (Tok _ Newline _) = True
|
isNewlineTok (Tok _ Newline _) = True
|
||||||
isNewlineTok _ = False
|
isNewlineTok _ = False
|
||||||
|
|
||||||
comment :: PandocMonad m => LP m ()
|
comment :: PandocMonad m => LP m ()
|
||||||
comment = () <$ satisfyTok isCommentTok
|
comment = () <$ satisfyTok isCommentTok
|
||||||
where isCommentTok (Tok _ Comment _) = True
|
where isCommentTok (Tok _ Comment _) = True
|
||||||
isCommentTok _ = False
|
isCommentTok _ = False
|
||||||
|
|
||||||
anyTok :: PandocMonad m => LP m Tok
|
anyTok :: PandocMonad m => LP m Tok
|
||||||
anyTok = satisfyTok (const True)
|
anyTok = satisfyTok (const True)
|
||||||
|
@ -535,7 +533,7 @@ primEscape = do
|
||||||
| otherwise -> return (chr (ord c + 64))
|
| otherwise -> return (chr (ord c + 64))
|
||||||
Nothing -> fail "Empty content of Esc1"
|
Nothing -> fail "Empty content of Esc1"
|
||||||
Esc2 -> case safeRead ('0':'x':T.unpack (T.drop 2 t)) of
|
Esc2 -> case safeRead ('0':'x':T.unpack (T.drop 2 t)) of
|
||||||
Just x -> return (chr x)
|
Just x -> return (chr x)
|
||||||
Nothing -> fail $ "Could not read: " ++ T.unpack t
|
Nothing -> fail $ "Could not read: " ++ T.unpack t
|
||||||
_ -> fail "Expected an Esc1 or Esc2 token" -- should not happen
|
_ -> fail "Expected an Esc1 or Esc2 token" -- should not happen
|
||||||
|
|
||||||
|
@ -594,7 +592,7 @@ word = (str . T.unpack . untoken) <$> satisfyTok isWordTok
|
||||||
regularSymbol :: PandocMonad m => LP m Inlines
|
regularSymbol :: PandocMonad m => LP m Inlines
|
||||||
regularSymbol = (str . T.unpack . untoken) <$> satisfyTok isRegularSymbol
|
regularSymbol = (str . T.unpack . untoken) <$> satisfyTok isRegularSymbol
|
||||||
where isRegularSymbol (Tok _ Symbol t) = not $ T.any isSpecial t
|
where isRegularSymbol (Tok _ Symbol t) = not $ T.any isSpecial t
|
||||||
isRegularSymbol _ = False
|
isRegularSymbol _ = False
|
||||||
isSpecial c = c `Set.member` specialChars
|
isSpecial c = c `Set.member` specialChars
|
||||||
|
|
||||||
specialChars :: Set.Set Char
|
specialChars :: Set.Set Char
|
||||||
|
@ -602,7 +600,7 @@ specialChars = Set.fromList "#$%&~_^\\{}"
|
||||||
|
|
||||||
isWordTok :: Tok -> Bool
|
isWordTok :: Tok -> Bool
|
||||||
isWordTok (Tok _ Word _) = True
|
isWordTok (Tok _ Word _) = True
|
||||||
isWordTok _ = False
|
isWordTok _ = False
|
||||||
|
|
||||||
inlineGroup :: PandocMonad m => LP m Inlines
|
inlineGroup :: PandocMonad m => LP m Inlines
|
||||||
inlineGroup = do
|
inlineGroup = do
|
||||||
|
@ -623,7 +621,7 @@ mkImage options src = do
|
||||||
let replaceTextwidth (k,v) =
|
let replaceTextwidth (k,v) =
|
||||||
case numUnit v of
|
case numUnit v of
|
||||||
Just (num, "\\textwidth") -> (k, showFl (num * 100) ++ "%")
|
Just (num, "\\textwidth") -> (k, showFl (num * 100) ++ "%")
|
||||||
_ -> (k, v)
|
_ -> (k, v)
|
||||||
let kvs = map replaceTextwidth
|
let kvs = map replaceTextwidth
|
||||||
$ filter (\(k,_) -> k `elem` ["width", "height"]) options
|
$ filter (\(k,_) -> k `elem` ["width", "height"]) options
|
||||||
let attr = ("",[], kvs)
|
let attr = ("",[], kvs)
|
||||||
|
@ -640,7 +638,7 @@ doxspace = do
|
||||||
where startsWithLetter (Tok _ Word t) =
|
where startsWithLetter (Tok _ Word t) =
|
||||||
case T.uncons t of
|
case T.uncons t of
|
||||||
Just (c, _) | isLetter c -> True
|
Just (c, _) | isLetter c -> True
|
||||||
_ -> False
|
_ -> False
|
||||||
startsWithLetter _ = False
|
startsWithLetter _ = False
|
||||||
|
|
||||||
|
|
||||||
|
@ -686,7 +684,7 @@ singleQuote = do
|
||||||
where startsWithLetter (Tok _ Word t) =
|
where startsWithLetter (Tok _ Word t) =
|
||||||
case T.uncons t of
|
case T.uncons t of
|
||||||
Just (c, _) | isLetter c -> True
|
Just (c, _) | isLetter c -> True
|
||||||
_ -> False
|
_ -> False
|
||||||
startsWithLetter _ = False
|
startsWithLetter _ = False
|
||||||
|
|
||||||
quoted' :: PandocMonad m
|
quoted' :: PandocMonad m
|
||||||
|
@ -736,7 +734,7 @@ doverb = do
|
||||||
Tok _ Symbol t <- anySymbol
|
Tok _ Symbol t <- anySymbol
|
||||||
marker <- case T.uncons t of
|
marker <- case T.uncons t of
|
||||||
Just (c, ts) | T.null ts -> return c
|
Just (c, ts) | T.null ts -> return c
|
||||||
_ -> mzero
|
_ -> mzero
|
||||||
withVerbatimMode $
|
withVerbatimMode $
|
||||||
(code . T.unpack . untokenize) <$>
|
(code . T.unpack . untokenize) <$>
|
||||||
manyTill (verbTok marker) (symbol marker)
|
manyTill (verbTok marker) (symbol marker)
|
||||||
|
@ -760,7 +758,7 @@ dolstinline = do
|
||||||
Tok _ Symbol t <- anySymbol
|
Tok _ Symbol t <- anySymbol
|
||||||
marker <- case T.uncons t of
|
marker <- case T.uncons t of
|
||||||
Just (c, ts) | T.null ts -> return c
|
Just (c, ts) | T.null ts -> return c
|
||||||
_ -> mzero
|
_ -> mzero
|
||||||
let stopchar = if marker == '{' then '}' else marker
|
let stopchar = if marker == '{' then '}' else marker
|
||||||
withVerbatimMode $
|
withVerbatimMode $
|
||||||
(codeWith ("",classes,[]) . T.unpack . untokenize) <$>
|
(codeWith ("",classes,[]) . T.unpack . untokenize) <$>
|
||||||
|
@ -770,7 +768,7 @@ keyval :: PandocMonad m => LP m (String, String)
|
||||||
keyval = try $ do
|
keyval = try $ do
|
||||||
Tok _ Word key <- satisfyTok isWordTok
|
Tok _ Word key <- satisfyTok isWordTok
|
||||||
let isSpecSym (Tok _ Symbol t) = t /= "]" && t /= ","
|
let isSpecSym (Tok _ Symbol t) = t /= "]" && t /= ","
|
||||||
isSpecSym _ = False
|
isSpecSym _ = False
|
||||||
optional sp
|
optional sp
|
||||||
val <- option [] $ do
|
val <- option [] $ do
|
||||||
symbol '='
|
symbol '='
|
||||||
|
@ -1504,7 +1502,7 @@ hypertargetBlock = try $ do
|
||||||
bs <- grouped block
|
bs <- grouped block
|
||||||
case toList bs of
|
case toList bs of
|
||||||
[Header 1 (ident,_,_) _] | ident == ref -> return bs
|
[Header 1 (ident,_,_) _] | ident == ref -> return bs
|
||||||
_ -> return $ divWith (ref, [], []) bs
|
_ -> return $ divWith (ref, [], []) bs
|
||||||
|
|
||||||
hypertargetInline :: PandocMonad m => LP m Inlines
|
hypertargetInline :: PandocMonad m => LP m Inlines
|
||||||
hypertargetInline = try $ do
|
hypertargetInline = try $ do
|
||||||
|
@ -1846,7 +1844,7 @@ argSeq n = do
|
||||||
|
|
||||||
isArgTok :: Tok -> Bool
|
isArgTok :: Tok -> Bool
|
||||||
isArgTok (Tok _ (Arg _) _) = True
|
isArgTok (Tok _ (Arg _) _) = True
|
||||||
isArgTok _ = False
|
isArgTok _ = False
|
||||||
|
|
||||||
newcommand :: PandocMonad m => LP m (Text, Macro)
|
newcommand :: PandocMonad m => LP m (Text, Macro)
|
||||||
newcommand = do
|
newcommand = do
|
||||||
|
@ -1869,7 +1867,7 @@ newcommand = do
|
||||||
when (mtype == "newcommand") $ do
|
when (mtype == "newcommand") $ do
|
||||||
macros <- sMacros <$> getState
|
macros <- sMacros <$> getState
|
||||||
case M.lookup name macros of
|
case M.lookup name macros of
|
||||||
Just _ -> report $ MacroAlreadyDefined (T.unpack txt) pos
|
Just _ -> report $ MacroAlreadyDefined (T.unpack txt) pos
|
||||||
Nothing -> return ()
|
Nothing -> return ()
|
||||||
return (name, Macro ExpandWhenUsed numargs optarg contents)
|
return (name, Macro ExpandWhenUsed numargs optarg contents)
|
||||||
|
|
||||||
|
@ -1893,7 +1891,7 @@ newenvironment = do
|
||||||
when (mtype == "newenvironment") $ do
|
when (mtype == "newenvironment") $ do
|
||||||
macros <- sMacros <$> getState
|
macros <- sMacros <$> getState
|
||||||
case M.lookup name macros of
|
case M.lookup name macros of
|
||||||
Just _ -> report $ MacroAlreadyDefined (T.unpack name) pos
|
Just _ -> report $ MacroAlreadyDefined (T.unpack name) pos
|
||||||
Nothing -> return ()
|
Nothing -> return ()
|
||||||
return (name, Macro ExpandWhenUsed numargs optarg startcontents,
|
return (name, Macro ExpandWhenUsed numargs optarg startcontents,
|
||||||
Macro ExpandWhenUsed 0 Nothing endcontents)
|
Macro ExpandWhenUsed 0 Nothing endcontents)
|
||||||
|
@ -2186,8 +2184,8 @@ obeylines = do
|
||||||
softBreakToHard x = x
|
softBreakToHard x = x
|
||||||
removeLeadingTrailingBreaks = reverse . dropWhile isLineBreak .
|
removeLeadingTrailingBreaks = reverse . dropWhile isLineBreak .
|
||||||
reverse . dropWhile isLineBreak
|
reverse . dropWhile isLineBreak
|
||||||
isLineBreak LineBreak = True
|
isLineBreak LineBreak = True
|
||||||
isLineBreak _ = False
|
isLineBreak _ = False
|
||||||
|
|
||||||
minted :: PandocMonad m => LP m Blocks
|
minted :: PandocMonad m => LP m Blocks
|
||||||
minted = do
|
minted = do
|
||||||
|
@ -2521,13 +2519,13 @@ setDefaultLanguage = do
|
||||||
polyglossiaLangToBCP47 :: M.Map String (String -> Lang)
|
polyglossiaLangToBCP47 :: M.Map String (String -> Lang)
|
||||||
polyglossiaLangToBCP47 = M.fromList
|
polyglossiaLangToBCP47 = M.fromList
|
||||||
[ ("arabic", \o -> case filter (/=' ') o of
|
[ ("arabic", \o -> case filter (/=' ') o of
|
||||||
"locale=algeria" -> Lang "ar" "" "DZ" []
|
"locale=algeria" -> Lang "ar" "" "DZ" []
|
||||||
"locale=mashriq" -> Lang "ar" "" "SY" []
|
"locale=mashriq" -> Lang "ar" "" "SY" []
|
||||||
"locale=libya" -> Lang "ar" "" "LY" []
|
"locale=libya" -> Lang "ar" "" "LY" []
|
||||||
"locale=morocco" -> Lang "ar" "" "MA" []
|
"locale=morocco" -> Lang "ar" "" "MA" []
|
||||||
"locale=mauritania" -> Lang "ar" "" "MR" []
|
"locale=mauritania" -> Lang "ar" "" "MR" []
|
||||||
"locale=tunisia" -> Lang "ar" "" "TN" []
|
"locale=tunisia" -> Lang "ar" "" "TN" []
|
||||||
_ -> Lang "ar" "" "" [])
|
_ -> Lang "ar" "" "" [])
|
||||||
, ("german", \o -> case filter (/=' ') o of
|
, ("german", \o -> case filter (/=' ') o of
|
||||||
"spelling=old" -> Lang "de" "" "DE" ["1901"]
|
"spelling=old" -> Lang "de" "" "DE" ["1901"]
|
||||||
"variant=austrian,spelling=old"
|
"variant=austrian,spelling=old"
|
||||||
|
@ -2539,20 +2537,20 @@ polyglossiaLangToBCP47 = M.fromList
|
||||||
_ -> Lang "de" "" "" [])
|
_ -> Lang "de" "" "" [])
|
||||||
, ("lsorbian", \_ -> Lang "dsb" "" "" [])
|
, ("lsorbian", \_ -> Lang "dsb" "" "" [])
|
||||||
, ("greek", \o -> case filter (/=' ') o of
|
, ("greek", \o -> case filter (/=' ') o of
|
||||||
"variant=poly" -> Lang "el" "" "polyton" []
|
"variant=poly" -> Lang "el" "" "polyton" []
|
||||||
"variant=ancient" -> Lang "grc" "" "" []
|
"variant=ancient" -> Lang "grc" "" "" []
|
||||||
_ -> Lang "el" "" "" [])
|
_ -> Lang "el" "" "" [])
|
||||||
, ("english", \o -> case filter (/=' ') o of
|
, ("english", \o -> case filter (/=' ') o of
|
||||||
"variant=australian" -> Lang "en" "" "AU" []
|
"variant=australian" -> Lang "en" "" "AU" []
|
||||||
"variant=canadian" -> Lang "en" "" "CA" []
|
"variant=canadian" -> Lang "en" "" "CA" []
|
||||||
"variant=british" -> Lang "en" "" "GB" []
|
"variant=british" -> Lang "en" "" "GB" []
|
||||||
"variant=newzealand" -> Lang "en" "" "NZ" []
|
"variant=newzealand" -> Lang "en" "" "NZ" []
|
||||||
"variant=american" -> Lang "en" "" "US" []
|
"variant=american" -> Lang "en" "" "US" []
|
||||||
_ -> Lang "en" "" "" [])
|
_ -> Lang "en" "" "" [])
|
||||||
, ("usorbian", \_ -> Lang "hsb" "" "" [])
|
, ("usorbian", \_ -> Lang "hsb" "" "" [])
|
||||||
, ("latin", \o -> case filter (/=' ') o of
|
, ("latin", \o -> case filter (/=' ') o of
|
||||||
"variant=classic" -> Lang "la" "" "" ["x-classic"]
|
"variant=classic" -> Lang "la" "" "" ["x-classic"]
|
||||||
_ -> Lang "la" "" "" [])
|
_ -> Lang "la" "" "" [])
|
||||||
, ("slovenian", \_ -> Lang "sl" "" "" [])
|
, ("slovenian", \_ -> Lang "sl" "" "" [])
|
||||||
, ("serbianc", \_ -> Lang "sr" "cyrl" "" [])
|
, ("serbianc", \_ -> Lang "sr" "cyrl" "" [])
|
||||||
, ("pinyin", \_ -> Lang "zh" "Latn" "" ["pinyin"])
|
, ("pinyin", \_ -> Lang "zh" "Latn" "" ["pinyin"])
|
||||||
|
|
|
@ -52,7 +52,7 @@ import System.FilePath (addExtension, takeExtension)
|
||||||
import Text.HTML.TagSoup
|
import Text.HTML.TagSoup
|
||||||
import Text.Pandoc.Builder (Blocks, Inlines)
|
import Text.Pandoc.Builder (Blocks, Inlines)
|
||||||
import qualified Text.Pandoc.Builder as B
|
import qualified Text.Pandoc.Builder as B
|
||||||
import Text.Pandoc.Class (PandocMonad(..), report)
|
import Text.Pandoc.Class (PandocMonad (..), report)
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Emoji (emojis)
|
import Text.Pandoc.Emoji (emojis)
|
||||||
import Text.Pandoc.Error
|
import Text.Pandoc.Error
|
||||||
|
@ -61,8 +61,7 @@ import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Parsing hiding (tableWith)
|
import Text.Pandoc.Parsing hiding (tableWith)
|
||||||
import Text.Pandoc.Readers.HTML (htmlInBalanced, htmlTag, isBlockTag,
|
import Text.Pandoc.Readers.HTML (htmlInBalanced, htmlTag, isBlockTag,
|
||||||
isCommentTag, isInlineTag, isTextTag)
|
isCommentTag, isInlineTag, isTextTag)
|
||||||
import Text.Pandoc.Readers.LaTeX (rawLaTeXBlock,
|
import Text.Pandoc.Readers.LaTeX (applyMacros, rawLaTeXBlock, rawLaTeXInline)
|
||||||
rawLaTeXInline, applyMacros)
|
|
||||||
import Text.Pandoc.Shared
|
import Text.Pandoc.Shared
|
||||||
import qualified Text.Pandoc.UTF8 as UTF8
|
import qualified Text.Pandoc.UTF8 as UTF8
|
||||||
import Text.Pandoc.XML (fromEntities)
|
import Text.Pandoc.XML (fromEntities)
|
||||||
|
@ -1506,8 +1505,8 @@ escapedChar :: PandocMonad m => MarkdownParser m (F Inlines)
|
||||||
escapedChar = do
|
escapedChar = do
|
||||||
result <- escapedChar'
|
result <- escapedChar'
|
||||||
case result of
|
case result of
|
||||||
' ' -> return $ return $ B.str "\160" -- "\ " is a nonbreaking space
|
' ' -> return $ return $ B.str "\160" -- "\ " is a nonbreaking space
|
||||||
_ -> return $ return $ B.str [result]
|
_ -> return $ return $ B.str [result]
|
||||||
|
|
||||||
ltSign :: PandocMonad m => MarkdownParser m (F Inlines)
|
ltSign :: PandocMonad m => MarkdownParser m (F Inlines)
|
||||||
ltSign = do
|
ltSign = do
|
||||||
|
|
|
@ -41,7 +41,6 @@ module Text.Pandoc.Readers.MediaWiki ( readMediaWiki ) where
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import Control.Monad.Except (throwError)
|
import Control.Monad.Except (throwError)
|
||||||
import Data.Char (isDigit, isSpace)
|
import Data.Char (isDigit, isSpace)
|
||||||
import Data.Text (Text, unpack)
|
|
||||||
import qualified Data.Foldable as F
|
import qualified Data.Foldable as F
|
||||||
import Data.List (intercalate, intersperse, isPrefixOf)
|
import Data.List (intercalate, intersperse, isPrefixOf)
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
|
@ -49,17 +48,18 @@ import Data.Maybe (fromMaybe)
|
||||||
import Data.Monoid ((<>))
|
import Data.Monoid ((<>))
|
||||||
import Data.Sequence (ViewL (..), viewl, (<|))
|
import Data.Sequence (ViewL (..), viewl, (<|))
|
||||||
import qualified Data.Set as Set
|
import qualified Data.Set as Set
|
||||||
|
import Data.Text (Text, unpack)
|
||||||
import Text.HTML.TagSoup
|
import Text.HTML.TagSoup
|
||||||
import Text.Pandoc.Builder (Blocks, Inlines, trimInlines)
|
import Text.Pandoc.Builder (Blocks, Inlines, trimInlines)
|
||||||
import qualified Text.Pandoc.Builder as B
|
import qualified Text.Pandoc.Builder as B
|
||||||
import Text.Pandoc.Class (PandocMonad(..))
|
import Text.Pandoc.Class (PandocMonad (..))
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Logging
|
import Text.Pandoc.Logging
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Parsing hiding (nested)
|
import Text.Pandoc.Parsing hiding (nested)
|
||||||
import Text.Pandoc.Readers.HTML (htmlTag, isBlockTag, isCommentTag)
|
import Text.Pandoc.Readers.HTML (htmlTag, isBlockTag, isCommentTag)
|
||||||
import Text.Pandoc.Shared (safeRead, stringify, stripTrailingNewlines, trim,
|
import Text.Pandoc.Shared (crFilter, safeRead, stringify, stripTrailingNewlines,
|
||||||
crFilter)
|
trim)
|
||||||
import Text.Pandoc.Walk (walk)
|
import Text.Pandoc.Walk (walk)
|
||||||
import Text.Pandoc.XML (fromEntities)
|
import Text.Pandoc.XML (fromEntities)
|
||||||
|
|
||||||
|
|
|
@ -35,9 +35,9 @@ import Text.Pandoc.Options (ReaderOptions)
|
||||||
import Text.Pandoc.Shared (safeRead)
|
import Text.Pandoc.Shared (safeRead)
|
||||||
|
|
||||||
import Control.Monad.Except (throwError)
|
import Control.Monad.Except (throwError)
|
||||||
|
import Data.Text (Text, unpack)
|
||||||
import Text.Pandoc.Class
|
import Text.Pandoc.Class
|
||||||
import Text.Pandoc.Error
|
import Text.Pandoc.Error
|
||||||
import Data.Text (Text, unpack)
|
|
||||||
|
|
||||||
-- | Read native formatted text and return a Pandoc document.
|
-- | Read native formatted text and return a Pandoc document.
|
||||||
-- The input may be a full pandoc document, a block list, a block,
|
-- The input may be a full pandoc document, a block list, a block,
|
||||||
|
|
|
@ -2,16 +2,16 @@
|
||||||
module Text.Pandoc.Readers.OPML ( readOPML ) where
|
module Text.Pandoc.Readers.OPML ( readOPML ) where
|
||||||
import Control.Monad.State.Strict
|
import Control.Monad.State.Strict
|
||||||
import Data.Char (toUpper)
|
import Data.Char (toUpper)
|
||||||
import Data.Text (Text, unpack, pack)
|
|
||||||
import Data.Default
|
import Data.Default
|
||||||
import Data.Generics
|
import Data.Generics
|
||||||
|
import Data.Text (Text, pack, unpack)
|
||||||
import Text.HTML.TagSoup.Entity (lookupEntity)
|
import Text.HTML.TagSoup.Entity (lookupEntity)
|
||||||
import Text.Pandoc.Builder
|
import Text.Pandoc.Builder
|
||||||
import Text.Pandoc.Class (PandocMonad)
|
import Text.Pandoc.Class (PandocMonad)
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Shared (crFilter)
|
|
||||||
import Text.Pandoc.Readers.HTML (readHtml)
|
import Text.Pandoc.Readers.HTML (readHtml)
|
||||||
import Text.Pandoc.Readers.Markdown (readMarkdown)
|
import Text.Pandoc.Readers.Markdown (readMarkdown)
|
||||||
|
import Text.Pandoc.Shared (crFilter)
|
||||||
import Text.XML.Light
|
import Text.XML.Light
|
||||||
|
|
||||||
type OPML m = StateT OPMLState m
|
type OPML m = StateT OPMLState m
|
||||||
|
|
|
@ -32,29 +32,29 @@ Entry point to the odt reader.
|
||||||
|
|
||||||
module Text.Pandoc.Readers.Odt ( readOdt ) where
|
module Text.Pandoc.Readers.Odt ( readOdt ) where
|
||||||
|
|
||||||
import Codec.Archive.Zip
|
import Codec.Archive.Zip
|
||||||
import qualified Text.XML.Light as XML
|
import qualified Text.XML.Light as XML
|
||||||
|
|
||||||
import qualified Data.ByteString.Lazy as B
|
import qualified Data.ByteString.Lazy as B
|
||||||
|
|
||||||
import System.FilePath
|
import System.FilePath
|
||||||
|
|
||||||
import Control.Monad.Except (throwError)
|
import Control.Monad.Except (throwError)
|
||||||
|
|
||||||
import Text.Pandoc.Class (PandocMonad)
|
import Text.Pandoc.Class (PandocMonad)
|
||||||
import qualified Text.Pandoc.Class as P
|
import qualified Text.Pandoc.Class as P
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Error
|
import Text.Pandoc.Error
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.MediaBag
|
||||||
import Text.Pandoc.MediaBag
|
import Text.Pandoc.Options
|
||||||
import qualified Text.Pandoc.UTF8 as UTF8
|
import qualified Text.Pandoc.UTF8 as UTF8
|
||||||
|
|
||||||
import Text.Pandoc.Readers.Odt.ContentReader
|
import Text.Pandoc.Readers.Odt.ContentReader
|
||||||
import Text.Pandoc.Readers.Odt.StyleReader
|
import Text.Pandoc.Readers.Odt.StyleReader
|
||||||
|
|
||||||
import Text.Pandoc.Readers.Odt.Generic.XMLConverter
|
import Text.Pandoc.Readers.Odt.Generic.Fallible
|
||||||
import Text.Pandoc.Readers.Odt.Generic.Fallible
|
import Text.Pandoc.Readers.Odt.Generic.XMLConverter
|
||||||
import Text.Pandoc.Shared (filteredFilesFromArchive)
|
import Text.Pandoc.Shared (filteredFilesFromArchive)
|
||||||
|
|
||||||
readOdt :: PandocMonad m
|
readOdt :: PandocMonad m
|
||||||
=> ReaderOptions
|
=> ReaderOptions
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{-# LANGUAGE Arrows #-}
|
{-# LANGUAGE Arrows #-}
|
||||||
{-# LANGUAGE TupleSections #-}
|
|
||||||
{-# LANGUAGE FlexibleInstances #-}
|
{-# LANGUAGE FlexibleInstances #-}
|
||||||
|
{-# LANGUAGE TupleSections #-}
|
||||||
{-
|
{-
|
||||||
Copyright (C) 2015 Martin Linnemann <theCodingMarlin@googlemail.com>
|
Copyright (C) 2015 Martin Linnemann <theCodingMarlin@googlemail.com>
|
||||||
|
|
||||||
|
@ -38,17 +38,17 @@ faster and easier to implement this way.
|
||||||
|
|
||||||
module Text.Pandoc.Readers.Odt.Arrows.State where
|
module Text.Pandoc.Readers.Odt.Arrows.State where
|
||||||
|
|
||||||
import Prelude hiding ( foldr, foldl )
|
import Prelude hiding (foldl, foldr)
|
||||||
|
|
||||||
import qualified Control.Category as Cat
|
import Control.Arrow
|
||||||
import Control.Arrow
|
import qualified Control.Category as Cat
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
|
|
||||||
import Data.Foldable
|
import Data.Foldable
|
||||||
import Data.Monoid
|
import Data.Monoid
|
||||||
|
|
||||||
import Text.Pandoc.Readers.Odt.Arrows.Utils
|
import Text.Pandoc.Readers.Odt.Arrows.Utils
|
||||||
import Text.Pandoc.Readers.Odt.Generic.Fallible
|
import Text.Pandoc.Readers.Odt.Generic.Fallible
|
||||||
|
|
||||||
|
|
||||||
newtype ArrowState state a b = ArrowState
|
newtype ArrowState state a b = ArrowState
|
||||||
|
|
|
@ -39,11 +39,11 @@ with an equivalent return value.
|
||||||
-- We export everything
|
-- We export everything
|
||||||
module Text.Pandoc.Readers.Odt.Arrows.Utils where
|
module Text.Pandoc.Readers.Odt.Arrows.Utils where
|
||||||
|
|
||||||
import Control.Arrow
|
import Control.Arrow
|
||||||
import Control.Monad ( join )
|
import Control.Monad (join)
|
||||||
|
|
||||||
import Text.Pandoc.Readers.Odt.Generic.Fallible
|
import Text.Pandoc.Readers.Odt.Generic.Fallible
|
||||||
import Text.Pandoc.Readers.Odt.Generic.Utils
|
import Text.Pandoc.Readers.Odt.Generic.Utils
|
||||||
|
|
||||||
and2 :: (Arrow a) => a b c -> a b c' -> a b (c,c')
|
and2 :: (Arrow a) => a b c -> a b c' -> a b (c,c')
|
||||||
and2 = (&&&)
|
and2 = (&&&)
|
||||||
|
|
|
@ -32,8 +32,8 @@ Core types of the odt reader.
|
||||||
|
|
||||||
module Text.Pandoc.Readers.Odt.Base where
|
module Text.Pandoc.Readers.Odt.Base where
|
||||||
|
|
||||||
import Text.Pandoc.Readers.Odt.Generic.XMLConverter
|
import Text.Pandoc.Readers.Odt.Generic.XMLConverter
|
||||||
import Text.Pandoc.Readers.Odt.Namespaces
|
import Text.Pandoc.Readers.Odt.Namespaces
|
||||||
|
|
||||||
type OdtConverterState s = XMLConverterState Namespace s
|
type OdtConverterState s = XMLConverterState Namespace s
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
{-# LANGUAGE Arrows #-}
|
{-# LANGUAGE Arrows #-}
|
||||||
{-# LANGUAGE TupleSections #-}
|
|
||||||
{-# LANGUAGE PatternGuards #-}
|
{-# LANGUAGE PatternGuards #-}
|
||||||
{-# LANGUAGE ViewPatterns #-}
|
|
||||||
{-# LANGUAGE RecordWildCards #-}
|
{-# LANGUAGE RecordWildCards #-}
|
||||||
|
{-# LANGUAGE TupleSections #-}
|
||||||
|
{-# LANGUAGE ViewPatterns #-}
|
||||||
|
|
||||||
{-
|
{-
|
||||||
Copyright (C) 2015 Martin Linnemann <theCodingMarlin@googlemail.com>
|
Copyright (C) 2015 Martin Linnemann <theCodingMarlin@googlemail.com>
|
||||||
|
@ -39,29 +39,29 @@ module Text.Pandoc.Readers.Odt.ContentReader
|
||||||
, read_body
|
, read_body
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Control.Arrow
|
import Control.Applicative hiding (liftA, liftA2, liftA3)
|
||||||
import Control.Applicative hiding ( liftA, liftA2, liftA3 )
|
import Control.Arrow
|
||||||
|
|
||||||
import qualified Data.ByteString.Lazy as B
|
import qualified Data.ByteString.Lazy as B
|
||||||
import qualified Data.Map as M
|
import Data.List (find, intercalate)
|
||||||
import Data.List ( find, intercalate )
|
import qualified Data.Map as M
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
|
|
||||||
import qualified Text.XML.Light as XML
|
import qualified Text.XML.Light as XML
|
||||||
|
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Builder
|
import Text.Pandoc.Builder
|
||||||
import Text.Pandoc.MediaBag (insertMedia, MediaBag)
|
import Text.Pandoc.MediaBag (MediaBag, insertMedia)
|
||||||
import Text.Pandoc.Shared
|
import Text.Pandoc.Shared
|
||||||
|
|
||||||
import Text.Pandoc.Readers.Odt.Base
|
import Text.Pandoc.Readers.Odt.Base
|
||||||
import Text.Pandoc.Readers.Odt.Namespaces
|
import Text.Pandoc.Readers.Odt.Namespaces
|
||||||
import Text.Pandoc.Readers.Odt.StyleReader
|
import Text.Pandoc.Readers.Odt.StyleReader
|
||||||
|
|
||||||
import Text.Pandoc.Readers.Odt.Arrows.Utils
|
import Text.Pandoc.Readers.Odt.Arrows.Utils
|
||||||
import Text.Pandoc.Readers.Odt.Generic.XMLConverter
|
import Text.Pandoc.Readers.Odt.Generic.Fallible
|
||||||
import Text.Pandoc.Readers.Odt.Generic.Fallible
|
import Text.Pandoc.Readers.Odt.Generic.Utils
|
||||||
import Text.Pandoc.Readers.Odt.Generic.Utils
|
import Text.Pandoc.Readers.Odt.Generic.XMLConverter
|
||||||
|
|
||||||
import qualified Data.Set as Set
|
import qualified Data.Set as Set
|
||||||
|
|
||||||
|
@ -342,9 +342,9 @@ modifierFromStyleDiff propertyTriple =
|
||||||
Just oldVPos -> getVPosModifier' (oldVPos, verticalPosition textProps)
|
Just oldVPos -> getVPosModifier' (oldVPos, verticalPosition textProps)
|
||||||
|
|
||||||
getVPosModifier' (oldVPos , newVPos ) | oldVPos == newVPos = ignore
|
getVPosModifier' (oldVPos , newVPos ) | oldVPos == newVPos = ignore
|
||||||
getVPosModifier' ( _ , VPosSub ) = subscript
|
getVPosModifier' ( _ , VPosSub ) = subscript
|
||||||
getVPosModifier' ( _ , VPosSuper ) = superscript
|
getVPosModifier' ( _ , VPosSuper ) = superscript
|
||||||
getVPosModifier' ( _ , _ ) = ignore
|
getVPosModifier' ( _ , _ ) = ignore
|
||||||
|
|
||||||
hasEmphChanged :: PropertyTriple -> Bool
|
hasEmphChanged :: PropertyTriple -> Bool
|
||||||
hasEmphChanged = swing any [ hasChanged isEmphasised
|
hasEmphChanged = swing any [ hasChanged isEmphasised
|
||||||
|
|
|
@ -39,7 +39,7 @@ compatible instances of "ArrowChoice".
|
||||||
-- We export everything
|
-- We export everything
|
||||||
module Text.Pandoc.Readers.Odt.Generic.Fallible where
|
module Text.Pandoc.Readers.Odt.Generic.Fallible where
|
||||||
|
|
||||||
import Data.Monoid ((<>))
|
import Data.Monoid ((<>))
|
||||||
|
|
||||||
-- | Default for now. Will probably become a class at some point.
|
-- | Default for now. Will probably become a class at some point.
|
||||||
type Failure = ()
|
type Failure = ()
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{-# LANGUAGE TypeOperators #-}
|
|
||||||
{-# LANGUAGE TupleSections #-}
|
|
||||||
{-# LANGUAGE PatternGuards #-}
|
{-# LANGUAGE PatternGuards #-}
|
||||||
|
{-# LANGUAGE TupleSections #-}
|
||||||
|
{-# LANGUAGE TypeOperators #-}
|
||||||
{-# LANGUAGE ViewPatterns #-}
|
{-# LANGUAGE ViewPatterns #-}
|
||||||
|
|
||||||
{-
|
{-
|
||||||
|
@ -51,12 +51,12 @@ module Text.Pandoc.Readers.Odt.Generic.Utils
|
||||||
, composition
|
, composition
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Control.Category ( Category, (>>>), (<<<) )
|
import Control.Category (Category, (<<<), (>>>))
|
||||||
import qualified Control.Category as Cat ( id )
|
import qualified Control.Category as Cat (id)
|
||||||
import Control.Monad ( msum )
|
import Control.Monad (msum)
|
||||||
|
|
||||||
import qualified Data.Foldable as F ( Foldable, foldr )
|
import qualified Data.Foldable as F (Foldable, foldr)
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
|
|
||||||
|
|
||||||
-- | Aequivalent to
|
-- | Aequivalent to
|
||||||
|
|
|
@ -31,11 +31,11 @@ Namespaces used in odt files.
|
||||||
module Text.Pandoc.Readers.Odt.Namespaces ( Namespace (..)
|
module Text.Pandoc.Readers.Odt.Namespaces ( Namespace (..)
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Data.List ( isPrefixOf )
|
import Data.List (isPrefixOf)
|
||||||
import Data.Maybe ( fromMaybe, listToMaybe )
|
import qualified Data.Map as M (empty, insert)
|
||||||
import qualified Data.Map as M ( empty, insert )
|
import Data.Maybe (fromMaybe, listToMaybe)
|
||||||
|
|
||||||
import Text.Pandoc.Readers.Odt.Generic.Namespaces
|
import Text.Pandoc.Readers.Odt.Generic.Namespaces
|
||||||
|
|
||||||
|
|
||||||
instance NameSpaceID Namespace where
|
instance NameSpaceID Namespace where
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
{-# LANGUAGE TupleSections #-}
|
|
||||||
{-# LANGUAGE PatternGuards #-}
|
|
||||||
{-# LANGUAGE ViewPatterns #-}
|
|
||||||
{-# LANGUAGE RecordWildCards #-}
|
|
||||||
{-# LANGUAGE Arrows #-}
|
{-# LANGUAGE Arrows #-}
|
||||||
|
{-# LANGUAGE PatternGuards #-}
|
||||||
|
{-# LANGUAGE RecordWildCards #-}
|
||||||
|
{-# LANGUAGE TupleSections #-}
|
||||||
|
|
||||||
{-
|
{-
|
||||||
Copyright (C) 2015 Martin Linnemann <theCodingMarlin@googlemail.com>
|
Copyright (C) 2015 Martin Linnemann <theCodingMarlin@googlemail.com>
|
||||||
|
@ -58,28 +57,28 @@ module Text.Pandoc.Readers.Odt.StyleReader
|
||||||
, readStylesAt
|
, readStylesAt
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Control.Arrow
|
import Control.Applicative hiding (liftA, liftA2, liftA3)
|
||||||
import Control.Applicative hiding ( liftA, liftA2, liftA3 )
|
import Control.Arrow
|
||||||
|
|
||||||
import qualified Data.Foldable as F
|
import Data.Char (isDigit)
|
||||||
import qualified Data.Map as M
|
import Data.Default
|
||||||
import qualified Data.Set as S
|
import qualified Data.Foldable as F
|
||||||
import Data.Char ( isDigit )
|
import Data.List (unfoldr)
|
||||||
import Data.Default
|
import qualified Data.Map as M
|
||||||
import Data.List ( unfoldr )
|
import Data.Maybe
|
||||||
import Data.Maybe
|
import qualified Data.Set as S
|
||||||
|
|
||||||
import qualified Text.XML.Light as XML
|
import qualified Text.XML.Light as XML
|
||||||
|
|
||||||
import Text.Pandoc.Readers.Odt.Arrows.Utils
|
import Text.Pandoc.Readers.Odt.Arrows.Utils
|
||||||
|
|
||||||
import Text.Pandoc.Readers.Odt.Generic.Utils
|
import Text.Pandoc.Readers.Odt.Generic.Fallible
|
||||||
import qualified Text.Pandoc.Readers.Odt.Generic.SetMap as SM
|
import qualified Text.Pandoc.Readers.Odt.Generic.SetMap as SM
|
||||||
import Text.Pandoc.Readers.Odt.Generic.Fallible
|
import Text.Pandoc.Readers.Odt.Generic.Utils
|
||||||
import Text.Pandoc.Readers.Odt.Generic.XMLConverter
|
import Text.Pandoc.Readers.Odt.Generic.XMLConverter
|
||||||
|
|
||||||
import Text.Pandoc.Readers.Odt.Namespaces
|
import Text.Pandoc.Readers.Odt.Base
|
||||||
import Text.Pandoc.Readers.Odt.Base
|
import Text.Pandoc.Readers.Odt.Namespaces
|
||||||
|
|
||||||
|
|
||||||
readStylesAt :: XML.Element -> Fallible Styles
|
readStylesAt :: XML.Element -> Fallible Styles
|
||||||
|
@ -217,15 +216,15 @@ instance Lookupable StyleFamily where
|
||||||
]
|
]
|
||||||
|
|
||||||
-- | A named style
|
-- | A named style
|
||||||
data Style = Style { styleFamily :: Maybe StyleFamily
|
data Style = Style { styleFamily :: Maybe StyleFamily
|
||||||
, styleParentName :: Maybe StyleName
|
, styleParentName :: Maybe StyleName
|
||||||
, listStyle :: Maybe StyleName
|
, listStyle :: Maybe StyleName
|
||||||
, styleProperties :: StyleProperties
|
, styleProperties :: StyleProperties
|
||||||
}
|
}
|
||||||
deriving ( Eq, Show )
|
deriving ( Eq, Show )
|
||||||
|
|
||||||
data StyleProperties = SProps { textProperties :: Maybe TextProperties
|
data StyleProperties = SProps { textProperties :: Maybe TextProperties
|
||||||
, paraProperties :: Maybe ParaProperties
|
, paraProperties :: Maybe ParaProperties
|
||||||
-- , tableColProperties :: Maybe TColProperties
|
-- , tableColProperties :: Maybe TColProperties
|
||||||
-- , tableRowProperties :: Maybe TRowProperties
|
-- , tableRowProperties :: Maybe TRowProperties
|
||||||
-- , tableCellProperties :: Maybe TCellProperties
|
-- , tableCellProperties :: Maybe TCellProperties
|
||||||
|
|
|
@ -64,14 +64,13 @@ import Text.Pandoc.Builder (Blocks, Inlines)
|
||||||
import Text.Pandoc.Definition (Meta (..), nullMeta)
|
import Text.Pandoc.Definition (Meta (..), nullMeta)
|
||||||
import Text.Pandoc.Logging
|
import Text.Pandoc.Logging
|
||||||
import Text.Pandoc.Options (ReaderOptions (..))
|
import Text.Pandoc.Options (ReaderOptions (..))
|
||||||
import Text.Pandoc.Readers.LaTeX.Types (Macro)
|
|
||||||
import Text.Pandoc.Parsing (Future, HasHeaderMap (..), HasIdentifierList (..),
|
import Text.Pandoc.Parsing (Future, HasHeaderMap (..), HasIdentifierList (..),
|
||||||
HasIncludeFiles (..), HasLastStrPosition (..),
|
HasIncludeFiles (..), HasLastStrPosition (..),
|
||||||
HasLogMessages (..), HasQuoteContext (..),
|
HasLogMessages (..), HasMacros (..),
|
||||||
HasMacros (..),
|
HasQuoteContext (..), HasReaderOptions (..),
|
||||||
HasReaderOptions (..), ParserContext (..),
|
ParserContext (..), QuoteContext (..), SourcePos,
|
||||||
QuoteContext (..), SourcePos, askF, asksF, returnF,
|
askF, asksF, returnF, runF, trimInlinesF)
|
||||||
runF, trimInlinesF)
|
import Text.Pandoc.Readers.LaTeX.Types (Macro)
|
||||||
|
|
||||||
-- | This is used to delay evaluation until all relevant information has been
|
-- | This is used to delay evaluation until all relevant information has been
|
||||||
-- parsed and made available in the parser state.
|
-- parsed and made available in the parser state.
|
||||||
|
|
|
@ -31,21 +31,23 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
Conversion from reStructuredText to 'Pandoc' document.
|
Conversion from reStructuredText to 'Pandoc' document.
|
||||||
-}
|
-}
|
||||||
module Text.Pandoc.Readers.RST ( readRST ) where
|
module Text.Pandoc.Readers.RST ( readRST ) where
|
||||||
import Control.Monad (guard, liftM, mzero, when, forM_, mplus)
|
import Control.Monad (forM_, guard, liftM, mplus, mzero, when)
|
||||||
import Control.Monad.Identity (Identity(..))
|
|
||||||
import Control.Monad.Except (throwError)
|
import Control.Monad.Except (throwError)
|
||||||
|
import Control.Monad.Identity (Identity (..))
|
||||||
import Data.Char (isHexDigit, isSpace, toLower, toUpper)
|
import Data.Char (isHexDigit, isSpace, toLower, toUpper)
|
||||||
import Data.List (deleteFirstsBy, findIndex, intercalate, isInfixOf,
|
import Data.List (deleteFirstsBy, findIndex, intercalate, isInfixOf, isSuffixOf,
|
||||||
isSuffixOf, nub, sort, transpose, union)
|
nub, sort, transpose, union)
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
import Data.Maybe (fromMaybe, isJust)
|
import Data.Maybe (fromMaybe, isJust)
|
||||||
import Data.Monoid ((<>))
|
import Data.Monoid ((<>))
|
||||||
import Data.Sequence (ViewR (..), viewr)
|
import Data.Sequence (ViewR (..), viewr)
|
||||||
|
import Data.Text (Text)
|
||||||
|
import qualified Data.Text as T
|
||||||
import Text.Pandoc.Builder (fromList, setMeta)
|
import Text.Pandoc.Builder (fromList, setMeta)
|
||||||
import Text.Pandoc.Builder (Blocks, Inlines, trimInlines)
|
import Text.Pandoc.Builder (Blocks, Inlines, trimInlines)
|
||||||
import qualified Text.Pandoc.Builder as B
|
import qualified Text.Pandoc.Builder as B
|
||||||
import Text.Pandoc.Class (PandocMonad, readFileFromDirs, fetchItem)
|
import Text.Pandoc.Class (PandocMonad, fetchItem, readFileFromDirs)
|
||||||
import Text.Pandoc.CSV (CSVOptions(..), defaultCSVOptions, parseCSV)
|
import Text.Pandoc.CSV (CSVOptions (..), defaultCSVOptions, parseCSV)
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Error
|
import Text.Pandoc.Error
|
||||||
import Text.Pandoc.ImageSize (lengthToDim, scaleDimension)
|
import Text.Pandoc.ImageSize (lengthToDim, scaleDimension)
|
||||||
|
@ -55,8 +57,6 @@ import Text.Pandoc.Parsing
|
||||||
import Text.Pandoc.Shared
|
import Text.Pandoc.Shared
|
||||||
import qualified Text.Pandoc.UTF8 as UTF8
|
import qualified Text.Pandoc.UTF8 as UTF8
|
||||||
import Text.Printf (printf)
|
import Text.Printf (printf)
|
||||||
import Data.Text (Text)
|
|
||||||
import qualified Data.Text as T
|
|
||||||
|
|
||||||
-- TODO:
|
-- TODO:
|
||||||
-- [ ] .. parsed-literal
|
-- [ ] .. parsed-literal
|
||||||
|
@ -149,10 +149,10 @@ metaFromDefList ds meta = adjustAuthors $ foldr f meta ds
|
||||||
splitOnSemi . concatMap factorSemi
|
splitOnSemi . concatMap factorSemi
|
||||||
normalizeSpaces = reverse . dropWhile isSp . reverse .
|
normalizeSpaces = reverse . dropWhile isSp . reverse .
|
||||||
dropWhile isSp
|
dropWhile isSp
|
||||||
isSp Space = True
|
isSp Space = True
|
||||||
isSp SoftBreak = True
|
isSp SoftBreak = True
|
||||||
isSp LineBreak = True
|
isSp LineBreak = True
|
||||||
isSp _ = False
|
isSp _ = False
|
||||||
splitOnSemi = splitBy (==Str ";")
|
splitOnSemi = splitBy (==Str ";")
|
||||||
factorSemi (Str []) = []
|
factorSemi (Str []) = []
|
||||||
factorSemi (Str s) = case break (==';') s of
|
factorSemi (Str s) = case break (==';') s of
|
||||||
|
@ -817,9 +817,9 @@ listTableDirective top fields body = do
|
||||||
headerRow
|
headerRow
|
||||||
bodyRows
|
bodyRows
|
||||||
where takeRows [BulletList rows] = map takeCells rows
|
where takeRows [BulletList rows] = map takeCells rows
|
||||||
takeRows _ = []
|
takeRows _ = []
|
||||||
takeCells [BulletList cells] = map B.fromList cells
|
takeCells [BulletList cells] = map B.fromList cells
|
||||||
takeCells _ = []
|
takeCells _ = []
|
||||||
normWidths ws = map (/ max 1 (sum ws)) ws
|
normWidths ws = map (/ max 1 (sum ws)) ws
|
||||||
|
|
||||||
csvTableDirective :: PandocMonad m
|
csvTableDirective :: PandocMonad m
|
||||||
|
@ -829,19 +829,19 @@ csvTableDirective top fields rawcsv = do
|
||||||
let explicitHeader = trim <$> lookup "header" fields
|
let explicitHeader = trim <$> lookup "header" fields
|
||||||
let opts = defaultCSVOptions{
|
let opts = defaultCSVOptions{
|
||||||
csvDelim = case trim <$> lookup "delim" fields of
|
csvDelim = case trim <$> lookup "delim" fields of
|
||||||
Just "tab" -> '\t'
|
Just "tab" -> '\t'
|
||||||
Just "space" -> ' '
|
Just "space" -> ' '
|
||||||
Just [c] -> c
|
Just [c] -> c
|
||||||
_ -> ','
|
_ -> ','
|
||||||
, csvQuote = case trim <$> lookup "quote" fields of
|
, csvQuote = case trim <$> lookup "quote" fields of
|
||||||
Just [c] -> c
|
Just [c] -> c
|
||||||
_ -> '"'
|
_ -> '"'
|
||||||
, csvEscape = case trim <$> lookup "escape" fields of
|
, csvEscape = case trim <$> lookup "escape" fields of
|
||||||
Just [c] -> Just c
|
Just [c] -> Just c
|
||||||
_ -> Nothing
|
_ -> Nothing
|
||||||
, csvKeepSpace = case trim <$> lookup "keepspace" fields of
|
, csvKeepSpace = case trim <$> lookup "keepspace" fields of
|
||||||
Just "true" -> True
|
Just "true" -> True
|
||||||
_ -> False
|
_ -> False
|
||||||
}
|
}
|
||||||
let headerRowsNum = fromMaybe (case explicitHeader of
|
let headerRowsNum = fromMaybe (case explicitHeader of
|
||||||
Just _ -> 1 :: Int
|
Just _ -> 1 :: Int
|
||||||
|
@ -854,7 +854,7 @@ csvTableDirective top fields rawcsv = do
|
||||||
return $ UTF8.toString bs
|
return $ UTF8.toString bs
|
||||||
Nothing -> return rawcsv
|
Nothing -> return rawcsv
|
||||||
let res = parseCSV opts (T.pack $ case explicitHeader of
|
let res = parseCSV opts (T.pack $ case explicitHeader of
|
||||||
Just h -> h ++ "\n" ++ rawcsv'
|
Just h -> h ++ "\n" ++ rawcsv'
|
||||||
Nothing -> rawcsv')
|
Nothing -> rawcsv')
|
||||||
case res of
|
case res of
|
||||||
Left e -> do
|
Left e -> do
|
||||||
|
|
|
@ -40,17 +40,17 @@ import Control.Monad.Except (throwError)
|
||||||
import Data.Char (isAlphaNum)
|
import Data.Char (isAlphaNum)
|
||||||
import qualified Data.Foldable as F
|
import qualified Data.Foldable as F
|
||||||
import Data.Maybe (fromMaybe)
|
import Data.Maybe (fromMaybe)
|
||||||
|
import Data.Text (Text)
|
||||||
|
import qualified Data.Text as T
|
||||||
import Text.HTML.TagSoup
|
import Text.HTML.TagSoup
|
||||||
import qualified Text.Pandoc.Builder as B
|
import qualified Text.Pandoc.Builder as B
|
||||||
import Text.Pandoc.Class (PandocMonad(..))
|
import Text.Pandoc.Class (PandocMonad (..))
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Parsing hiding (enclosed, nested)
|
import Text.Pandoc.Parsing hiding (enclosed, nested)
|
||||||
import Text.Pandoc.Readers.HTML (htmlTag, isCommentTag)
|
import Text.Pandoc.Readers.HTML (htmlTag, isCommentTag)
|
||||||
import Text.Pandoc.XML (fromEntities)
|
|
||||||
import Text.Pandoc.Shared (crFilter)
|
import Text.Pandoc.Shared (crFilter)
|
||||||
import Data.Text (Text)
|
import Text.Pandoc.XML (fromEntities)
|
||||||
import qualified Data.Text as T
|
|
||||||
|
|
||||||
-- | Read twiki from an input string and return a Pandoc document.
|
-- | Read twiki from an input string and return a Pandoc document.
|
||||||
readTWiki :: PandocMonad m
|
readTWiki :: PandocMonad m
|
||||||
|
|
|
@ -57,20 +57,20 @@ import Control.Monad.Except (throwError)
|
||||||
import Data.Char (digitToInt, isUpper)
|
import Data.Char (digitToInt, isUpper)
|
||||||
import Data.List (intercalate, intersperse, transpose)
|
import Data.List (intercalate, intersperse, transpose)
|
||||||
import Data.Monoid ((<>))
|
import Data.Monoid ((<>))
|
||||||
|
import Data.Text (Text)
|
||||||
|
import qualified Data.Text as T
|
||||||
import Text.HTML.TagSoup (Tag (..), fromAttrib)
|
import Text.HTML.TagSoup (Tag (..), fromAttrib)
|
||||||
import Text.HTML.TagSoup.Match
|
import Text.HTML.TagSoup.Match
|
||||||
import Text.Pandoc.Builder (Blocks, Inlines, trimInlines)
|
import Text.Pandoc.Builder (Blocks, Inlines, trimInlines)
|
||||||
import qualified Text.Pandoc.Builder as B
|
import qualified Text.Pandoc.Builder as B
|
||||||
import Text.Pandoc.Class (PandocMonad(..))
|
import Text.Pandoc.Class (PandocMonad (..))
|
||||||
import Text.Pandoc.CSS
|
import Text.Pandoc.CSS
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Parsing
|
import Text.Pandoc.Parsing
|
||||||
import Text.Pandoc.Readers.HTML (htmlTag, isBlockTag, isInlineTag)
|
import Text.Pandoc.Readers.HTML (htmlTag, isBlockTag, isInlineTag)
|
||||||
import Text.Pandoc.Readers.LaTeX (rawLaTeXBlock, rawLaTeXInline)
|
import Text.Pandoc.Readers.LaTeX (rawLaTeXBlock, rawLaTeXInline)
|
||||||
import Text.Pandoc.Shared (trim, crFilter, underlineSpan)
|
import Text.Pandoc.Shared (crFilter, trim, underlineSpan)
|
||||||
import Data.Text (Text)
|
|
||||||
import qualified Data.Text as T
|
|
||||||
|
|
||||||
-- | Parse a Textile text and return a Pandoc document.
|
-- | Parse a Textile text and return a Pandoc document.
|
||||||
readTextile :: PandocMonad m
|
readTextile :: PandocMonad m
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{-# LANGUAGE RelaxedPolyRec, FlexibleInstances, TypeSynonymInstances #-}
|
{-# LANGUAGE FlexibleContexts #-}
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
{-# LANGUAGE FlexibleInstances #-}
|
||||||
{-# LANGUAGE FlexibleContexts #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
{-# LANGUAGE RelaxedPolyRec #-}
|
||||||
|
{-# LANGUAGE TypeSynonymInstances #-}
|
||||||
|
|
||||||
{- |
|
{- |
|
||||||
Module : Text.Pandoc.Readers.TikiWiki
|
Module : Text.Pandoc.Readers.TikiWiki
|
||||||
|
@ -19,20 +21,20 @@ module Text.Pandoc.Readers.TikiWiki ( readTikiWiki
|
||||||
|
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import Control.Monad.Except (throwError)
|
import Control.Monad.Except (throwError)
|
||||||
import Text.Pandoc.Definition
|
|
||||||
import qualified Text.Pandoc.Builder as B
|
|
||||||
import Text.Pandoc.Options
|
|
||||||
import Text.Pandoc.Parsing hiding (enclosed, nested)
|
|
||||||
import Text.Printf (printf)
|
|
||||||
import Text.Pandoc.XML (fromEntities)
|
|
||||||
import Text.Pandoc.Class (PandocMonad(..), CommonState(..))
|
|
||||||
import Text.Pandoc.Shared (crFilter)
|
|
||||||
import Text.Pandoc.Logging (Verbosity(..))
|
|
||||||
import Data.Maybe (fromMaybe)
|
|
||||||
import Data.List (intercalate)
|
|
||||||
import qualified Data.Foldable as F
|
import qualified Data.Foldable as F
|
||||||
|
import Data.List (intercalate)
|
||||||
|
import Data.Maybe (fromMaybe)
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
|
import qualified Text.Pandoc.Builder as B
|
||||||
|
import Text.Pandoc.Class (CommonState (..), PandocMonad (..))
|
||||||
|
import Text.Pandoc.Definition
|
||||||
|
import Text.Pandoc.Logging (Verbosity (..))
|
||||||
|
import Text.Pandoc.Options
|
||||||
|
import Text.Pandoc.Parsing hiding (enclosed, nested)
|
||||||
|
import Text.Pandoc.Shared (crFilter)
|
||||||
|
import Text.Pandoc.XML (fromEntities)
|
||||||
|
import Text.Printf (printf)
|
||||||
|
|
||||||
-- | Read TikiWiki from an input string and return a Pandoc document.
|
-- | Read TikiWiki from an input string and return a Pandoc document.
|
||||||
readTikiWiki :: PandocMonad m
|
readTikiWiki :: PandocMonad m
|
||||||
|
@ -129,9 +131,9 @@ header = tryMsg "header" $ do
|
||||||
|
|
||||||
tableRow :: PandocMonad m => TikiWikiParser m [B.Blocks]
|
tableRow :: PandocMonad m => TikiWikiParser m [B.Blocks]
|
||||||
tableRow = try $ do
|
tableRow = try $ do
|
||||||
-- row <- sepBy1 (many1Till inline $ oneOf "\n|") (try $ string "|" <* notFollowedBy (oneOf "|\n"))
|
-- row <- sepBy1 (many1Till inline $ oneOf "\n|") (try $ string "|" <* notFollowedBy (oneOf "|\n"))
|
||||||
-- return $ map (B.plain . mconcat) row
|
-- return $ map (B.plain . mconcat) row
|
||||||
row <- sepBy1 ((many1 $ noneOf "\n|") >>= parseColumn) (try $ string "|" <* notFollowedBy (oneOf "|\n"))
|
row <- sepBy1 ((many1 $ noneOf "\n|") >>= parseColumn) (try $ string "|" <* notFollowedBy (oneOf "|\n"))
|
||||||
return $ map B.plain row
|
return $ map B.plain row
|
||||||
where
|
where
|
||||||
parseColumn x = do
|
parseColumn x = do
|
||||||
|
@ -155,7 +157,7 @@ tableRow = try $ do
|
||||||
-- || Orange | Apple | more
|
-- || Orange | Apple | more
|
||||||
-- Bread | Pie | more
|
-- Bread | Pie | more
|
||||||
-- Butter | Ice cream | and more ||
|
-- Butter | Ice cream | and more ||
|
||||||
--
|
--
|
||||||
table :: PandocMonad m => TikiWikiParser m B.Blocks
|
table :: PandocMonad m => TikiWikiParser m B.Blocks
|
||||||
table = try $ do
|
table = try $ do
|
||||||
string "||"
|
string "||"
|
||||||
|
@ -233,8 +235,8 @@ fixListNesting :: [B.Blocks] -> [B.Blocks]
|
||||||
fixListNesting [] = []
|
fixListNesting [] = []
|
||||||
fixListNesting (first:[]) = [recurseOnList first]
|
fixListNesting (first:[]) = [recurseOnList first]
|
||||||
-- fixListNesting nestall | trace ("\n\nfixListNesting: " ++ (show nestall)) False = undefined
|
-- fixListNesting nestall | trace ("\n\nfixListNesting: " ++ (show nestall)) False = undefined
|
||||||
-- fixListNesting nestall@(first:second:rest) =
|
-- fixListNesting nestall@(first:second:rest) =
|
||||||
fixListNesting (first:second:rest) =
|
fixListNesting (first:second:rest) =
|
||||||
let secondBlock = head $ B.toList second in
|
let secondBlock = head $ B.toList second in
|
||||||
case secondBlock of
|
case secondBlock of
|
||||||
BulletList _ -> fixListNesting $ [(mappend (recurseOnList first) (recurseOnList second))] ++ rest
|
BulletList _ -> fixListNesting $ [(mappend (recurseOnList first) (recurseOnList second))] ++ rest
|
||||||
|
@ -300,8 +302,8 @@ listWrap upperLN curLN retTree =
|
||||||
retTree
|
retTree
|
||||||
else
|
else
|
||||||
case lntype curLN of
|
case lntype curLN of
|
||||||
None -> []
|
None -> []
|
||||||
Bullet -> [B.bulletList retTree]
|
Bullet -> [B.bulletList retTree]
|
||||||
Numbered -> [B.orderedList retTree]
|
Numbered -> [B.orderedList retTree]
|
||||||
|
|
||||||
listItem :: PandocMonad m => TikiWikiParser m (ListNesting, B.Blocks)
|
listItem :: PandocMonad m => TikiWikiParser m (ListNesting, B.Blocks)
|
||||||
|
@ -418,7 +420,7 @@ whitespace = (lb <|> regsp) >>= return
|
||||||
-- for this
|
-- for this
|
||||||
nbsp :: PandocMonad m => TikiWikiParser m B.Inlines
|
nbsp :: PandocMonad m => TikiWikiParser m B.Inlines
|
||||||
nbsp = try $ do
|
nbsp = try $ do
|
||||||
string "~hs~"
|
string "~hs~"
|
||||||
return $ B.str " NOT SUPPORTED BEGIN: ~hs~ (non-breaking space) :END "
|
return $ B.str " NOT SUPPORTED BEGIN: ~hs~ (non-breaking space) :END "
|
||||||
|
|
||||||
-- UNSUPPORTED, as the desired behaviour (that the data be
|
-- UNSUPPORTED, as the desired behaviour (that the data be
|
||||||
|
@ -426,7 +428,7 @@ nbsp = try $ do
|
||||||
-- silently throwing data out seemed bad.
|
-- silently throwing data out seemed bad.
|
||||||
htmlComment :: PandocMonad m => TikiWikiParser m B.Inlines
|
htmlComment :: PandocMonad m => TikiWikiParser m B.Inlines
|
||||||
htmlComment = try $ do
|
htmlComment = try $ do
|
||||||
string "~hc~"
|
string "~hc~"
|
||||||
inner <- many1 $ noneOf "~"
|
inner <- many1 $ noneOf "~"
|
||||||
string "~/hc~"
|
string "~/hc~"
|
||||||
return $ B.str $ " NOT SUPPORTED: ~hc~ (html comment opener) BEGIN: " ++ inner ++ " ~/hc~ :END "
|
return $ B.str $ " NOT SUPPORTED: ~hc~ (html comment opener) BEGIN: " ++ inner ++ " ~/hc~ :END "
|
||||||
|
|
|
@ -32,26 +32,27 @@ module Text.Pandoc.Readers.Txt2Tags ( readTxt2Tags
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
|
import Control.Monad (guard, void, when)
|
||||||
|
import Control.Monad.Except (catchError, throwError)
|
||||||
|
import Control.Monad.Reader (Reader, asks, runReader)
|
||||||
import Data.Char (toLower)
|
import Data.Char (toLower)
|
||||||
|
import Data.Default
|
||||||
import Data.List (intercalate, intersperse, transpose)
|
import Data.List (intercalate, intersperse, transpose)
|
||||||
import Data.Maybe (fromMaybe)
|
import Data.Maybe (fromMaybe)
|
||||||
import Data.Monoid ((<>))
|
import Data.Monoid ((<>))
|
||||||
import Text.Pandoc.Builder (Blocks, Inlines, trimInlines)
|
|
||||||
import qualified Text.Pandoc.Builder as B
|
|
||||||
import Text.Pandoc.Definition
|
|
||||||
import Text.Pandoc.Options
|
|
||||||
import Text.Pandoc.Parsing hiding (space, spaces, uri)
|
|
||||||
import Text.Pandoc.Shared (compactify, compactifyDL, escapeURI, crFilter, underlineSpan)
|
|
||||||
import Control.Monad (guard, void, when)
|
|
||||||
import Control.Monad.Reader (Reader, asks, runReader)
|
|
||||||
import Data.Default
|
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Control.Monad.Except (catchError, throwError)
|
|
||||||
import Data.Time.Format (formatTime)
|
import Data.Time.Format (formatTime)
|
||||||
|
import Text.Pandoc.Builder (Blocks, Inlines, trimInlines)
|
||||||
|
import qualified Text.Pandoc.Builder as B
|
||||||
import Text.Pandoc.Class (PandocMonad)
|
import Text.Pandoc.Class (PandocMonad)
|
||||||
import qualified Text.Pandoc.Class as P
|
import qualified Text.Pandoc.Class as P
|
||||||
import Text.Pandoc.Compat.Time (defaultTimeLocale)
|
import Text.Pandoc.Compat.Time (defaultTimeLocale)
|
||||||
|
import Text.Pandoc.Definition
|
||||||
|
import Text.Pandoc.Options
|
||||||
|
import Text.Pandoc.Parsing hiding (space, spaces, uri)
|
||||||
|
import Text.Pandoc.Shared (compactify, compactifyDL, crFilter, escapeURI,
|
||||||
|
underlineSpan)
|
||||||
|
|
||||||
type T2T = ParserT String ParserState (Reader T2TMeta)
|
type T2T = ParserT String ParserState (Reader T2TMeta)
|
||||||
|
|
||||||
|
|
|
@ -63,36 +63,41 @@ Conversion of vimwiki text to 'Pandoc' document.
|
||||||
|
|
||||||
module Text.Pandoc.Readers.Vimwiki ( readVimwiki
|
module Text.Pandoc.Readers.Vimwiki ( readVimwiki
|
||||||
) where
|
) where
|
||||||
import Control.Monad.Except (throwError)
|
|
||||||
import Control.Monad (guard)
|
import Control.Monad (guard)
|
||||||
|
import Control.Monad.Except (throwError)
|
||||||
import Data.Default
|
import Data.Default
|
||||||
|
import Data.List (isInfixOf, isPrefixOf)
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.Monoid ((<>))
|
import Data.Monoid ((<>))
|
||||||
import Data.List (isInfixOf, isPrefixOf)
|
|
||||||
import Data.Text (Text, unpack)
|
import Data.Text (Text, unpack)
|
||||||
import Text.Pandoc.Builder (Blocks, Inlines, trimInlines, fromList, toList)
|
import Text.Pandoc.Builder (Blocks, Inlines, fromList, toList, trimInlines)
|
||||||
import qualified Text.Pandoc.Builder
|
import qualified Text.Pandoc.Builder as B (blockQuote, bulletList, code,
|
||||||
as B (headerWith, str, space, strong, emph, strikeout, code, link, image,
|
codeBlockWith, definitionList,
|
||||||
spanWith, para, horizontalRule, blockQuote, bulletList, plain,
|
displayMath, divWith, emph,
|
||||||
orderedList, simpleTable, softbreak, codeBlockWith, imageWith, divWith,
|
headerWith, horizontalRule, image,
|
||||||
setMeta, definitionList, superscript, subscript, displayMath,
|
imageWith, link, math, orderedList,
|
||||||
math)
|
para, plain, setMeta, simpleTable,
|
||||||
import Text.Pandoc.Class (PandocMonad(..))
|
softbreak, space, spanWith, str,
|
||||||
import Text.Pandoc.Definition (Pandoc(..), Inline(Space),
|
strikeout, strong, subscript,
|
||||||
Block(BulletList, OrderedList), Attr, nullMeta, Meta, ListNumberStyle(..),
|
superscript)
|
||||||
ListNumberDelim(..))
|
import Text.Pandoc.Class (PandocMonad (..))
|
||||||
|
import Text.Pandoc.Definition (Attr, Block (BulletList, OrderedList),
|
||||||
|
Inline (Space), ListNumberDelim (..),
|
||||||
|
ListNumberStyle (..), Meta, Pandoc (..),
|
||||||
|
nullMeta)
|
||||||
import Text.Pandoc.Options (ReaderOptions)
|
import Text.Pandoc.Options (ReaderOptions)
|
||||||
import Text.Pandoc.Parsing (readWithM, ParserT, stateOptions, ParserState,
|
import Text.Pandoc.Parsing (F, ParserState, ParserT, blanklines, emailAddress,
|
||||||
stateMeta', blanklines, registerHeader, spaceChar, emailAddress, uri, F, runF,
|
many1Till, orderedListMarker, readWithM,
|
||||||
orderedListMarker, many1Till)
|
registerHeader, runF, spaceChar, stateMeta',
|
||||||
import Text.Pandoc.Shared (splitBy, stripFirstAndLast, stringify, crFilter)
|
stateOptions, uri)
|
||||||
import Text.Parsec.Char (spaces, char, anyChar, newline, string, noneOf,
|
import Text.Pandoc.Shared (crFilter, splitBy, stringify, stripFirstAndLast)
|
||||||
alphaNum)
|
import Text.Parsec.Char (alphaNum, anyChar, char, newline, noneOf, spaces,
|
||||||
import Text.Parsec.Combinator (eof, choice, many1, manyTill, count, skipMany1,
|
string)
|
||||||
notFollowedBy, option)
|
|
||||||
import Text.Parsec.Prim (many, try, updateState, getState)
|
|
||||||
import Text.Parsec.Char (oneOf, space)
|
import Text.Parsec.Char (oneOf, space)
|
||||||
import Text.Parsec.Combinator (lookAhead, between)
|
import Text.Parsec.Combinator (choice, count, eof, many1, manyTill,
|
||||||
|
notFollowedBy, option, skipMany1)
|
||||||
|
import Text.Parsec.Combinator (between, lookAhead)
|
||||||
|
import Text.Parsec.Prim (getState, many, try, updateState)
|
||||||
import Text.Parsec.Prim ((<|>))
|
import Text.Parsec.Prim ((<|>))
|
||||||
|
|
||||||
readVimwiki :: PandocMonad m => ReaderOptions -> Text -> m Pandoc
|
readVimwiki :: PandocMonad m => ReaderOptions -> Text -> m Pandoc
|
||||||
|
@ -100,7 +105,7 @@ readVimwiki opts s = do
|
||||||
res <- readWithM parseVimwiki def{ stateOptions = opts }
|
res <- readWithM parseVimwiki def{ stateOptions = opts }
|
||||||
(unpack (crFilter s))
|
(unpack (crFilter s))
|
||||||
case res of
|
case res of
|
||||||
Left e -> throwError e
|
Left e -> throwError e
|
||||||
Right result -> return result
|
Right result -> return result
|
||||||
|
|
||||||
type VwParser = ParserT [Char] ParserState
|
type VwParser = ParserT [Char] ParserState
|
||||||
|
@ -278,19 +283,19 @@ displayMath = try $ do
|
||||||
|
|
||||||
mathTagLaTeX :: String -> String
|
mathTagLaTeX :: String -> String
|
||||||
mathTagLaTeX s = case s of
|
mathTagLaTeX s = case s of
|
||||||
"equation" -> ""
|
"equation" -> ""
|
||||||
"equation*" -> ""
|
"equation*" -> ""
|
||||||
"gather" -> "gathered"
|
"gather" -> "gathered"
|
||||||
"gather*" -> "gathered"
|
"gather*" -> "gathered"
|
||||||
"multline" -> "gathered"
|
"multline" -> "gathered"
|
||||||
"multline*" -> "gathered"
|
"multline*" -> "gathered"
|
||||||
"eqnarray" -> "aligned"
|
"eqnarray" -> "aligned"
|
||||||
"eqnarray*" -> "aligned"
|
"eqnarray*" -> "aligned"
|
||||||
"align" -> "aligned"
|
"align" -> "aligned"
|
||||||
"align*" -> "aligned"
|
"align*" -> "aligned"
|
||||||
"alignat" -> "aligned"
|
"alignat" -> "aligned"
|
||||||
"alignat*" -> "aligned"
|
"alignat*" -> "aligned"
|
||||||
_ -> s
|
_ -> s
|
||||||
|
|
||||||
|
|
||||||
mixedList :: PandocMonad m => VwParser m Blocks
|
mixedList :: PandocMonad m => VwParser m Blocks
|
||||||
|
|
|
@ -35,18 +35,18 @@ import Codec.Compression.GZip as Gzip
|
||||||
import Control.Applicative ((<|>))
|
import Control.Applicative ((<|>))
|
||||||
import Control.Monad.Except (throwError)
|
import Control.Monad.Except (throwError)
|
||||||
import Control.Monad.Trans (lift)
|
import Control.Monad.Trans (lift)
|
||||||
import Data.Monoid ((<>))
|
|
||||||
import Data.ByteString (ByteString)
|
import Data.ByteString (ByteString)
|
||||||
import Data.ByteString.Base64
|
import Data.ByteString.Base64
|
||||||
import qualified Data.ByteString.Char8 as B
|
import qualified Data.ByteString.Char8 as B
|
||||||
import qualified Data.ByteString.Lazy as L
|
import qualified Data.ByteString.Lazy as L
|
||||||
import Data.Char (isAlphaNum, isAscii, toLower)
|
import Data.Char (isAlphaNum, isAscii, toLower)
|
||||||
import Data.List (isPrefixOf)
|
import Data.List (isPrefixOf)
|
||||||
|
import Data.Monoid ((<>))
|
||||||
import Network.URI (escapeURIString)
|
import Network.URI (escapeURIString)
|
||||||
import System.FilePath (takeDirectory, takeExtension, (</>))
|
import System.FilePath (takeDirectory, takeExtension, (</>))
|
||||||
import Text.HTML.TagSoup
|
import Text.HTML.TagSoup
|
||||||
import Text.Pandoc.Class (PandocMonad (..), fetchItem, report,
|
import Text.Pandoc.Class (PandocMonad (..), fetchItem, getInputFiles, report,
|
||||||
getInputFiles, setInputFiles)
|
setInputFiles)
|
||||||
import Text.Pandoc.Error
|
import Text.Pandoc.Error
|
||||||
import Text.Pandoc.Logging
|
import Text.Pandoc.Logging
|
||||||
import Text.Pandoc.MIME (MimeType)
|
import Text.Pandoc.MIME (MimeType)
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
{-# LANGUAGE DeriveDataTypeable, CPP, MultiParamTypeClasses,
|
{-# LANGUAGE CPP #-}
|
||||||
FlexibleContexts, ScopedTypeVariables, PatternGuards,
|
{-# LANGUAGE DeriveDataTypeable #-}
|
||||||
ViewPatterns #-}
|
{-# LANGUAGE FlexibleContexts #-}
|
||||||
|
{-# LANGUAGE MultiParamTypeClasses #-}
|
||||||
|
{-# LANGUAGE PatternGuards #-}
|
||||||
|
{-# LANGUAGE ScopedTypeVariables #-}
|
||||||
|
{-# LANGUAGE ViewPatterns #-}
|
||||||
{-
|
{-
|
||||||
Copyright (C) 2006-2017 John MacFarlane <jgm@berkeley.edu>
|
Copyright (C) 2006-2017 John MacFarlane <jgm@berkeley.edu>
|
||||||
|
|
||||||
|
@ -94,37 +98,37 @@ module Text.Pandoc.Shared (
|
||||||
pandocVersion
|
pandocVersion
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Text.Pandoc.Definition
|
|
||||||
import Text.Pandoc.Walk
|
|
||||||
import Text.Pandoc.Builder (Inlines, Blocks, ToMetaValue(..))
|
|
||||||
import qualified Text.Pandoc.Builder as B
|
|
||||||
import Data.Char ( toLower, isLower, isUpper, isAlpha,
|
|
||||||
isLetter, isDigit, isSpace )
|
|
||||||
import Data.List ( find, stripPrefix, intercalate )
|
|
||||||
import Data.Maybe (mapMaybe)
|
|
||||||
import Data.Version ( showVersion )
|
|
||||||
import qualified Data.Map as M
|
|
||||||
import Network.URI ( URI(uriScheme), escapeURIString, parseURI )
|
|
||||||
import qualified Data.Set as Set
|
|
||||||
import System.Directory
|
|
||||||
import System.FilePath (splitDirectories, isPathSeparator)
|
|
||||||
import qualified System.FilePath.Posix as Posix
|
|
||||||
import Data.Generics (Typeable, Data)
|
|
||||||
import qualified Control.Monad.State.Strict as S
|
|
||||||
import qualified Control.Exception as E
|
|
||||||
import Control.Monad (msum, unless, MonadPlus(..))
|
|
||||||
import Text.Pandoc.Pretty (charWidth)
|
|
||||||
import Text.Pandoc.Generic (bottomUp)
|
|
||||||
import Text.Pandoc.Compat.Time
|
|
||||||
import System.IO.Temp
|
|
||||||
import Text.HTML.TagSoup (renderTagsOptions, RenderOptions(..), Tag(..),
|
|
||||||
renderOptions)
|
|
||||||
import Data.Monoid ((<>))
|
|
||||||
import Data.Sequence (ViewR(..), ViewL(..), viewl, viewr)
|
|
||||||
import qualified Data.Text as T
|
|
||||||
import qualified Data.ByteString.Lazy as BL
|
|
||||||
import Paths_pandoc (version)
|
|
||||||
import Codec.Archive.Zip
|
import Codec.Archive.Zip
|
||||||
|
import qualified Control.Exception as E
|
||||||
|
import Control.Monad (MonadPlus (..), msum, unless)
|
||||||
|
import qualified Control.Monad.State.Strict as S
|
||||||
|
import qualified Data.ByteString.Lazy as BL
|
||||||
|
import Data.Char (isAlpha, isDigit, isLetter, isLower, isSpace, isUpper,
|
||||||
|
toLower)
|
||||||
|
import Data.Generics (Data, Typeable)
|
||||||
|
import Data.List (find, intercalate, stripPrefix)
|
||||||
|
import qualified Data.Map as M
|
||||||
|
import Data.Maybe (mapMaybe)
|
||||||
|
import Data.Monoid ((<>))
|
||||||
|
import Data.Sequence (ViewL (..), ViewR (..), viewl, viewr)
|
||||||
|
import qualified Data.Set as Set
|
||||||
|
import qualified Data.Text as T
|
||||||
|
import Data.Version (showVersion)
|
||||||
|
import Network.URI (URI (uriScheme), escapeURIString, parseURI)
|
||||||
|
import Paths_pandoc (version)
|
||||||
|
import System.Directory
|
||||||
|
import System.FilePath (isPathSeparator, splitDirectories)
|
||||||
|
import qualified System.FilePath.Posix as Posix
|
||||||
|
import System.IO.Temp
|
||||||
|
import Text.HTML.TagSoup (RenderOptions (..), Tag (..), renderOptions,
|
||||||
|
renderTagsOptions)
|
||||||
|
import Text.Pandoc.Builder (Blocks, Inlines, ToMetaValue (..))
|
||||||
|
import qualified Text.Pandoc.Builder as B
|
||||||
|
import Text.Pandoc.Compat.Time
|
||||||
|
import Text.Pandoc.Definition
|
||||||
|
import Text.Pandoc.Generic (bottomUp)
|
||||||
|
import Text.Pandoc.Pretty (charWidth)
|
||||||
|
import Text.Pandoc.Walk
|
||||||
|
|
||||||
-- | Version number of pandoc library.
|
-- | Version number of pandoc library.
|
||||||
pandocVersion :: String
|
pandocVersion :: String
|
||||||
|
@ -192,8 +196,8 @@ escapeStringUsing :: [(Char, String)] -> String -> String
|
||||||
escapeStringUsing _ [] = ""
|
escapeStringUsing _ [] = ""
|
||||||
escapeStringUsing escapeTable (x:xs) =
|
escapeStringUsing escapeTable (x:xs) =
|
||||||
case (lookup x escapeTable) of
|
case (lookup x escapeTable) of
|
||||||
Just str -> str ++ rest
|
Just str -> str ++ rest
|
||||||
Nothing -> x:rest
|
Nothing -> x:rest
|
||||||
where rest = escapeStringUsing escapeTable xs
|
where rest = escapeStringUsing escapeTable xs
|
||||||
|
|
||||||
-- | Strip trailing newlines from string.
|
-- | Strip trailing newlines from string.
|
||||||
|
@ -279,7 +283,7 @@ normalizeDate s = fmap (formatTime defaultTimeLocale "%F")
|
||||||
(msum $ map (\fs -> parsetimeWith fs s >>= rejectBadYear) formats :: Maybe Day)
|
(msum $ map (\fs -> parsetimeWith fs s >>= rejectBadYear) formats :: Maybe Day)
|
||||||
where rejectBadYear day = case toGregorian day of
|
where rejectBadYear day = case toGregorian day of
|
||||||
(y, _, _) | y >= 1601 && y <= 9999 -> Just day
|
(y, _, _) | y >= 1601 && y <= 9999 -> Just day
|
||||||
_ -> Nothing
|
_ -> Nothing
|
||||||
parsetimeWith =
|
parsetimeWith =
|
||||||
#if MIN_VERSION_time(1,5,0)
|
#if MIN_VERSION_time(1,5,0)
|
||||||
parseTimeM True defaultTimeLocale
|
parseTimeM True defaultTimeLocale
|
||||||
|
@ -336,13 +340,13 @@ extractSpaces f is =
|
||||||
removeFormatting :: Walkable Inline a => a -> [Inline]
|
removeFormatting :: Walkable Inline a => a -> [Inline]
|
||||||
removeFormatting = query go . walk (deNote . deQuote)
|
removeFormatting = query go . walk (deNote . deQuote)
|
||||||
where go :: Inline -> [Inline]
|
where go :: Inline -> [Inline]
|
||||||
go (Str xs) = [Str xs]
|
go (Str xs) = [Str xs]
|
||||||
go Space = [Space]
|
go Space = [Space]
|
||||||
go SoftBreak = [SoftBreak]
|
go SoftBreak = [SoftBreak]
|
||||||
go (Code _ x) = [Str x]
|
go (Code _ x) = [Str x]
|
||||||
go (Math _ x) = [Str x]
|
go (Math _ x) = [Str x]
|
||||||
go LineBreak = [Space]
|
go LineBreak = [Space]
|
||||||
go _ = []
|
go _ = []
|
||||||
|
|
||||||
deNote :: Inline -> Inline
|
deNote :: Inline -> Inline
|
||||||
deNote (Note _) = Str ""
|
deNote (Note _) = Str ""
|
||||||
|
@ -361,14 +365,14 @@ deQuote x = x
|
||||||
stringify :: Walkable Inline a => a -> String
|
stringify :: Walkable Inline a => a -> String
|
||||||
stringify = query go . walk (deNote . deQuote)
|
stringify = query go . walk (deNote . deQuote)
|
||||||
where go :: Inline -> [Char]
|
where go :: Inline -> [Char]
|
||||||
go Space = " "
|
go Space = " "
|
||||||
go SoftBreak = " "
|
go SoftBreak = " "
|
||||||
go (Str x) = x
|
go (Str x) = x
|
||||||
go (Code _ x) = x
|
go (Code _ x) = x
|
||||||
go (Math _ x) = x
|
go (Math _ x) = x
|
||||||
go (RawInline (Format "html") ('<':'b':'r':_)) = " " -- see #2105
|
go (RawInline (Format "html") ('<':'b':'r':_)) = " " -- see #2105
|
||||||
go LineBreak = " "
|
go LineBreak = " "
|
||||||
go _ = ""
|
go _ = ""
|
||||||
|
|
||||||
-- | Bring all regular text in a pandoc structure to uppercase.
|
-- | Bring all regular text in a pandoc structure to uppercase.
|
||||||
--
|
--
|
||||||
|
@ -440,7 +444,7 @@ instance Walkable Inline Element where
|
||||||
ils' <- walkM f ils
|
ils' <- walkM f ils
|
||||||
elts' <- walkM f elts
|
elts' <- walkM f elts
|
||||||
return $ Sec lev nums attr ils' elts'
|
return $ Sec lev nums attr ils' elts'
|
||||||
query f (Blk x) = query f x
|
query f (Blk x) = query f x
|
||||||
query f (Sec _ _ _ ils elts) = query f ils <> query f elts
|
query f (Sec _ _ _ ils elts) = query f ils <> query f elts
|
||||||
|
|
||||||
instance Walkable Block Element where
|
instance Walkable Block Element where
|
||||||
|
@ -451,7 +455,7 @@ instance Walkable Block Element where
|
||||||
ils' <- walkM f ils
|
ils' <- walkM f ils
|
||||||
elts' <- walkM f elts
|
elts' <- walkM f elts
|
||||||
return $ Sec lev nums attr ils' elts'
|
return $ Sec lev nums attr ils' elts'
|
||||||
query f (Blk x) = query f x
|
query f (Blk x) = query f x
|
||||||
query f (Sec _ _ _ ils elts) = query f ils <> query f elts
|
query f (Sec _ _ _ ils elts) = query f ils <> query f elts
|
||||||
|
|
||||||
|
|
||||||
|
@ -464,8 +468,8 @@ inlineListToIdentifier =
|
||||||
map (nbspToSp . toLower) .
|
map (nbspToSp . toLower) .
|
||||||
filter (\c -> isLetter c || isDigit c || c `elem` "_-. ") .
|
filter (\c -> isLetter c || isDigit c || c `elem` "_-. ") .
|
||||||
stringify
|
stringify
|
||||||
where nbspToSp '\160' = ' '
|
where nbspToSp '\160' = ' '
|
||||||
nbspToSp x = x
|
nbspToSp x = x
|
||||||
|
|
||||||
-- | Convert list of Pandoc blocks into (hierarchical) list of Elements
|
-- | Convert list of Pandoc blocks into (hierarchical) list of Elements
|
||||||
hierarchicalize :: [Block] -> [Element]
|
hierarchicalize :: [Block] -> [Element]
|
||||||
|
@ -495,17 +499,17 @@ hierarchicalizeWithIds (x:rest) = do
|
||||||
return $ (Blk x) : rest'
|
return $ (Blk x) : rest'
|
||||||
|
|
||||||
headerLtEq :: Int -> Block -> Bool
|
headerLtEq :: Int -> Block -> Bool
|
||||||
headerLtEq level (Header l _ _) = l <= level
|
headerLtEq level (Header l _ _) = l <= level
|
||||||
headerLtEq level (Div ("",["references"],[]) (Header l _ _ : _)) = l <= level
|
headerLtEq level (Div ("",["references"],[]) (Header l _ _ : _)) = l <= level
|
||||||
headerLtEq _ _ = False
|
headerLtEq _ _ = False
|
||||||
|
|
||||||
-- | Generate a unique identifier from a list of inlines.
|
-- | Generate a unique identifier from a list of inlines.
|
||||||
-- Second argument is a list of already used identifiers.
|
-- Second argument is a list of already used identifiers.
|
||||||
uniqueIdent :: [Inline] -> Set.Set String -> String
|
uniqueIdent :: [Inline] -> Set.Set String -> String
|
||||||
uniqueIdent title' usedIdents
|
uniqueIdent title' usedIdents
|
||||||
= let baseIdent = case inlineListToIdentifier title' of
|
= let baseIdent = case inlineListToIdentifier title' of
|
||||||
"" -> "section"
|
"" -> "section"
|
||||||
x -> x
|
x -> x
|
||||||
numIdent n = baseIdent ++ "-" ++ show n
|
numIdent n = baseIdent ++ "-" ++ show n
|
||||||
in if baseIdent `Set.member` usedIdents
|
in if baseIdent `Set.member` usedIdents
|
||||||
then case find (\x -> not $ numIdent x `Set.member` usedIdents) ([1..60000] :: [Int]) of
|
then case find (\x -> not $ numIdent x `Set.member` usedIdents) ([1..60000] :: [Int]) of
|
||||||
|
@ -516,7 +520,7 @@ uniqueIdent title' usedIdents
|
||||||
-- | True if block is a Header block.
|
-- | True if block is a Header block.
|
||||||
isHeaderBlock :: Block -> Bool
|
isHeaderBlock :: Block -> Bool
|
||||||
isHeaderBlock (Header _ _ _) = True
|
isHeaderBlock (Header _ _ _) = True
|
||||||
isHeaderBlock _ = False
|
isHeaderBlock _ = False
|
||||||
|
|
||||||
-- | Shift header levels up or down.
|
-- | Shift header levels up or down.
|
||||||
headerShift :: Int -> Pandoc -> Pandoc
|
headerShift :: Int -> Pandoc -> Pandoc
|
||||||
|
@ -542,8 +546,8 @@ addMetaField key val (Meta meta) =
|
||||||
Meta $ M.insertWith combine key (toMetaValue val) meta
|
Meta $ M.insertWith combine key (toMetaValue val) meta
|
||||||
where combine newval (MetaList xs) = MetaList (xs ++ tolist newval)
|
where combine newval (MetaList xs) = MetaList (xs ++ tolist newval)
|
||||||
combine newval x = MetaList [x, newval]
|
combine newval x = MetaList [x, newval]
|
||||||
tolist (MetaList ys) = ys
|
tolist (MetaList ys) = ys
|
||||||
tolist y = [y]
|
tolist y = [y]
|
||||||
|
|
||||||
-- | Create 'Meta' from old-style title, authors, date. This is
|
-- | Create 'Meta' from old-style title, authors, date. This is
|
||||||
-- provided to ease the transition from the old API.
|
-- provided to ease the transition from the old API.
|
||||||
|
@ -599,7 +603,7 @@ inDirectory path action = E.bracket
|
||||||
--
|
--
|
||||||
|
|
||||||
mapLeft :: (a -> b) -> Either a c -> Either b c
|
mapLeft :: (a -> b) -> Either a c -> Either b c
|
||||||
mapLeft f (Left x) = Left (f x)
|
mapLeft f (Left x) = Left (f x)
|
||||||
mapLeft _ (Right x) = Right x
|
mapLeft _ (Right x) = Right x
|
||||||
|
|
||||||
-- | Remove intermediate "." and ".." directories from a path.
|
-- | Remove intermediate "." and ".." directories from a path.
|
||||||
|
@ -616,14 +620,14 @@ collapseFilePath = Posix.joinPath . reverse . foldl go [] . splitDirectories
|
||||||
where
|
where
|
||||||
go rs "." = rs
|
go rs "." = rs
|
||||||
go r@(p:rs) ".." = case p of
|
go r@(p:rs) ".." = case p of
|
||||||
".." -> ("..":r)
|
".." -> ("..":r)
|
||||||
(checkPathSeperator -> Just True) -> ("..":r)
|
(checkPathSeperator -> Just True) -> ("..":r)
|
||||||
_ -> rs
|
_ -> rs
|
||||||
go _ (checkPathSeperator -> Just True) = [[Posix.pathSeparator]]
|
go _ (checkPathSeperator -> Just True) = [[Posix.pathSeparator]]
|
||||||
go rs x = x:rs
|
go rs x = x:rs
|
||||||
isSingleton [] = Nothing
|
isSingleton [] = Nothing
|
||||||
isSingleton [x] = Just x
|
isSingleton [x] = Just x
|
||||||
isSingleton _ = Nothing
|
isSingleton _ = Nothing
|
||||||
checkPathSeperator = fmap isPathSeparator . isSingleton
|
checkPathSeperator = fmap isPathSeparator . isSingleton
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
|
@ -44,7 +44,7 @@ import qualified Data.Text as T
|
||||||
import System.FilePath ((<.>), (</>))
|
import System.FilePath ((<.>), (</>))
|
||||||
import Text.DocTemplates (Template, TemplateTarget, applyTemplate,
|
import Text.DocTemplates (Template, TemplateTarget, applyTemplate,
|
||||||
compileTemplate, renderTemplate, varListToJSON)
|
compileTemplate, renderTemplate, varListToJSON)
|
||||||
import Text.Pandoc.Class (readDataFile, PandocMonad)
|
import Text.Pandoc.Class (PandocMonad, readDataFile)
|
||||||
import Text.Pandoc.Error
|
import Text.Pandoc.Error
|
||||||
import qualified Text.Pandoc.UTF8 as UTF8
|
import qualified Text.Pandoc.UTF8 as UTF8
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{-# LANGUAGE DeriveGeneric #-}
|
{-# LANGUAGE DeriveGeneric #-}
|
||||||
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
|
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
|
||||||
{-
|
{-
|
||||||
Copyright (C) 2017 John MacFarlane <jgm@berkeley.edu>
|
Copyright (C) 2017 John MacFarlane <jgm@berkeley.edu>
|
||||||
|
@ -45,14 +45,14 @@ module Text.Pandoc.Translations (
|
||||||
, readTranslations
|
, readTranslations
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
import Data.Aeson.Types (typeMismatch)
|
||||||
import qualified Data.HashMap.Strict as HM
|
import qualified Data.HashMap.Strict as HM
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
import GHC.Generics (Generic)
|
|
||||||
import qualified Text.Pandoc.UTF8 as UTF8
|
|
||||||
import Data.Text as T
|
import Data.Text as T
|
||||||
import Text.Pandoc.Shared (safeRead)
|
|
||||||
import Data.Yaml as Yaml
|
import Data.Yaml as Yaml
|
||||||
import Data.Aeson.Types (typeMismatch)
|
import GHC.Generics (Generic)
|
||||||
|
import Text.Pandoc.Shared (safeRead)
|
||||||
|
import qualified Text.Pandoc.UTF8 as UTF8
|
||||||
|
|
||||||
data Term =
|
data Term =
|
||||||
Preface
|
Preface
|
||||||
|
|
|
@ -82,11 +82,13 @@ module Text.Pandoc.Writers
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Data.Aeson
|
import Data.Aeson
|
||||||
|
import qualified Data.ByteString.Lazy as BL
|
||||||
import Data.List (intercalate)
|
import Data.List (intercalate)
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import Text.Pandoc.Class
|
import Text.Pandoc.Class
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
|
import qualified Text.Pandoc.UTF8 as UTF8
|
||||||
import Text.Pandoc.Writers.AsciiDoc
|
import Text.Pandoc.Writers.AsciiDoc
|
||||||
import Text.Pandoc.Writers.CommonMark
|
import Text.Pandoc.Writers.CommonMark
|
||||||
import Text.Pandoc.Writers.ConTeXt
|
import Text.Pandoc.Writers.ConTeXt
|
||||||
|
@ -96,8 +98,8 @@ import Text.Pandoc.Writers.Docx
|
||||||
import Text.Pandoc.Writers.DokuWiki
|
import Text.Pandoc.Writers.DokuWiki
|
||||||
import Text.Pandoc.Writers.EPUB
|
import Text.Pandoc.Writers.EPUB
|
||||||
import Text.Pandoc.Writers.FB2
|
import Text.Pandoc.Writers.FB2
|
||||||
import Text.Pandoc.Writers.HTML
|
|
||||||
import Text.Pandoc.Writers.Haddock
|
import Text.Pandoc.Writers.Haddock
|
||||||
|
import Text.Pandoc.Writers.HTML
|
||||||
import Text.Pandoc.Writers.ICML
|
import Text.Pandoc.Writers.ICML
|
||||||
import Text.Pandoc.Writers.JATS
|
import Text.Pandoc.Writers.JATS
|
||||||
import Text.Pandoc.Writers.LaTeX
|
import Text.Pandoc.Writers.LaTeX
|
||||||
|
@ -108,8 +110,8 @@ import Text.Pandoc.Writers.Ms
|
||||||
import Text.Pandoc.Writers.Muse
|
import Text.Pandoc.Writers.Muse
|
||||||
import Text.Pandoc.Writers.Native
|
import Text.Pandoc.Writers.Native
|
||||||
import Text.Pandoc.Writers.ODT
|
import Text.Pandoc.Writers.ODT
|
||||||
import Text.Pandoc.Writers.OPML
|
|
||||||
import Text.Pandoc.Writers.OpenDocument
|
import Text.Pandoc.Writers.OpenDocument
|
||||||
|
import Text.Pandoc.Writers.OPML
|
||||||
import Text.Pandoc.Writers.Org
|
import Text.Pandoc.Writers.Org
|
||||||
import Text.Pandoc.Writers.RST
|
import Text.Pandoc.Writers.RST
|
||||||
import Text.Pandoc.Writers.RTF
|
import Text.Pandoc.Writers.RTF
|
||||||
|
@ -118,8 +120,6 @@ import Text.Pandoc.Writers.Texinfo
|
||||||
import Text.Pandoc.Writers.Textile
|
import Text.Pandoc.Writers.Textile
|
||||||
import Text.Pandoc.Writers.ZimWiki
|
import Text.Pandoc.Writers.ZimWiki
|
||||||
import Text.Parsec.Error
|
import Text.Parsec.Error
|
||||||
import qualified Text.Pandoc.UTF8 as UTF8
|
|
||||||
import qualified Data.ByteString.Lazy as BL
|
|
||||||
|
|
||||||
data Writer m = TextWriter (WriterOptions -> Pandoc -> m Text)
|
data Writer m = TextWriter (WriterOptions -> Pandoc -> m Text)
|
||||||
| ByteStringWriter (WriterOptions -> Pandoc -> m BL.ByteString)
|
| ByteStringWriter (WriterOptions -> Pandoc -> m BL.ByteString)
|
||||||
|
|
|
@ -35,8 +35,8 @@ module Text.Pandoc.Writers.CommonMark (writeCommonMark) where
|
||||||
import CMarkGFM
|
import CMarkGFM
|
||||||
import Control.Monad.State.Strict (State, get, modify, runState)
|
import Control.Monad.State.Strict (State, get, modify, runState)
|
||||||
import Data.Foldable (foldrM)
|
import Data.Foldable (foldrM)
|
||||||
import Data.Monoid (Any (..), (<>))
|
|
||||||
import Data.List (transpose)
|
import Data.List (transpose)
|
||||||
|
import Data.Monoid (Any (..), (<>))
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Text.Pandoc.Class (PandocMonad)
|
import Text.Pandoc.Class (PandocMonad)
|
||||||
|
@ -44,7 +44,7 @@ import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Shared (isTightList, linesToPara, substitute)
|
import Text.Pandoc.Shared (isTightList, linesToPara, substitute)
|
||||||
import Text.Pandoc.Templates (renderTemplate')
|
import Text.Pandoc.Templates (renderTemplate')
|
||||||
import Text.Pandoc.Walk (walkM, walk, query)
|
import Text.Pandoc.Walk (query, walk, walkM)
|
||||||
import Text.Pandoc.Writers.HTML (writeHtml5String)
|
import Text.Pandoc.Writers.HTML (writeHtml5String)
|
||||||
import Text.Pandoc.Writers.Shared
|
import Text.Pandoc.Writers.Shared
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ writeCommonMark opts (Pandoc meta blocks) = do
|
||||||
|
|
||||||
softBreakToSpace :: Inline -> Inline
|
softBreakToSpace :: Inline -> Inline
|
||||||
softBreakToSpace SoftBreak = Space
|
softBreakToSpace SoftBreak = Space
|
||||||
softBreakToSpace x = x
|
softBreakToSpace x = x
|
||||||
|
|
||||||
processNotes :: Inline -> State [[Block]] Inline
|
processNotes :: Inline -> State [[Block]] Inline
|
||||||
processNotes (Note bs) = do
|
processNotes (Note bs) = do
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
{-# LANGUAGE ScopedTypeVariables #-}
|
{-# LANGUAGE ScopedTypeVariables #-}
|
||||||
{-
|
{-
|
||||||
Copyright (C) 2007-2017 John MacFarlane <jgm@berkeley.edu>
|
Copyright (C) 2007-2017 John MacFarlane <jgm@berkeley.edu>
|
||||||
|
@ -38,9 +38,9 @@ import Data.Text (Text)
|
||||||
import Network.URI (unEscapeString)
|
import Network.URI (unEscapeString)
|
||||||
import Text.Pandoc.BCP47
|
import Text.Pandoc.BCP47
|
||||||
import Text.Pandoc.Class (PandocMonad, report, toLang)
|
import Text.Pandoc.Class (PandocMonad, report, toLang)
|
||||||
import Text.Pandoc.Logging
|
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.ImageSize
|
import Text.Pandoc.ImageSize
|
||||||
|
import Text.Pandoc.Logging
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Pretty
|
import Text.Pandoc.Pretty
|
||||||
import Text.Pandoc.Shared
|
import Text.Pandoc.Shared
|
||||||
|
@ -475,26 +475,26 @@ fromBCP47 mbs = fromBCP47' <$> toLang mbs
|
||||||
-- https://tools.ietf.org/html/bcp47#section-2.1
|
-- https://tools.ietf.org/html/bcp47#section-2.1
|
||||||
-- http://wiki.contextgarden.net/Language_Codes
|
-- http://wiki.contextgarden.net/Language_Codes
|
||||||
fromBCP47' :: Maybe Lang -> Maybe String
|
fromBCP47' :: Maybe Lang -> Maybe String
|
||||||
fromBCP47' (Just (Lang "ar" _ "SY" _) ) = Just "ar-sy"
|
fromBCP47' (Just (Lang "ar" _ "SY" _) ) = Just "ar-sy"
|
||||||
fromBCP47' (Just (Lang "ar" _ "IQ" _) ) = Just "ar-iq"
|
fromBCP47' (Just (Lang "ar" _ "IQ" _) ) = Just "ar-iq"
|
||||||
fromBCP47' (Just (Lang "ar" _ "JO" _) ) = Just "ar-jo"
|
fromBCP47' (Just (Lang "ar" _ "JO" _) ) = Just "ar-jo"
|
||||||
fromBCP47' (Just (Lang "ar" _ "LB" _) ) = Just "ar-lb"
|
fromBCP47' (Just (Lang "ar" _ "LB" _) ) = Just "ar-lb"
|
||||||
fromBCP47' (Just (Lang "ar" _ "DZ" _) ) = Just "ar-dz"
|
fromBCP47' (Just (Lang "ar" _ "DZ" _) ) = Just "ar-dz"
|
||||||
fromBCP47' (Just (Lang "ar" _ "MA" _) ) = Just "ar-ma"
|
fromBCP47' (Just (Lang "ar" _ "MA" _) ) = Just "ar-ma"
|
||||||
fromBCP47' (Just (Lang "de" _ _ ["1901"]) ) = Just "deo"
|
fromBCP47' (Just (Lang "de" _ _ ["1901"]) ) = Just "deo"
|
||||||
fromBCP47' (Just (Lang "de" _ "DE" _) ) = Just "de-de"
|
fromBCP47' (Just (Lang "de" _ "DE" _) ) = Just "de-de"
|
||||||
fromBCP47' (Just (Lang "de" _ "AT" _) ) = Just "de-at"
|
fromBCP47' (Just (Lang "de" _ "AT" _) ) = Just "de-at"
|
||||||
fromBCP47' (Just (Lang "de" _ "CH" _) ) = Just "de-ch"
|
fromBCP47' (Just (Lang "de" _ "CH" _) ) = Just "de-ch"
|
||||||
fromBCP47' (Just (Lang "el" _ _ ["poly"]) ) = Just "agr"
|
fromBCP47' (Just (Lang "el" _ _ ["poly"]) ) = Just "agr"
|
||||||
fromBCP47' (Just (Lang "en" _ "US" _) ) = Just "en-us"
|
fromBCP47' (Just (Lang "en" _ "US" _) ) = Just "en-us"
|
||||||
fromBCP47' (Just (Lang "en" _ "GB" _) ) = Just "en-gb"
|
fromBCP47' (Just (Lang "en" _ "GB" _) ) = Just "en-gb"
|
||||||
fromBCP47' (Just (Lang "grc"_ _ _) ) = Just "agr"
|
fromBCP47' (Just (Lang "grc"_ _ _) ) = Just "agr"
|
||||||
fromBCP47' (Just (Lang "el" _ _ _) ) = Just "gr"
|
fromBCP47' (Just (Lang "el" _ _ _) ) = Just "gr"
|
||||||
fromBCP47' (Just (Lang "eu" _ _ _) ) = Just "ba"
|
fromBCP47' (Just (Lang "eu" _ _ _) ) = Just "ba"
|
||||||
fromBCP47' (Just (Lang "he" _ _ _) ) = Just "il"
|
fromBCP47' (Just (Lang "he" _ _ _) ) = Just "il"
|
||||||
fromBCP47' (Just (Lang "jp" _ _ _) ) = Just "ja"
|
fromBCP47' (Just (Lang "jp" _ _ _) ) = Just "ja"
|
||||||
fromBCP47' (Just (Lang "uk" _ _ _) ) = Just "ua"
|
fromBCP47' (Just (Lang "uk" _ _ _) ) = Just "ua"
|
||||||
fromBCP47' (Just (Lang "vi" _ _ _) ) = Just "vn"
|
fromBCP47' (Just (Lang "vi" _ _ _) ) = Just "vn"
|
||||||
fromBCP47' (Just (Lang "zh" _ _ _) ) = Just "cn"
|
fromBCP47' (Just (Lang "zh" _ _ _) ) = Just "cn"
|
||||||
fromBCP47' (Just (Lang l _ _ _) ) = Just l
|
fromBCP47' (Just (Lang l _ _ _) ) = Just l
|
||||||
fromBCP47' Nothing = Nothing
|
fromBCP47' Nothing = Nothing
|
||||||
|
|
|
@ -43,12 +43,12 @@ import Data.List (intersperse)
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
import Data.Text (Text, pack)
|
import Data.Text (Text, pack)
|
||||||
import Data.Typeable
|
import Data.Typeable
|
||||||
import GHC.IO.Encoding (getForeignEncoding, setForeignEncoding, utf8)
|
|
||||||
import Foreign.Lua (Lua, ToLuaStack (..), callFunc, runLua)
|
import Foreign.Lua (Lua, ToLuaStack (..), callFunc, runLua)
|
||||||
import Foreign.Lua.Api
|
import Foreign.Lua.Api
|
||||||
import Text.Pandoc.Error
|
import GHC.IO.Encoding (getForeignEncoding, setForeignEncoding, utf8)
|
||||||
import Text.Pandoc.Lua.Util ( addValue )
|
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
|
import Text.Pandoc.Error
|
||||||
|
import Text.Pandoc.Lua.Util (addValue)
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Templates
|
import Text.Pandoc.Templates
|
||||||
import qualified Text.Pandoc.UTF8 as UTF8
|
import qualified Text.Pandoc.UTF8 as UTF8
|
||||||
|
|
|
@ -32,10 +32,10 @@ Conversion of 'Pandoc' documents to Docbook XML.
|
||||||
module Text.Pandoc.Writers.Docbook ( writeDocbook4, writeDocbook5 ) where
|
module Text.Pandoc.Writers.Docbook ( writeDocbook4, writeDocbook5 ) where
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
import Data.Char (toLower)
|
import Data.Char (toLower)
|
||||||
import Data.Text (Text)
|
|
||||||
import Data.Generics (everywhere, mkT)
|
import Data.Generics (everywhere, mkT)
|
||||||
import Data.List (intercalate, isPrefixOf, isSuffixOf, stripPrefix)
|
import Data.List (intercalate, isPrefixOf, isSuffixOf, stripPrefix)
|
||||||
import Data.Monoid (Any (..))
|
import Data.Monoid (Any (..))
|
||||||
|
import Data.Text (Text)
|
||||||
import qualified Text.Pandoc.Builder as B
|
import qualified Text.Pandoc.Builder as B
|
||||||
import Text.Pandoc.Class (PandocMonad, report)
|
import Text.Pandoc.Class (PandocMonad, report)
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
|
|
|
@ -51,6 +51,7 @@ import qualified Data.Text as T
|
||||||
import Data.Time.Clock.POSIX
|
import Data.Time.Clock.POSIX
|
||||||
import Skylighting
|
import Skylighting
|
||||||
import System.Random (randomR)
|
import System.Random (randomR)
|
||||||
|
import Text.Pandoc.BCP47 (getLang, renderLang)
|
||||||
import Text.Pandoc.Class (PandocMonad, report, toLang)
|
import Text.Pandoc.Class (PandocMonad, report, toLang)
|
||||||
import qualified Text.Pandoc.Class as P
|
import qualified Text.Pandoc.Class as P
|
||||||
import Text.Pandoc.Compat.Time
|
import Text.Pandoc.Compat.Time
|
||||||
|
@ -68,7 +69,6 @@ import qualified Text.Pandoc.UTF8 as UTF8
|
||||||
import Text.Pandoc.Walk
|
import Text.Pandoc.Walk
|
||||||
import Text.Pandoc.Writers.Math
|
import Text.Pandoc.Writers.Math
|
||||||
import Text.Pandoc.Writers.Shared (fixDisplayMath)
|
import Text.Pandoc.Writers.Shared (fixDisplayMath)
|
||||||
import Text.Pandoc.BCP47 (getLang, renderLang)
|
|
||||||
import Text.Printf (printf)
|
import Text.Printf (printf)
|
||||||
import Text.TeXMath
|
import Text.TeXMath
|
||||||
import Text.XML.Light as XML
|
import Text.XML.Light as XML
|
||||||
|
@ -276,9 +276,9 @@ writeDocx opts doc@(Pandoc meta _) = do
|
||||||
setval _ x = x
|
setval _ x = x
|
||||||
setvalattr :: String -> XML.Attr -> XML.Attr
|
setvalattr :: String -> XML.Attr -> XML.Attr
|
||||||
setvalattr l (XML.Attr qn@(QName "val" _ _) _) = XML.Attr qn l
|
setvalattr l (XML.Attr qn@(QName "val" _ _) _) = XML.Attr qn l
|
||||||
setvalattr _ x = x
|
setvalattr _ x = x
|
||||||
isLangElt (Elem e') = qName (elName e') == "lang"
|
isLangElt (Elem e') = qName (elName e') == "lang"
|
||||||
isLangElt _ = False
|
isLangElt _ = False
|
||||||
|
|
||||||
let stylepath = "word/styles.xml"
|
let stylepath = "word/styles.xml"
|
||||||
styledoc <- addLang <$> parseXml refArchive distArchive stylepath
|
styledoc <- addLang <$> parseXml refArchive distArchive stylepath
|
||||||
|
@ -508,8 +508,8 @@ writeDocx opts doc@(Pandoc meta _) = do
|
||||||
, qName (elName e) == "num" ] }
|
, qName (elName e) == "num" ] }
|
||||||
|
|
||||||
let keywords = case lookupMeta "keywords" meta of
|
let keywords = case lookupMeta "keywords" meta of
|
||||||
Just (MetaList xs) -> map stringify xs
|
Just (MetaList xs) -> map stringify xs
|
||||||
_ -> []
|
_ -> []
|
||||||
|
|
||||||
let docPropsPath = "docProps/core.xml"
|
let docPropsPath = "docProps/core.xml"
|
||||||
let docProps = mknode "cp:coreProperties"
|
let docProps = mknode "cp:coreProperties"
|
||||||
|
|
|
@ -46,9 +46,9 @@ import Data.Default (Default (..))
|
||||||
import Data.List (intercalate, intersect, isPrefixOf, transpose)
|
import Data.List (intercalate, intersect, isPrefixOf, transpose)
|
||||||
import Data.Text (Text, pack)
|
import Data.Text (Text, pack)
|
||||||
import Text.Pandoc.Class (PandocMonad, report)
|
import Text.Pandoc.Class (PandocMonad, report)
|
||||||
import Text.Pandoc.Logging
|
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.ImageSize
|
import Text.Pandoc.ImageSize
|
||||||
|
import Text.Pandoc.Logging
|
||||||
import Text.Pandoc.Options (WrapOption (..), WriterOptions (writerTableOfContents, writerTemplate, writerWrapText))
|
import Text.Pandoc.Options (WrapOption (..), WriterOptions (writerTableOfContents, writerTemplate, writerWrapText))
|
||||||
import Text.Pandoc.Shared (camelCaseToHyphenated, escapeURI, isURI, linesToPara,
|
import Text.Pandoc.Shared (camelCaseToHyphenated, escapeURI, isURI, linesToPara,
|
||||||
removeFormatting, substitute, trimr)
|
removeFormatting, substitute, trimr)
|
||||||
|
@ -291,7 +291,7 @@ listItemToDokuWiki opts items = do
|
||||||
bs <- mapM (blockToDokuWiki opts) items
|
bs <- mapM (blockToDokuWiki opts) items
|
||||||
let contents = case items of
|
let contents = case items of
|
||||||
[_, CodeBlock _ _] -> concat bs
|
[_, CodeBlock _ _] -> concat bs
|
||||||
_ -> vcat bs
|
_ -> vcat bs
|
||||||
indent <- stIndent <$> ask
|
indent <- stIndent <$> ask
|
||||||
backSlash <- stBackSlashLB <$> ask
|
backSlash <- stBackSlashLB <$> ask
|
||||||
let indent' = if backSlash then (drop 2 indent) else indent
|
let indent' = if backSlash then (drop 2 indent) else indent
|
||||||
|
|
|
@ -34,19 +34,19 @@ Conversion of 'Pandoc' documents to EPUB.
|
||||||
module Text.Pandoc.Writers.EPUB ( writeEPUB2, writeEPUB3 ) where
|
module Text.Pandoc.Writers.EPUB ( writeEPUB2, writeEPUB3 ) where
|
||||||
import Codec.Archive.Zip (Entry, addEntryToArchive, eRelativePath, emptyArchive,
|
import Codec.Archive.Zip (Entry, addEntryToArchive, eRelativePath, emptyArchive,
|
||||||
fromArchive, fromEntry, toEntry)
|
fromArchive, fromEntry, toEntry)
|
||||||
import Control.Monad (mplus, when, unless, zipWithM)
|
import Control.Monad (mplus, unless, when, zipWithM)
|
||||||
import Control.Monad.Except (catchError, throwError)
|
import Control.Monad.Except (catchError, throwError)
|
||||||
import Control.Monad.State.Strict (State, StateT, evalState, evalStateT, get, gets,
|
import Control.Monad.State.Strict (State, StateT, evalState, evalStateT, get,
|
||||||
lift, modify, put)
|
gets, lift, modify, put)
|
||||||
import qualified Data.ByteString.Lazy as B
|
import qualified Data.ByteString.Lazy as B
|
||||||
import qualified Data.ByteString.Lazy.Char8 as B8
|
import qualified Data.ByteString.Lazy.Char8 as B8
|
||||||
import qualified Data.Text.Lazy as TL
|
import Data.Char (isAlphaNum, isAscii, isDigit, toLower)
|
||||||
import qualified Data.Text as TS
|
|
||||||
import Data.Char (isAlphaNum, isDigit, toLower, isAscii)
|
|
||||||
import Data.List (intercalate, isInfixOf, isPrefixOf)
|
import Data.List (intercalate, isInfixOf, isPrefixOf)
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
import Data.Maybe (catMaybes, fromMaybe)
|
import Data.Maybe (catMaybes, fromMaybe)
|
||||||
import qualified Data.Set as Set
|
import qualified Data.Set as Set
|
||||||
|
import qualified Data.Text as TS
|
||||||
|
import qualified Data.Text.Lazy as TL
|
||||||
import Network.HTTP (urlEncode)
|
import Network.HTTP (urlEncode)
|
||||||
import System.FilePath (takeExtension, takeFileName)
|
import System.FilePath (takeExtension, takeFileName)
|
||||||
import Text.HTML.TagSoup (Tag (TagOpen), fromAttrib, parseTags)
|
import Text.HTML.TagSoup (Tag (TagOpen), fromAttrib, parseTags)
|
||||||
|
@ -71,7 +71,7 @@ import Text.Pandoc.Writers.HTML (writeHtmlStringForEPUB)
|
||||||
import Text.Printf (printf)
|
import Text.Printf (printf)
|
||||||
import Text.XML.Light (Attr (..), Element (..), Node (..), QName (..),
|
import Text.XML.Light (Attr (..), Element (..), Node (..), QName (..),
|
||||||
add_attrs, lookupAttr, node, onlyElems, parseXML,
|
add_attrs, lookupAttr, node, onlyElems, parseXML,
|
||||||
ppElement, strContent, unode, unqual, showElement)
|
ppElement, showElement, strContent, unode, unqual)
|
||||||
|
|
||||||
-- A Chapter includes a list of blocks and maybe a section
|
-- A Chapter includes a list of blocks and maybe a section
|
||||||
-- number offset. Note, some chapters are unnumbered. The section
|
-- number offset. Note, some chapters are unnumbered. The section
|
||||||
|
@ -709,7 +709,7 @@ pandocToEPUB version opts doc@(Pandoc meta _) = do
|
||||||
Right x -> x
|
Right x -> x
|
||||||
-- can't have a element inside a...
|
-- can't have a element inside a...
|
||||||
delink (Link _ ils _) = Span ("", [], []) ils
|
delink (Link _ ils _) = Span ("", [], []) ils
|
||||||
delink x = x
|
delink x = x
|
||||||
|
|
||||||
let navtag = if epub3 then "nav" else "div"
|
let navtag = if epub3 then "nav" else "div"
|
||||||
tocBlocks <- lift $ evalStateT (mapM (navPointNode navXhtmlFormatter) secs) 1
|
tocBlocks <- lift $ evalStateT (mapM (navPointNode navXhtmlFormatter) secs) 1
|
||||||
|
|
|
@ -37,15 +37,15 @@ FictionBook is an XML-based e-book format. For more information see:
|
||||||
-}
|
-}
|
||||||
module Text.Pandoc.Writers.FB2 (writeFB2) where
|
module Text.Pandoc.Writers.FB2 (writeFB2) where
|
||||||
|
|
||||||
import Control.Monad.Except (catchError)
|
|
||||||
import Control.Monad.State.Strict (StateT, evalStateT, get, lift, modify, liftM)
|
|
||||||
import Control.Monad (zipWithM)
|
import Control.Monad (zipWithM)
|
||||||
|
import Control.Monad.Except (catchError)
|
||||||
|
import Control.Monad.State.Strict (StateT, evalStateT, get, lift, liftM, modify)
|
||||||
import Data.ByteString.Base64 (encode)
|
import Data.ByteString.Base64 (encode)
|
||||||
import qualified Data.ByteString.Char8 as B8
|
import qualified Data.ByteString.Char8 as B8
|
||||||
import Data.Char (isAscii, isControl, isSpace, toLower)
|
import Data.Char (isAscii, isControl, isSpace, toLower)
|
||||||
import Data.Either (lefts, rights)
|
import Data.Either (lefts, rights)
|
||||||
import Data.Text (Text, pack)
|
|
||||||
import Data.List (intercalate, intersperse, isPrefixOf, stripPrefix)
|
import Data.List (intercalate, intersperse, isPrefixOf, stripPrefix)
|
||||||
|
import Data.Text (Text, pack)
|
||||||
import Network.HTTP (urlEncode)
|
import Network.HTTP (urlEncode)
|
||||||
import Text.XML.Light
|
import Text.XML.Light
|
||||||
import qualified Text.XML.Light as X
|
import qualified Text.XML.Light as X
|
||||||
|
@ -56,8 +56,7 @@ import qualified Text.Pandoc.Class as P
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Logging
|
import Text.Pandoc.Logging
|
||||||
import Text.Pandoc.Options (HTMLMathMethod (..), WriterOptions (..), def)
|
import Text.Pandoc.Options (HTMLMathMethod (..), WriterOptions (..), def)
|
||||||
import Text.Pandoc.Shared (capitalize, isHeaderBlock, isURI,
|
import Text.Pandoc.Shared (capitalize, isHeaderBlock, isURI, orderedListMarkers)
|
||||||
orderedListMarkers)
|
|
||||||
|
|
||||||
-- | Data to be written at the end of the document:
|
-- | Data to be written at the end of the document:
|
||||||
-- (foot)notes, URLs, references, images.
|
-- (foot)notes, URLs, references, images.
|
||||||
|
|
|
@ -45,13 +45,13 @@ module Text.Pandoc.Writers.HTML (
|
||||||
) where
|
) where
|
||||||
import Control.Monad.State.Strict
|
import Control.Monad.State.Strict
|
||||||
import Data.Char (ord, toLower)
|
import Data.Char (ord, toLower)
|
||||||
import Data.Text (Text)
|
import Data.List (intercalate, intersperse, isPrefixOf, partition)
|
||||||
import qualified Data.Text.Lazy as TL
|
|
||||||
import Data.List (intersperse, isPrefixOf, partition, intercalate)
|
|
||||||
import Data.Maybe (catMaybes, fromMaybe, isJust, isNothing)
|
import Data.Maybe (catMaybes, fromMaybe, isJust, isNothing)
|
||||||
import Data.Monoid ((<>))
|
import Data.Monoid ((<>))
|
||||||
import qualified Data.Set as Set
|
import qualified Data.Set as Set
|
||||||
import Data.String (fromString)
|
import Data.String (fromString)
|
||||||
|
import Data.Text (Text)
|
||||||
|
import qualified Data.Text.Lazy as TL
|
||||||
import Network.HTTP (urlEncode)
|
import Network.HTTP (urlEncode)
|
||||||
import Network.URI (URI (..), parseURIReference, unEscapeString)
|
import Network.URI (URI (..), parseURIReference, unEscapeString)
|
||||||
import Numeric (showHex)
|
import Numeric (showHex)
|
||||||
|
@ -79,7 +79,7 @@ import qualified Text.Blaze.Html5 as H5
|
||||||
#endif
|
#endif
|
||||||
import Control.Monad.Except (throwError)
|
import Control.Monad.Except (throwError)
|
||||||
import Data.Aeson (Value)
|
import Data.Aeson (Value)
|
||||||
import System.FilePath (takeExtension, takeBaseName)
|
import System.FilePath (takeBaseName, takeExtension)
|
||||||
import Text.Blaze.Html.Renderer.Text (renderHtml)
|
import Text.Blaze.Html.Renderer.Text (renderHtml)
|
||||||
import qualified Text.Blaze.XHtml1.Transitional as H
|
import qualified Text.Blaze.XHtml1.Transitional as H
|
||||||
import qualified Text.Blaze.XHtml1.Transitional.Attributes as A
|
import qualified Text.Blaze.XHtml1.Transitional.Attributes as A
|
||||||
|
@ -582,14 +582,14 @@ dimensionsToAttrList attr = consolidateStyles $ go Width ++ go Height
|
||||||
consolidateStyles :: [(String, String)] -> [(String, String)]
|
consolidateStyles :: [(String, String)] -> [(String, String)]
|
||||||
consolidateStyles xs =
|
consolidateStyles xs =
|
||||||
case partition isStyle xs of
|
case partition isStyle xs of
|
||||||
([], _) -> xs
|
([], _) -> xs
|
||||||
(ss, rest) -> ("style", intercalate ";" $ map snd ss) : rest
|
(ss, rest) -> ("style", intercalate ";" $ map snd ss) : rest
|
||||||
isStyle ("style", _) = True
|
isStyle ("style", _) = True
|
||||||
isStyle _ = False
|
isStyle _ = False
|
||||||
go dir = case (dimension dir attr) of
|
go dir = case (dimension dir attr) of
|
||||||
(Just (Pixel a)) -> [(show dir, show a)]
|
(Just (Pixel a)) -> [(show dir, show a)]
|
||||||
(Just x) -> [("style", show dir ++ ":" ++ show x)]
|
(Just x) -> [("style", show dir ++ ":" ++ show x)]
|
||||||
Nothing -> []
|
Nothing -> []
|
||||||
|
|
||||||
imageExts :: [String]
|
imageExts :: [String]
|
||||||
imageExts = [ "art", "bmp", "cdr", "cdt", "cpt", "cr2", "crw", "djvu", "erf",
|
imageExts = [ "art", "bmp", "cdr", "cdt", "cpt", "cr2", "crw", "djvu", "erf",
|
||||||
|
|
|
@ -35,8 +35,8 @@ Haddock: <http://www.haskell.org/haddock/doc/html/>
|
||||||
module Text.Pandoc.Writers.Haddock (writeHaddock) where
|
module Text.Pandoc.Writers.Haddock (writeHaddock) where
|
||||||
import Control.Monad.State.Strict
|
import Control.Monad.State.Strict
|
||||||
import Data.Default
|
import Data.Default
|
||||||
import Data.Text (Text)
|
|
||||||
import Data.List (intersperse, transpose)
|
import Data.List (intersperse, transpose)
|
||||||
|
import Data.Text (Text)
|
||||||
import Text.Pandoc.Class (PandocMonad, report)
|
import Text.Pandoc.Class (PandocMonad, report)
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Logging
|
import Text.Pandoc.Logging
|
||||||
|
|
|
@ -33,15 +33,16 @@ https://jats.nlm.nih.gov/publishing/tag-library/1.1d3/element/mml-math.html
|
||||||
module Text.Pandoc.Writers.JATS ( writeJATS ) where
|
module Text.Pandoc.Writers.JATS ( writeJATS ) where
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
import Data.Char (toLower)
|
import Data.Char (toLower)
|
||||||
import Data.Text (Text)
|
|
||||||
import Data.Generics (everywhere, mkT)
|
import Data.Generics (everywhere, mkT)
|
||||||
import Data.List (intercalate, isSuffixOf, partition)
|
import Data.List (intercalate, isSuffixOf, partition)
|
||||||
import Data.Maybe (fromMaybe)
|
import Data.Maybe (fromMaybe)
|
||||||
|
import Data.Text (Text)
|
||||||
import qualified Text.Pandoc.Builder as B
|
import qualified Text.Pandoc.Builder as B
|
||||||
import Text.Pandoc.Class (PandocMonad, report)
|
import Text.Pandoc.Class (PandocMonad, report)
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Highlighting (languages, languagesByExtension)
|
import Text.Pandoc.Highlighting (languages, languagesByExtension)
|
||||||
import Text.Pandoc.Logging
|
import Text.Pandoc.Logging
|
||||||
|
import Text.Pandoc.MIME (getMimeType)
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Pretty
|
import Text.Pandoc.Pretty
|
||||||
import Text.Pandoc.Shared
|
import Text.Pandoc.Shared
|
||||||
|
@ -49,7 +50,6 @@ import Text.Pandoc.Templates (renderTemplate')
|
||||||
import Text.Pandoc.Writers.Math
|
import Text.Pandoc.Writers.Math
|
||||||
import Text.Pandoc.Writers.Shared
|
import Text.Pandoc.Writers.Shared
|
||||||
import Text.Pandoc.XML
|
import Text.Pandoc.XML
|
||||||
import Text.Pandoc.MIME (getMimeType)
|
|
||||||
import Text.TeXMath
|
import Text.TeXMath
|
||||||
import qualified Text.XML.Light as Xml
|
import qualified Text.XML.Light as Xml
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ writeJATS opts d =
|
||||||
docToJATS :: PandocMonad m => WriterOptions -> Pandoc -> DB m Text
|
docToJATS :: PandocMonad m => WriterOptions -> Pandoc -> DB m Text
|
||||||
docToJATS opts (Pandoc meta blocks) = do
|
docToJATS opts (Pandoc meta blocks) = do
|
||||||
let isBackBlock (Div ("refs",_,_) _) = True
|
let isBackBlock (Div ("refs",_,_) _) = True
|
||||||
isBackBlock _ = False
|
isBackBlock _ = False
|
||||||
let (backblocks, bodyblocks) = partition isBackBlock blocks
|
let (backblocks, bodyblocks) = partition isBackBlock blocks
|
||||||
let elements = hierarchicalize bodyblocks
|
let elements = hierarchicalize bodyblocks
|
||||||
let backElements = hierarchicalize backblocks
|
let backElements = hierarchicalize backblocks
|
||||||
|
|
|
@ -45,7 +45,7 @@ import Data.Maybe (catMaybes, fromMaybe, isJust)
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Network.URI (unEscapeString)
|
import Network.URI (unEscapeString)
|
||||||
import Text.Pandoc.BCP47 (Lang(..), getLang, renderLang)
|
import Text.Pandoc.BCP47 (Lang (..), getLang, renderLang)
|
||||||
import Text.Pandoc.Class (PandocMonad, report, toLang)
|
import Text.Pandoc.Class (PandocMonad, report, toLang)
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Highlighting (formatLaTeXBlock, formatLaTeXInline, highlight,
|
import Text.Pandoc.Highlighting (formatLaTeXBlock, formatLaTeXInline, highlight,
|
||||||
|
@ -1001,7 +1001,7 @@ inlineToLaTeX (Code (_,classes,_) str) = do
|
||||||
inItem <- gets stInItem
|
inItem <- gets stInItem
|
||||||
let listingsCode = do
|
let listingsCode = do
|
||||||
let listingsopt = case getListingsLanguage classes of
|
let listingsopt = case getListingsLanguage classes of
|
||||||
Just l -> "[language=" ++ mbBraced l ++ "]"
|
Just l -> "[language=" ++ mbBraced l ++ "]"
|
||||||
Nothing -> ""
|
Nothing -> ""
|
||||||
inNote <- gets stInNote
|
inNote <- gets stInNote
|
||||||
when inNote $ modify $ \s -> s{ stVerbInNote = True }
|
when inNote $ modify $ \s -> s{ stVerbInNote = True }
|
||||||
|
|
|
@ -31,7 +31,7 @@ Conversion of 'Pandoc' documents to groff man page format.
|
||||||
-}
|
-}
|
||||||
module Text.Pandoc.Writers.Man ( writeMan) where
|
module Text.Pandoc.Writers.Man ( writeMan) where
|
||||||
import Control.Monad.State.Strict
|
import Control.Monad.State.Strict
|
||||||
import Data.List (intercalate, intersperse, stripPrefix, sort)
|
import Data.List (intercalate, intersperse, sort, stripPrefix)
|
||||||
import qualified Data.Map as Map
|
import qualified Data.Map as Map
|
||||||
import Data.Maybe (fromMaybe)
|
import Data.Maybe (fromMaybe)
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
|
|
|
@ -39,8 +39,8 @@ import Control.Monad.State.Strict
|
||||||
import Data.Char (chr, isPunctuation, isSpace, ord)
|
import Data.Char (chr, isPunctuation, isSpace, ord)
|
||||||
import Data.Default
|
import Data.Default
|
||||||
import qualified Data.HashMap.Strict as H
|
import qualified Data.HashMap.Strict as H
|
||||||
import qualified Data.Map as M
|
|
||||||
import Data.List (find, group, intersperse, sortBy, stripPrefix, transpose)
|
import Data.List (find, group, intersperse, sortBy, stripPrefix, transpose)
|
||||||
|
import qualified Data.Map as M
|
||||||
import Data.Maybe (fromMaybe)
|
import Data.Maybe (fromMaybe)
|
||||||
import Data.Monoid (Any (..))
|
import Data.Monoid (Any (..))
|
||||||
import Data.Ord (comparing)
|
import Data.Ord (comparing)
|
||||||
|
@ -994,7 +994,7 @@ inlineToMarkdown opts (Superscript lst) =
|
||||||
else
|
else
|
||||||
let rendered = render Nothing contents
|
let rendered = render Nothing contents
|
||||||
in case mapM toSuperscript rendered of
|
in case mapM toSuperscript rendered of
|
||||||
Just r -> text r
|
Just r -> text r
|
||||||
Nothing -> text $ "^(" ++ rendered ++ ")"
|
Nothing -> text $ "^(" ++ rendered ++ ")"
|
||||||
inlineToMarkdown _ (Subscript []) = return empty
|
inlineToMarkdown _ (Subscript []) = return empty
|
||||||
inlineToMarkdown opts (Subscript lst) =
|
inlineToMarkdown opts (Subscript lst) =
|
||||||
|
@ -1007,7 +1007,7 @@ inlineToMarkdown opts (Subscript lst) =
|
||||||
else
|
else
|
||||||
let rendered = render Nothing contents
|
let rendered = render Nothing contents
|
||||||
in case mapM toSubscript rendered of
|
in case mapM toSubscript rendered of
|
||||||
Just r -> text r
|
Just r -> text r
|
||||||
Nothing -> text $ "_(" ++ rendered ++ ")"
|
Nothing -> text $ "_(" ++ rendered ++ ")"
|
||||||
inlineToMarkdown opts (SmallCaps lst) = do
|
inlineToMarkdown opts (SmallCaps lst) = do
|
||||||
plain <- asks envPlain
|
plain <- asks envPlain
|
||||||
|
|
|
@ -36,9 +36,9 @@ import Data.List (intercalate)
|
||||||
import qualified Data.Set as Set
|
import qualified Data.Set as Set
|
||||||
import Data.Text (Text, pack)
|
import Data.Text (Text, pack)
|
||||||
import Text.Pandoc.Class (PandocMonad, report)
|
import Text.Pandoc.Class (PandocMonad, report)
|
||||||
import Text.Pandoc.Logging
|
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.ImageSize
|
import Text.Pandoc.ImageSize
|
||||||
|
import Text.Pandoc.Logging
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Pretty (render)
|
import Text.Pandoc.Pretty (render)
|
||||||
import Text.Pandoc.Shared
|
import Text.Pandoc.Shared
|
||||||
|
|
|
@ -36,29 +36,29 @@ TODO:
|
||||||
-}
|
-}
|
||||||
|
|
||||||
module Text.Pandoc.Writers.Ms ( writeMs ) where
|
module Text.Pandoc.Writers.Ms ( writeMs ) where
|
||||||
import Text.Pandoc.Definition
|
import Control.Monad.State.Strict
|
||||||
import Text.Pandoc.Templates
|
import Data.Char (isLower, isUpper, toUpper)
|
||||||
import Text.Pandoc.Shared
|
import Data.List (intercalate, intersperse, sort)
|
||||||
import Text.Pandoc.Writers.Shared
|
|
||||||
import Text.Pandoc.Options
|
|
||||||
import Text.Pandoc.Writers.Math
|
|
||||||
import Text.Printf ( printf )
|
|
||||||
import qualified Data.Text as T
|
|
||||||
import Data.Text (Text)
|
|
||||||
import qualified Data.Map as Map
|
import qualified Data.Map as Map
|
||||||
import Data.Maybe ( catMaybes, fromMaybe )
|
import Data.Maybe (catMaybes, fromMaybe)
|
||||||
import Data.List ( intersperse, intercalate, sort )
|
import Data.Text (Text)
|
||||||
import Text.Pandoc.Pretty
|
import qualified Data.Text as T
|
||||||
|
import Network.URI (escapeURIString, isAllowedInURI)
|
||||||
|
import Skylighting
|
||||||
|
import System.FilePath (takeExtension)
|
||||||
import Text.Pandoc.Class (PandocMonad, report)
|
import Text.Pandoc.Class (PandocMonad, report)
|
||||||
|
import Text.Pandoc.Definition
|
||||||
|
import Text.Pandoc.Highlighting
|
||||||
import Text.Pandoc.ImageSize
|
import Text.Pandoc.ImageSize
|
||||||
import Text.Pandoc.Logging
|
import Text.Pandoc.Logging
|
||||||
import Control.Monad.State.Strict
|
import Text.Pandoc.Options
|
||||||
import Data.Char ( isLower, isUpper, toUpper )
|
import Text.Pandoc.Pretty
|
||||||
|
import Text.Pandoc.Shared
|
||||||
|
import Text.Pandoc.Templates
|
||||||
|
import Text.Pandoc.Writers.Math
|
||||||
|
import Text.Pandoc.Writers.Shared
|
||||||
|
import Text.Printf (printf)
|
||||||
import Text.TeXMath (writeEqn)
|
import Text.TeXMath (writeEqn)
|
||||||
import System.FilePath (takeExtension)
|
|
||||||
import Skylighting
|
|
||||||
import Text.Pandoc.Highlighting
|
|
||||||
import Network.URI (escapeURIString, isAllowedInURI)
|
|
||||||
|
|
||||||
data WriterState = WriterState { stHasInlineMath :: Bool
|
data WriterState = WriterState { stHasInlineMath :: Bool
|
||||||
, stFirstPara :: Bool
|
, stFirstPara :: Bool
|
||||||
|
@ -147,7 +147,7 @@ msEscapes = Map.fromList $
|
||||||
|
|
||||||
escapeChar :: Char -> String
|
escapeChar :: Char -> String
|
||||||
escapeChar c = case Map.lookup c msEscapes of
|
escapeChar c = case Map.lookup c msEscapes of
|
||||||
Just s -> s
|
Just s -> s
|
||||||
Nothing -> [c]
|
Nothing -> [c]
|
||||||
|
|
||||||
-- | Escape | character, used to mark inline math, inside math.
|
-- | Escape | character, used to mark inline math, inside math.
|
||||||
|
@ -176,13 +176,13 @@ toSmallCaps (c:cs)
|
||||||
-- | Escape a literal (code) section for Ms.
|
-- | Escape a literal (code) section for Ms.
|
||||||
escapeCode :: String -> String
|
escapeCode :: String -> String
|
||||||
escapeCode = concat . intersperse "\n" . map escapeLine . lines
|
escapeCode = concat . intersperse "\n" . map escapeLine . lines
|
||||||
where escapeCodeChar ' ' = "\\ "
|
where escapeCodeChar ' ' = "\\ "
|
||||||
escapeCodeChar '\t' = "\\\t"
|
escapeCodeChar '\t' = "\\\t"
|
||||||
escapeCodeChar c = escapeChar c
|
escapeCodeChar c = escapeChar c
|
||||||
escapeLine codeline =
|
escapeLine codeline =
|
||||||
case concatMap escapeCodeChar codeline of
|
case concatMap escapeCodeChar codeline of
|
||||||
a@('.':_) -> "\\&" ++ a
|
a@('.':_) -> "\\&" ++ a
|
||||||
b -> b
|
b -> b
|
||||||
|
|
||||||
-- We split inline lists into sentences, and print one sentence per
|
-- We split inline lists into sentences, and print one sentence per
|
||||||
-- line. groff/troff treats the line-ending period differently.
|
-- line. groff/troff treats the line-ending period differently.
|
||||||
|
@ -194,8 +194,8 @@ breakSentence [] = ([],[])
|
||||||
breakSentence xs =
|
breakSentence xs =
|
||||||
let isSentenceEndInline (Str ys@(_:_)) | last ys == '.' = True
|
let isSentenceEndInline (Str ys@(_:_)) | last ys == '.' = True
|
||||||
isSentenceEndInline (Str ys@(_:_)) | last ys == '?' = True
|
isSentenceEndInline (Str ys@(_:_)) | last ys == '?' = True
|
||||||
isSentenceEndInline (LineBreak) = True
|
isSentenceEndInline (LineBreak) = True
|
||||||
isSentenceEndInline _ = False
|
isSentenceEndInline _ = False
|
||||||
(as, bs) = break isSentenceEndInline xs
|
(as, bs) = break isSentenceEndInline xs
|
||||||
in case bs of
|
in case bs of
|
||||||
[] -> (as, [])
|
[] -> (as, [])
|
||||||
|
@ -548,7 +548,7 @@ handleNote opts bs = do
|
||||||
-- line after the note ref:
|
-- line after the note ref:
|
||||||
let bs' = case bs of
|
let bs' = case bs of
|
||||||
(Para ils : rest) -> Plain ils : rest
|
(Para ils : rest) -> Plain ils : rest
|
||||||
_ -> bs
|
_ -> bs
|
||||||
contents <- blockListToMs opts bs'
|
contents <- blockListToMs opts bs'
|
||||||
return $ cr <> text ".FS" $$ contents $$ text ".FE" <> cr
|
return $ cr <> text ".FS" $$ contents $$ text ".FE" <> cr
|
||||||
|
|
||||||
|
|
|
@ -30,8 +30,8 @@ Conversion of a 'Pandoc' document to a string representation.
|
||||||
-}
|
-}
|
||||||
module Text.Pandoc.Writers.Native ( writeNative )
|
module Text.Pandoc.Writers.Native ( writeNative )
|
||||||
where
|
where
|
||||||
import Data.Text (Text)
|
|
||||||
import Data.List (intersperse)
|
import Data.List (intersperse)
|
||||||
|
import Data.Text (Text)
|
||||||
import Text.Pandoc.Class (PandocMonad)
|
import Text.Pandoc.Class (PandocMonad)
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Options (WrapOption (..), WriterOptions (..))
|
import Text.Pandoc.Options (WrapOption (..), WriterOptions (..))
|
||||||
|
|
|
@ -38,6 +38,7 @@ import Data.List (isPrefixOf)
|
||||||
import Data.Maybe (fromMaybe)
|
import Data.Maybe (fromMaybe)
|
||||||
import qualified Data.Text.Lazy as TL
|
import qualified Data.Text.Lazy as TL
|
||||||
import System.FilePath (takeDirectory, takeExtension, (<.>))
|
import System.FilePath (takeDirectory, takeExtension, (<.>))
|
||||||
|
import Text.Pandoc.BCP47 (Lang (..), getLang, renderLang)
|
||||||
import Text.Pandoc.Class (PandocMonad, report, toLang)
|
import Text.Pandoc.Class (PandocMonad, report, toLang)
|
||||||
import qualified Text.Pandoc.Class as P
|
import qualified Text.Pandoc.Class as P
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
|
@ -51,7 +52,6 @@ import Text.Pandoc.UTF8 (fromStringLazy, fromTextLazy, toStringLazy)
|
||||||
import Text.Pandoc.Walk
|
import Text.Pandoc.Walk
|
||||||
import Text.Pandoc.Writers.OpenDocument (writeOpenDocument)
|
import Text.Pandoc.Writers.OpenDocument (writeOpenDocument)
|
||||||
import Text.Pandoc.Writers.Shared (fixDisplayMath)
|
import Text.Pandoc.Writers.Shared (fixDisplayMath)
|
||||||
import Text.Pandoc.BCP47 (getLang, Lang(..), renderLang)
|
|
||||||
import Text.Pandoc.XML
|
import Text.Pandoc.XML
|
||||||
import Text.TeXMath
|
import Text.TeXMath
|
||||||
import Text.XML.Light
|
import Text.XML.Light
|
||||||
|
|
|
@ -36,10 +36,11 @@ import Control.Arrow ((***), (>>>))
|
||||||
import Control.Monad.State.Strict hiding (when)
|
import Control.Monad.State.Strict hiding (when)
|
||||||
import Data.Char (chr)
|
import Data.Char (chr)
|
||||||
import Data.List (sortBy)
|
import Data.List (sortBy)
|
||||||
import Data.Text (Text)
|
|
||||||
import qualified Data.Map as Map
|
import qualified Data.Map as Map
|
||||||
import Data.Ord (comparing)
|
import Data.Ord (comparing)
|
||||||
import qualified Data.Set as Set
|
import qualified Data.Set as Set
|
||||||
|
import Data.Text (Text)
|
||||||
|
import Text.Pandoc.BCP47 (Lang (..), parseBCP47)
|
||||||
import Text.Pandoc.Class (PandocMonad, report)
|
import Text.Pandoc.Class (PandocMonad, report)
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Logging
|
import Text.Pandoc.Logging
|
||||||
|
@ -50,7 +51,6 @@ import Text.Pandoc.Templates (renderTemplate')
|
||||||
import Text.Pandoc.Writers.Math
|
import Text.Pandoc.Writers.Math
|
||||||
import Text.Pandoc.Writers.Shared
|
import Text.Pandoc.Writers.Shared
|
||||||
import Text.Pandoc.XML
|
import Text.Pandoc.XML
|
||||||
import Text.Pandoc.BCP47 (parseBCP47, Lang(..))
|
|
||||||
import Text.Printf (printf)
|
import Text.Printf (printf)
|
||||||
|
|
||||||
-- | Auxiliary function to convert Plain block to Para.
|
-- | Auxiliary function to convert Plain block to Para.
|
||||||
|
|
|
@ -37,14 +37,14 @@ Org-Mode: <http://orgmode.org>
|
||||||
module Text.Pandoc.Writers.Org (writeOrg) where
|
module Text.Pandoc.Writers.Org (writeOrg) where
|
||||||
import Control.Monad.State.Strict
|
import Control.Monad.State.Strict
|
||||||
import Data.Char (isAlphaNum, toLower)
|
import Data.Char (isAlphaNum, toLower)
|
||||||
import Data.Text (Text)
|
|
||||||
import Data.List (intersect, intersperse, isPrefixOf, partition, transpose)
|
import Data.List (intersect, intersperse, isPrefixOf, partition, transpose)
|
||||||
|
import Data.Text (Text)
|
||||||
import Text.Pandoc.Class (PandocMonad, report)
|
import Text.Pandoc.Class (PandocMonad, report)
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
|
import Text.Pandoc.Logging
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Pretty
|
import Text.Pandoc.Pretty
|
||||||
import Text.Pandoc.Shared
|
import Text.Pandoc.Shared
|
||||||
import Text.Pandoc.Logging
|
|
||||||
import Text.Pandoc.Templates (renderTemplate')
|
import Text.Pandoc.Templates (renderTemplate')
|
||||||
import Text.Pandoc.Writers.Shared
|
import Text.Pandoc.Writers.Shared
|
||||||
|
|
||||||
|
|
|
@ -38,9 +38,9 @@ import Data.Maybe (fromMaybe)
|
||||||
import Data.Text (Text, stripEnd)
|
import Data.Text (Text, stripEnd)
|
||||||
import qualified Text.Pandoc.Builder as B
|
import qualified Text.Pandoc.Builder as B
|
||||||
import Text.Pandoc.Class (PandocMonad, report)
|
import Text.Pandoc.Class (PandocMonad, report)
|
||||||
import Text.Pandoc.Logging
|
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.ImageSize
|
import Text.Pandoc.ImageSize
|
||||||
|
import Text.Pandoc.Logging
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Pretty
|
import Text.Pandoc.Pretty
|
||||||
import Text.Pandoc.Shared
|
import Text.Pandoc.Shared
|
||||||
|
@ -371,12 +371,12 @@ blockToRST' x = do
|
||||||
modify (\s -> s{stLastNested =
|
modify (\s -> s{stLastNested =
|
||||||
case x of
|
case x of
|
||||||
Para [Image _ _ (_,'f':'i':'g':':':_)] -> True
|
Para [Image _ _ (_,'f':'i':'g':':':_)] -> True
|
||||||
Para{} -> False
|
Para{} -> False
|
||||||
Plain{} -> False
|
Plain{} -> False
|
||||||
Header{} -> False
|
Header{} -> False
|
||||||
LineBlock{} -> False
|
LineBlock{} -> False
|
||||||
HorizontalRule -> False
|
HorizontalRule -> False
|
||||||
_ -> True
|
_ -> True
|
||||||
})
|
})
|
||||||
blockToRST x
|
blockToRST x
|
||||||
|
|
||||||
|
|
|
@ -34,9 +34,9 @@ import Control.Monad.Except (catchError, throwError)
|
||||||
import qualified Data.ByteString as B
|
import qualified Data.ByteString as B
|
||||||
import Data.Char (chr, isDigit, ord)
|
import Data.Char (chr, isDigit, ord)
|
||||||
import Data.List (intercalate, isSuffixOf)
|
import Data.List (intercalate, isSuffixOf)
|
||||||
|
import qualified Data.Map as M
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import qualified Data.Map as M
|
|
||||||
import Text.Pandoc.Class (PandocMonad, report)
|
import Text.Pandoc.Class (PandocMonad, report)
|
||||||
import qualified Text.Pandoc.Class as P
|
import qualified Text.Pandoc.Class as P
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
|
|
|
@ -31,14 +31,14 @@ Conversion of 'Pandoc' documents to Docbook XML.
|
||||||
-}
|
-}
|
||||||
module Text.Pandoc.Writers.TEI (writeTEI) where
|
module Text.Pandoc.Writers.TEI (writeTEI) where
|
||||||
import Data.Char (toLower)
|
import Data.Char (toLower)
|
||||||
import Data.Text (Text)
|
|
||||||
import Data.List (isPrefixOf, stripPrefix)
|
import Data.List (isPrefixOf, stripPrefix)
|
||||||
|
import Data.Text (Text)
|
||||||
import qualified Text.Pandoc.Builder as B
|
import qualified Text.Pandoc.Builder as B
|
||||||
import Text.Pandoc.Class (PandocMonad, report)
|
import Text.Pandoc.Class (PandocMonad, report)
|
||||||
import Text.Pandoc.Logging
|
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Highlighting (languages, languagesByExtension)
|
import Text.Pandoc.Highlighting (languages, languagesByExtension)
|
||||||
import Text.Pandoc.ImageSize
|
import Text.Pandoc.ImageSize
|
||||||
|
import Text.Pandoc.Logging
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Pretty
|
import Text.Pandoc.Pretty
|
||||||
import Text.Pandoc.Shared
|
import Text.Pandoc.Shared
|
||||||
|
|
|
@ -35,9 +35,9 @@ import Data.Char (isSpace)
|
||||||
import Data.List (intercalate)
|
import Data.List (intercalate)
|
||||||
import Data.Text (Text, pack)
|
import Data.Text (Text, pack)
|
||||||
import Text.Pandoc.Class (PandocMonad, report)
|
import Text.Pandoc.Class (PandocMonad, report)
|
||||||
import Text.Pandoc.Logging
|
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.ImageSize
|
import Text.Pandoc.ImageSize
|
||||||
|
import Text.Pandoc.Logging
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Pretty (render)
|
import Text.Pandoc.Pretty (render)
|
||||||
import Text.Pandoc.Shared
|
import Text.Pandoc.Shared
|
||||||
|
|
|
@ -37,13 +37,13 @@ import Control.Monad.State.Strict (StateT, evalStateT, gets, modify)
|
||||||
import Data.Default (Default (..))
|
import Data.Default (Default (..))
|
||||||
import Data.List (intercalate, isInfixOf, isPrefixOf, transpose)
|
import Data.List (intercalate, isInfixOf, isPrefixOf, transpose)
|
||||||
import qualified Data.Map as Map
|
import qualified Data.Map as Map
|
||||||
import Data.Text (breakOnAll, pack, Text)
|
import Data.Text (Text, breakOnAll, pack)
|
||||||
import Text.Pandoc.Class (PandocMonad, report)
|
import Text.Pandoc.Class (PandocMonad, report)
|
||||||
import Text.Pandoc.Logging
|
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.ImageSize
|
import Text.Pandoc.ImageSize
|
||||||
|
import Text.Pandoc.Logging
|
||||||
import Text.Pandoc.Options (WrapOption (..), WriterOptions (writerTableOfContents, writerTemplate, writerWrapText))
|
import Text.Pandoc.Options (WrapOption (..), WriterOptions (writerTableOfContents, writerTemplate, writerWrapText))
|
||||||
import Text.Pandoc.Shared (isURI, escapeURI, linesToPara, removeFormatting,
|
import Text.Pandoc.Shared (escapeURI, isURI, linesToPara, removeFormatting,
|
||||||
substitute, trimr)
|
substitute, trimr)
|
||||||
import Text.Pandoc.Templates (renderTemplate')
|
import Text.Pandoc.Templates (renderTemplate')
|
||||||
import Text.Pandoc.Writers.Shared (defField, metaToJSON)
|
import Text.Pandoc.Writers.Shared (defField, metaToJSON)
|
||||||
|
|
|
@ -2,20 +2,20 @@ module Tests.Command (findPandoc, runTest, tests)
|
||||||
where
|
where
|
||||||
|
|
||||||
import Data.Algorithm.Diff
|
import Data.Algorithm.Diff
|
||||||
|
import qualified Data.ByteString as BS
|
||||||
import Data.List (isSuffixOf)
|
import Data.List (isSuffixOf)
|
||||||
import Prelude hiding (readFile)
|
import Prelude hiding (readFile)
|
||||||
import System.Directory
|
import System.Directory
|
||||||
import System.Exit
|
import System.Exit
|
||||||
import System.FilePath (joinPath, splitDirectories, takeDirectory, (</>))
|
import System.FilePath (joinPath, splitDirectories, takeDirectory, (</>))
|
||||||
|
import System.IO (hPutStr, stderr)
|
||||||
|
import System.IO.Unsafe (unsafePerformIO)
|
||||||
import System.Process
|
import System.Process
|
||||||
import System.IO (stderr, hPutStr)
|
|
||||||
import Test.Tasty
|
import Test.Tasty
|
||||||
import Test.Tasty.HUnit
|
import Test.Tasty.HUnit
|
||||||
import Tests.Helpers
|
import Tests.Helpers
|
||||||
import Text.Pandoc
|
import Text.Pandoc
|
||||||
import qualified Data.ByteString as BS
|
|
||||||
import qualified Text.Pandoc.UTF8 as UTF8
|
import qualified Text.Pandoc.UTF8 as UTF8
|
||||||
import System.IO.Unsafe (unsafePerformIO) -- TODO temporary
|
|
||||||
|
|
||||||
-- | Run a test with normalize function, return True if test passed.
|
-- | Run a test with normalize function, return True if test passed.
|
||||||
runTest :: String -- ^ Title of test
|
runTest :: String -- ^ Title of test
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
{-# Language OverloadedStrings #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
module Tests.Lua ( tests ) where
|
module Tests.Lua ( tests ) where
|
||||||
|
|
||||||
import Control.Monad (when)
|
import Control.Monad (when)
|
||||||
import System.FilePath ((</>))
|
import System.FilePath ((</>))
|
||||||
import Test.Tasty (TestTree, localOption)
|
import Test.Tasty (TestTree, localOption)
|
||||||
import Test.Tasty.HUnit (Assertion, assertEqual, testCase)
|
import Test.Tasty.HUnit (Assertion, assertEqual, testCase)
|
||||||
import Test.Tasty.QuickCheck (ioProperty, testProperty, QuickCheckTests(..))
|
import Test.Tasty.QuickCheck (QuickCheckTests (..), ioProperty, testProperty)
|
||||||
import Text.Pandoc.Arbitrary ()
|
import Text.Pandoc.Arbitrary ()
|
||||||
import Text.Pandoc.Builder ( (<>), bulletList, doc, doubleQuoted, emph
|
import Text.Pandoc.Builder (bulletList, doc, doubleQuoted, emph, linebreak,
|
||||||
, linebreak, rawBlock, singleQuoted, para, plain
|
para, plain, rawBlock, singleQuoted, space, str,
|
||||||
, space, str, strong)
|
strong, (<>))
|
||||||
import Text.Pandoc.Class (runIOorExplode)
|
import Text.Pandoc.Class (runIOorExplode)
|
||||||
import Text.Pandoc.Definition (Block, Inline, Meta, Pandoc)
|
import Text.Pandoc.Definition (Block, Inline, Meta, Pandoc)
|
||||||
import Text.Pandoc.Lua
|
import Text.Pandoc.Lua
|
||||||
|
@ -84,7 +84,7 @@ assertFilterConversion msg filterPath docIn docExpected = do
|
||||||
docEither <- runIOorExplode $
|
docEither <- runIOorExplode $
|
||||||
runLuaFilter (Just "../data") ("lua" </> filterPath) [] docIn
|
runLuaFilter (Just "../data") ("lua" </> filterPath) [] docIn
|
||||||
case docEither of
|
case docEither of
|
||||||
Left _ -> fail "lua filter failed"
|
Left _ -> fail "lua filter failed"
|
||||||
Right docRes -> assertEqual msg docExpected docRes
|
Right docRes -> assertEqual msg docExpected docRes
|
||||||
|
|
||||||
roundtripEqual :: (Eq a, FromLuaStack a, ToLuaStack a) => a -> IO Bool
|
roundtripEqual :: (Eq a, FromLuaStack a, ToLuaStack a) => a -> IO Bool
|
||||||
|
@ -102,5 +102,5 @@ roundtripEqual x = (x ==) <$> roundtripped
|
||||||
error ("not exactly one additional element on the stack: " ++ show size)
|
error ("not exactly one additional element on the stack: " ++ show size)
|
||||||
res <- peekEither (-1)
|
res <- peekEither (-1)
|
||||||
case res of
|
case res of
|
||||||
Left _ -> error "could not read from stack"
|
Left _ -> error "could not read from stack"
|
||||||
Right y -> return y
|
Right y -> return y
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
module Tests.Readers.Docx (tests) where
|
module Tests.Readers.Docx (tests) where
|
||||||
|
|
||||||
import Codec.Archive.Zip
|
import Codec.Archive.Zip
|
||||||
import qualified Data.ByteString.Lazy as B
|
|
||||||
import qualified Data.ByteString as BS
|
import qualified Data.ByteString as BS
|
||||||
import qualified Data.Text as T
|
import qualified Data.ByteString.Lazy as B
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
|
import qualified Data.Text as T
|
||||||
|
import System.IO.Unsafe
|
||||||
import Test.Tasty
|
import Test.Tasty
|
||||||
import Test.Tasty.HUnit
|
import Test.Tasty.HUnit
|
||||||
import Tests.Helpers
|
import Tests.Helpers
|
||||||
import Text.Pandoc
|
import Text.Pandoc
|
||||||
import Text.Pandoc.UTF8 as UTF8
|
|
||||||
import qualified Text.Pandoc.Class as P
|
import qualified Text.Pandoc.Class as P
|
||||||
import Text.Pandoc.MediaBag (MediaBag, lookupMedia, mediaDirectory)
|
import Text.Pandoc.MediaBag (MediaBag, lookupMedia, mediaDirectory)
|
||||||
import System.IO.Unsafe -- TODO temporary
|
import Text.Pandoc.UTF8 as UTF8
|
||||||
|
|
||||||
-- We define a wrapper around pandoc that doesn't normalize in the
|
-- We define a wrapper around pandoc that doesn't normalize in the
|
||||||
-- tests. Since we do our own normalization, we want to make sure
|
-- tests. Since we do our own normalization, we want to make sure
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
module Tests.Readers.HTML (tests) where
|
module Tests.Readers.HTML (tests) where
|
||||||
|
|
||||||
|
import Data.Text (Text)
|
||||||
import Test.Tasty
|
import Test.Tasty
|
||||||
import Tests.Helpers
|
import Tests.Helpers
|
||||||
import Text.Pandoc
|
import Text.Pandoc
|
||||||
import Text.Pandoc.Arbitrary ()
|
import Text.Pandoc.Arbitrary ()
|
||||||
import Text.Pandoc.Builder
|
import Text.Pandoc.Builder
|
||||||
import Data.Text (Text)
|
|
||||||
|
|
||||||
html :: Text -> Pandoc
|
html :: Text -> Pandoc
|
||||||
html = purely $ readHtml def
|
html = purely $ readHtml def
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
module Tests.Readers.LaTeX (tests) where
|
module Tests.Readers.LaTeX (tests) where
|
||||||
|
|
||||||
|
import Data.Text (Text)
|
||||||
|
import qualified Data.Text as T
|
||||||
import Test.Tasty
|
import Test.Tasty
|
||||||
import Tests.Helpers
|
import Tests.Helpers
|
||||||
import Text.Pandoc
|
import Text.Pandoc
|
||||||
import Text.Pandoc.Arbitrary ()
|
import Text.Pandoc.Arbitrary ()
|
||||||
import Text.Pandoc.Builder
|
import Text.Pandoc.Builder
|
||||||
import Data.Text (Text)
|
|
||||||
import qualified Data.Text as T
|
|
||||||
|
|
||||||
latex :: Text -> Pandoc
|
latex :: Text -> Pandoc
|
||||||
latex = purely $ readLaTeX def{
|
latex = purely $ readLaTeX def{
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
module Tests.Readers.Odt (tests) where
|
module Tests.Readers.Odt (tests) where
|
||||||
|
|
||||||
import Control.Monad (liftM)
|
import Control.Monad (liftM)
|
||||||
import qualified Data.ByteString.Lazy as B
|
|
||||||
import qualified Data.ByteString as BS
|
import qualified Data.ByteString as BS
|
||||||
import qualified Text.Pandoc.UTF8 as UTF8
|
import qualified Data.ByteString.Lazy as B
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
import Data.Text (unpack)
|
import Data.Text (unpack)
|
||||||
|
import System.IO.Unsafe (unsafePerformIO)
|
||||||
import Test.Tasty
|
import Test.Tasty
|
||||||
import Tests.Helpers
|
import Tests.Helpers
|
||||||
import Text.Pandoc
|
import Text.Pandoc
|
||||||
import System.IO.Unsafe (unsafePerformIO) -- TODO temporary
|
import qualified Text.Pandoc.UTF8 as UTF8
|
||||||
|
|
||||||
defopts :: ReaderOptions
|
defopts :: ReaderOptions
|
||||||
defopts = def{ readerExtensions = getDefaultExtensions "odt" }
|
defopts = def{ readerExtensions = getDefaultExtensions "odt" }
|
||||||
|
|
|
@ -2,7 +2,7 @@ module Tests.Shared (tests) where
|
||||||
|
|
||||||
import System.FilePath.Posix (joinPath)
|
import System.FilePath.Posix (joinPath)
|
||||||
import Test.Tasty
|
import Test.Tasty
|
||||||
import Test.Tasty.HUnit (assertBool, (@?=), testCase)
|
import Test.Tasty.HUnit (assertBool, testCase, (@?=))
|
||||||
import Text.Pandoc.Arbitrary ()
|
import Text.Pandoc.Arbitrary ()
|
||||||
import Text.Pandoc.Builder
|
import Text.Pandoc.Builder
|
||||||
import Text.Pandoc.Shared
|
import Text.Pandoc.Shared
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
module Tests.Writers.Docx (tests) where
|
module Tests.Writers.Docx (tests) where
|
||||||
|
|
||||||
|
import qualified Data.ByteString as BS
|
||||||
import System.FilePath ((</>))
|
import System.FilePath ((</>))
|
||||||
|
import System.IO.Unsafe (unsafePerformIO)
|
||||||
import Test.Tasty
|
import Test.Tasty
|
||||||
import Tests.Helpers
|
import Tests.Helpers
|
||||||
import Text.Pandoc.Class (runIOorExplode, setUserDataDir)
|
import Text.Pandoc.Class (runIOorExplode, setUserDataDir)
|
||||||
import Text.Pandoc.Definition
|
import Text.Pandoc.Definition
|
||||||
import Text.Pandoc.Options
|
import Text.Pandoc.Options
|
||||||
import Text.Pandoc.Walk
|
|
||||||
import Text.Pandoc.Readers.Docx
|
import Text.Pandoc.Readers.Docx
|
||||||
import Text.Pandoc.Readers.Native
|
import Text.Pandoc.Readers.Native
|
||||||
import Text.Pandoc.Writers.Docx
|
|
||||||
import System.IO.Unsafe (unsafePerformIO) -- TODO temporary
|
|
||||||
import qualified Data.ByteString as BS
|
|
||||||
import qualified Text.Pandoc.UTF8 as UTF8
|
import qualified Text.Pandoc.UTF8 as UTF8
|
||||||
|
import Text.Pandoc.Walk
|
||||||
|
import Text.Pandoc.Writers.Docx
|
||||||
|
|
||||||
type Options = (WriterOptions, ReaderOptions)
|
type Options = (WriterOptions, ReaderOptions)
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ compareOutput (wopts, ropts) nativeFileIn nativeFileOut = do
|
||||||
-- different ghc versions...
|
-- different ghc versions...
|
||||||
fixImages :: Inline -> Inline
|
fixImages :: Inline -> Inline
|
||||||
fixImages (Image attr alt (_,tit)) = Image attr alt ("image",tit)
|
fixImages (Image attr alt (_,tit)) = Image attr alt ("image",tit)
|
||||||
fixImages x = x
|
fixImages x = x
|
||||||
|
|
||||||
testCompareWithOptsIO :: Options -> String -> FilePath -> FilePath -> IO TestTree
|
testCompareWithOptsIO :: Options -> String -> FilePath -> FilePath -> IO TestTree
|
||||||
testCompareWithOptsIO opts name nativeFileIn nativeFileOut = do
|
testCompareWithOptsIO opts name nativeFileIn nativeFileOut = do
|
||||||
|
|
|
@ -4,7 +4,7 @@ import Data.Text (unpack)
|
||||||
import Test.Tasty
|
import Test.Tasty
|
||||||
import Tests.Helpers
|
import Tests.Helpers
|
||||||
import Text.Pandoc
|
import Text.Pandoc
|
||||||
import Text.Pandoc.Arbitrary()
|
import Text.Pandoc.Arbitrary ()
|
||||||
import Text.Pandoc.Builder
|
import Text.Pandoc.Builder
|
||||||
|
|
||||||
muse :: (ToPandoc a) => a -> String
|
muse :: (ToPandoc a) => a -> String
|
||||||
|
|
|
@ -7,17 +7,17 @@ import Test.Tasty
|
||||||
import qualified Tests.Command
|
import qualified Tests.Command
|
||||||
import qualified Tests.Lua
|
import qualified Tests.Lua
|
||||||
import qualified Tests.Old
|
import qualified Tests.Old
|
||||||
|
import qualified Tests.Readers.Creole
|
||||||
import qualified Tests.Readers.Docx
|
import qualified Tests.Readers.Docx
|
||||||
import qualified Tests.Readers.EPUB
|
import qualified Tests.Readers.EPUB
|
||||||
import qualified Tests.Readers.HTML
|
import qualified Tests.Readers.HTML
|
||||||
import qualified Tests.Readers.LaTeX
|
import qualified Tests.Readers.LaTeX
|
||||||
import qualified Tests.Readers.Markdown
|
import qualified Tests.Readers.Markdown
|
||||||
|
import qualified Tests.Readers.Muse
|
||||||
import qualified Tests.Readers.Odt
|
import qualified Tests.Readers.Odt
|
||||||
import qualified Tests.Readers.Org
|
import qualified Tests.Readers.Org
|
||||||
import qualified Tests.Readers.RST
|
import qualified Tests.Readers.RST
|
||||||
import qualified Tests.Readers.Txt2Tags
|
import qualified Tests.Readers.Txt2Tags
|
||||||
import qualified Tests.Readers.Muse
|
|
||||||
import qualified Tests.Readers.Creole
|
|
||||||
import qualified Tests.Shared
|
import qualified Tests.Shared
|
||||||
import qualified Tests.Writers.AsciiDoc
|
import qualified Tests.Writers.AsciiDoc
|
||||||
import qualified Tests.Writers.ConTeXt
|
import qualified Tests.Writers.ConTeXt
|
||||||
|
@ -26,12 +26,12 @@ import qualified Tests.Writers.Docx
|
||||||
import qualified Tests.Writers.HTML
|
import qualified Tests.Writers.HTML
|
||||||
import qualified Tests.Writers.LaTeX
|
import qualified Tests.Writers.LaTeX
|
||||||
import qualified Tests.Writers.Markdown
|
import qualified Tests.Writers.Markdown
|
||||||
|
import qualified Tests.Writers.Muse
|
||||||
import qualified Tests.Writers.Native
|
import qualified Tests.Writers.Native
|
||||||
import qualified Tests.Writers.Org
|
import qualified Tests.Writers.Org
|
||||||
import qualified Tests.Writers.Plain
|
import qualified Tests.Writers.Plain
|
||||||
import qualified Tests.Writers.RST
|
import qualified Tests.Writers.RST
|
||||||
import qualified Tests.Writers.TEI
|
import qualified Tests.Writers.TEI
|
||||||
import qualified Tests.Writers.Muse
|
|
||||||
import Text.Pandoc.Shared (inDirectory)
|
import Text.Pandoc.Shared (inDirectory)
|
||||||
|
|
||||||
tests :: TestTree
|
tests :: TestTree
|
||||||
|
|
Loading…
Add table
Reference in a new issue