authoring 0.1.0.0 → 0.2.3
raw patch · 7 files changed
+79/−18 lines, 7 filesdep +data-default
Dependencies added: data-default
Files
- authoring.cabal +5/−2
- src/Text/Authoring.hs +14/−0
- src/Text/Authoring/Bibliography.hs +2/−2
- src/Text/Authoring/Class.hs +29/−0
- src/Text/Authoring/Combinator/Cite.hs +6/−8
- src/Text/Authoring/Combinator/Writer.hs +17/−6
- src/Text/Authoring/State.hs +6/−0
authoring.cabal view
@@ -2,9 +2,9 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: authoring-version: 0.1.0.0+version: 0.2.3 synopsis: A library for writing papers-description: This package is parser combinator library for writing papers.+description: This package is a combinator library for writing papers. homepage: http://github.com/nushio3/authoring bug-reports: http://github.com/nushio3/authoring/issues license: BSD3@@ -23,7 +23,9 @@ library hs-source-dirs: src/ exposed-modules: + Text.Authoring Text.Authoring.Bibliography+ Text.Authoring.Class Text.Authoring.Combinator Text.Authoring.Combinator.Cite Text.Authoring.Combinator.Meta@@ -37,6 +39,7 @@ base ==4.* , citation-resolve >= 0.4.2 , containers >= 0.5+ , data-default , HaTeX >= 3.8 , lens , mtl
+ src/Text/Authoring.hs view
@@ -0,0 +1,14 @@+module Text.Authoring (++module Text.Authoring.Class,+module Text.Authoring.Combinator,+module Text.Authoring.Bibliography,+module Text.Authoring.Label,+ + )+where++import Text.Authoring.Bibliography+import Text.Authoring.Class+import Text.Authoring.Combinator+import Text.Authoring.Label
src/Text/Authoring/Bibliography.hs view
@@ -1,4 +1,4 @@-module Text.Authoring.Bibliography where+module Text.Authoring.Bibliography (bibliographyContent, withDatabaseFile) where import Control.Lens (use) import Control.Monad@@ -6,7 +6,7 @@ import Control.Monad.IO.Class import qualified Data.Set as Set import qualified Data.Text as Text-import Text.CSL.Input.Identifier (toBibTeXItem, HasDatabase)+import Text.CSL.Input.Identifier (toBibTeXItem, HasDatabase, withDatabaseFile) import Text.Authoring.State
+ src/Text/Authoring/Class.hs view
@@ -0,0 +1,29 @@+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE TemplateHaskell #-}++module Text.Authoring.Class where++import Control.Lens+import Control.Monad.RWS+import Control.Monad.State+import Control.Monad.Writer+import Data.Default (def)+import Text.Authoring.Document+import Text.Authoring.State+import Text.LaTeX (LaTeX)+import qualified Text.CSL.Input.Identifier.Internal as Citation++-- | The all-in-one environ for writing paper. +type MonadAuthoring s w m = (MonadState s m, HasAuthorState s, Citation.HasDatabase s, MonadWriter w m, HasDocument w, MonadIO m) ++-- | An example of monad transformer that can provide full (but IO) authoring environment.++type AuthoringT = RWST () Document AuthorState +++-- | Run an authoring monad, returns the triple (monad return value, final author state, generated latex)++runAuthoringT :: Monad m => AuthoringT m a -> m (a, AuthorState, LaTeX)+runAuthoringT prog = do + (a,s,w) <- runRWST prog () def+ return (a,s,w ^. latexSrc)
src/Text/Authoring/Combinator/Cite.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE OverloadedStrings #-} module Text.Authoring.Combinator.Cite where@@ -10,30 +11,27 @@ import qualified Data.Text as Text import Text.CSL.Input.Identifier (resolve, HasDatabase) -+import Text.Authoring.Class import Text.Authoring.Combinator.Meta import Text.Authoring.Combinator.Writer import Text.Authoring.Document import Text.Authoring.State -citet, citep :: (MonadState s m, HasAuthorState s, HasDatabase s, - MonadWriter w m, HasDocument w, MonadIO m) => [String] -> m ()+citet, citep :: MonadAuthoring s w m => [String] -> m () citet = citationGen "citet" citep = citationGen "citep" -citet1, citep1 :: (MonadState s m, HasAuthorState s, HasDatabase s, - MonadWriter w m, HasDocument w, MonadIO m) => String -> m ()+citet1, citep1 :: MonadAuthoring s w m => String -> m () citet1 = citationGen "citet" . (:[]) -- + ---<=== I am a long man lying citep1 = citationGen "citep" . (:[]) -- + ---<=== We are long men lying -- | make a citation to a document(s).-citationGen :: (MonadState s m, HasAuthorState s, HasDatabase s, - MonadWriter w m, HasDocument w, MonadIO m) => Text.Text -> [String] -> m ()+citationGen :: MonadAuthoring s w m => Text.Text -> [String] -> m () citationGen cmdName urls = do forM_ urls $ \url -> do- _ <- resolve url+ resolve url citedUrlSet %= Set.insert url command1 cmdName $ braces $ raw $ Text.intercalate "," $ map Text.pack urls
src/Text/Authoring/Combinator/Writer.hs view
@@ -21,17 +21,28 @@ -- | Scribe a LaTeX syntax into the target document. latex :: (MonadWriter t m, HasDocument t) => LaTeX -> m ()-latex x = scribe latexSrc x+latex = scribe latexSrc -- | Scribe a raw text (unescaped) into the target. raw :: (MonadWriter t m, HasDocument t) => Text -> m ()-raw x = latex $ LTX.raw x+raw = latex . LTX.raw +-- | Scribe a raw text (escaped) into the target. --- | Shows objects of type 'a' using Show interface--- Escapes LaTeX special characters.+esc :: (MonadWriter t m, HasDocument t) => Text -> m ()+esc = raw . LTX.protectText -esc :: (MonadWriter t m, HasDocument t, Show a) => a -> m ()-esc x = raw $ LTX.protectText $ pack $ Prelude.show x+-- | Shows objects of type 'a' using Show interface,+-- without escaping LaTeX special characters.++rawShow :: (MonadWriter t m, HasDocument t, Show a) => a -> m ()+rawShow = raw . pack . Prelude.show ++-- | Shows objects of type 'a' using Show interface,+-- escaping LaTeX special characters.++escShow :: (MonadWriter t m, HasDocument t, Show a) => a -> m ()+escShow = esc . pack . Prelude.show +
src/Text/Authoring/State.hs view
@@ -1,9 +1,12 @@+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE RankNTypes #-} {-# LANGUAGE TemplateHaskell #-} module Text.Authoring.State where import Control.Lens import Control.Lens.TH+import Data.Default import qualified Data.Map as Map import qualified Data.Set as Set import Data.Text (Text)@@ -22,3 +25,6 @@ instance Citation.HasDatabase AuthorState where database = citationDB+ +instance Default AuthorState where+ def = AuthorState def def def