packages feed

pdf-slave-template (empty) → 1.1.0.0

raw patch · 7 files changed

+344/−0 lines, 7 filesdep +aesondep +basedep +base64-bytestringsetup-changed

Dependencies added: aeson, base, base64-bytestring, bytestring, containers, text

Files

+ CHANGELOG.md view
@@ -0,0 +1,4 @@+1.1.0.0+=======++* Initial extraction from `pdf-slave` package.
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright Anton Gushcha (c) 2016++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.++    * Redistributions in binary form must reproduce the above+      copyright notice, this list of conditions and the following+      disclaimer in the documentation and/or other materials provided+      with the distribution.++    * Neither the name of Anton Gushcha nor the names of other+      contributors may be used to endorse or promote products derived+      from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ README.md view
@@ -0,0 +1,6 @@+pdf-slave-template+==================++Template format definition for [pdf-slave](http://hackage.haskell.org/package/pdf-slave) package. See it for full info.++The package is extracte to allow building the template definition with GHCJS.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ pdf-slave-template.cabal view
@@ -0,0 +1,39 @@+name:                pdf-slave-template+version:             1.1.0.0+synopsis:            Template format definition for pdf-slave tool+description:         Please see README.md+homepage:            https://github.com/ncrashed/pdf-slave#readme+license:             BSD3+license-file:        LICENSE+author:              Anton Gushcha+maintainer:          ncrashed@gmail.com+copyright:           Anton Gushcha 2016+category:            Web+build-type:          Simple+extra-source-files:+  CHANGELOG.md+  README.md+  stack.yaml+cabal-version:       >=1.10++library+  hs-source-dirs:      src+  exposed-modules:     Text.PDF.Slave.Template+  build-depends:+      base              >= 4.7    && < 5+    , aeson             >= 0.11   && < 0.12+    , base64-bytestring >= 1.0    && < 1.1+    , bytestring        >= 0.10   && < 0.11+    , containers        >= 0.5    && < 0.6+    , text              >= 1.2    && < 1.3++  default-language:    Haskell2010+  default-extensions:+    DeriveGeneric+    OverloadedStrings+    RecordWildCards+    ScopedTypeVariables++source-repository head+  type:     git+  location: https://github.com/ncrashed/pdf-slave
+ src/Text/PDF/Slave/Template.hs view
@@ -0,0 +1,197 @@+-- | Defines document template+module Text.PDF.Slave.Template(+    TemplateName+  , TemplateInput+  , TemplateBody+  , TemplateBibtex+  , DependencyBody+  , BibTexBody+  , TemplateDependency(..)+  , Template(..)+  , TemplateDependencyFile(..)+  , TemplateFile(..)+  ) where++import Control.Monad (mzero)+import Data.ByteString (ByteString)+import Data.Monoid+import Data.Text as T+import Data.Aeson+import GHC.Generics++import qualified Data.ByteString.Base64 as B64+import qualified Data.Map.Strict        as M+import qualified Data.Text.Encoding     as T++-- | Template unique name+type TemplateName = Text++-- | A template takes simple YAML document as input+type TemplateInput = Value++-- | Template body is text with .htex content+type TemplateBody = Text++-- | Template can define additional bibtex database+type TemplateBibtex = Text++-- | Dependency can be a binary file+type DependencyBody = ByteString++-- | Content of bibtex file+type BibTexBody = Text++-- | Template has different types of dependencies, each type of the dependecy+-- has own affect on rendering pipe.+data TemplateDependency =+  -- | Bibtex file for references to other documents. Need call to bibtex+    BibtexDep BibTexBody+  -- | HTex file that need to be compiled to .tex file+  | TemplateDep Template+  -- | HTex file that need to be compiled to .pdf file+  | TemplatePdfDep Template+  -- | Any other file that doesn't need a compilation (listings, images, etc)+  | OtherDep DependencyBody+  deriving (Generic, Show)++instance FromJSON TemplateDependency where+  parseJSON val@(Object o) = do+    depType <- o .: "type"+    case T.toLower . T.strip $ depType of+      "bibtex"       -> BibtexDep       <$> o .: "body"+      "template"     -> TemplateDep     <$> parseJSON val+      "template_pdf" -> TemplatePdfDep  <$> parseJSON val+      "other"        -> do+        (t :: Text) <- o .: "body"+        either (\e -> fail $ "Cannot decode dependency body (base64): " <> e) (return . OtherDep) $+          B64.decode . T.encodeUtf8 $ t+      _ -> fail $ "Unknown template type " <> unpack depType+  parseJSON _ = mzero++instance ToJSON TemplateDependency where+  toJSON d = case d of+    BibtexDep body -> object [+        "type" .= ("bibtex" :: Text)+      , "body" .= body+      ]+    TemplateDep body -> let+      Object o1 = object [ "type" .= ("template" :: Text) ]+      Object o2 = toJSON body+      in Object (o1 <> o2)+    TemplatePdfDep body -> let+      Object o1 = object [ "type" .= ("template_pdf" :: Text) ]+      Object o2 = toJSON body+      in Object (o1 <> o2)+    OtherDep bs -> object [+        "type" .= ("other" :: Text)+      , "body" .= (T.decodeUtf8 . B64.encode $ bs)+      ]++-- | Description of document template+data Template = Template {+  -- | Template has human readable name+    templateName          :: TemplateName+  -- | Template expects input in YAML format+  , templateInput         :: Maybe TemplateInput+  -- | Template contents+  , templateBody          :: TemplateBody+  -- | Template dependencies (bibtex, listings, other htex files)+  , templateDeps          :: M.Map TemplateName TemplateDependency+  -- | Additional flags for `haskintex`+  , templateHaskintexOpts :: [Text]+  } deriving (Generic, Show)++instance FromJSON Template where+  parseJSON (Object o) = Template+    <$> o .: "name"+    <*> o .:? "input"+    <*> o .: "body"+    <*> o .:? "dependencies" .!= mempty+    <*> o .:? "haskintex-opts" .!= mempty+  parseJSON _ = mzero++instance ToJSON Template where+  toJSON Template{..} = object [+      "name"           .= templateName+    , "input"          .= templateInput+    , "body"           .= templateBody+    , "dependencies"   .= templateDeps+    , "haskintex-opts" .= templateHaskintexOpts+    ]++-- | Same as 'TemplateDependency' but keeps contents in separate files+data TemplateDependencyFile =+  -- | Bibtex file for references to other documents. Need call to bibtex.+  -- Name of dependency is a filename with contents.+    BibtexDepFile+  -- | HTex file that need to be compiled to .tex file+  -- Name of dependency defines a subfolder for the template.+  | TemplateDepFile TemplateFile+  -- | HTex file that need to be compiled to .pdf file+  -- Name of dependency deinfes a subfolder for the template.+  | TemplatePdfDepFile TemplateFile+  -- | Any other file that doesn't need a compilation (listings, images, etc)+  -- Name of dependency is a filename with contents.+  | OtherDepFile+  deriving (Generic, Show)++instance FromJSON TemplateDependencyFile where+  parseJSON val@(Object o) = do+    depType <- o .: "type"+    case T.toLower . T.strip $ depType of+      "bibtex"       -> pure BibtexDepFile+      "template"     -> TemplateDepFile     <$> parseJSON val+      "template_pdf" -> TemplatePdfDepFile  <$> parseJSON val+      "other"        -> pure OtherDepFile+      _ -> fail $ "Unknown template type " <> unpack depType+  parseJSON _ = mzero++instance ToJSON TemplateDependencyFile where+  toJSON d = case d of+    BibtexDepFile -> object [+        "type" .= ("bibtex" :: Text)+      ]+    TemplateDepFile body -> let+      Object o1 = object [ "type" .= ("template" :: Text) ]+      Object o2 = toJSON body+      in Object (o1 <> o2)+    TemplatePdfDepFile body -> let+      Object o1 = object [ "type" .= ("template_pdf" :: Text) ]+      Object o2 = toJSON body+      in Object (o1 <> o2)+    OtherDepFile -> object [+        "type" .= ("other" :: Text)+      ]++-- | Same as 'Template', but holds info about template content and dependencies+-- in other files.+data TemplateFile = TemplateFile {+  -- | Template has human readable name+    templateFileName      :: TemplateName+  -- | Template expects input in JSON format. The field contains filename of the YAML file.+  , templateFileInput     :: Maybe Text+  -- | Template contents filename.+  , templateFileBody      :: Text+  -- | Template dependencies (bibtex, listings, other htex files)+  , templateFileDeps      :: M.Map TemplateName TemplateDependencyFile+  -- | Additional flags for `haskintex`+  , templateFileHaskintexOpts :: [Text]+  } deriving (Generic, Show)++instance FromJSON TemplateFile where+  parseJSON (Object o) = TemplateFile+    <$> o .: "name"+    <*> o .:? "input"+    <*> o .: "body"+    <*> o .:? "dependencies" .!= mempty+    <*> o .:? "haskintex-opts" .!= mempty+  parseJSON _ = mzero++instance ToJSON TemplateFile where+  toJSON TemplateFile{..} = object [+      "name"           .= templateFileName+    , "input"          .= templateFileInput+    , "body"           .= templateFileBody+    , "dependencies"   .= templateFileDeps+    , "haskintex-opts" .= templateFileHaskintexOpts+    ]
+ stack.yaml view
@@ -0,0 +1,66 @@+# This file was automatically generated by 'stack init'+#+# Some commonly used options have been documented as comments in this file.+# For advanced use and comprehensive documentation of the format, please see:+# http://docs.haskellstack.org/en/stable/yaml_configuration/++# Resolver to choose a 'specific' stackage snapshot or a compiler version.+# A snapshot resolver dictates the compiler version and the set of packages+# to be used for project dependencies. For example:+#+# resolver: lts-3.5+# resolver: nightly-2015-09-21+# resolver: ghc-7.10.2+# resolver: ghcjs-0.1.0_ghc-7.10.2+# resolver:+#  name: custom-snapshot+#  location: "./custom-snapshot.yaml"+resolver: lts-7.14++# User packages to be built.+# Various formats can be used as shown in the example below.+#+# packages:+# - some-directory+# - https://example.com/foo/bar/baz-0.0.2.tar.gz+# - location:+#    git: https://github.com/commercialhaskell/stack.git+#    commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a+# - location: https://github.com/commercialhaskell/stack/commit/e7b331f14bcffb8367cd58fbfc8b40ec7642100a+#   extra-dep: true+#  subdirs:+#  - auto-update+#  - wai+#+# A package marked 'extra-dep: true' will only be built if demanded by a+# non-dependency (i.e. a user package), and its test suites and benchmarks+# will not be run. This is useful for tweaking upstream packages.+packages:+- '.'+# Dependency packages to be pulled from upstream that are not in the resolver+# (e.g., acme-missiles-0.3)+extra-deps: []++# Override default flag values for local packages and extra-deps+flags: {}++# Extra package databases containing global packages+extra-package-dbs: []++# Control whether we use the GHC we find on the path+# system-ghc: true+#+# Require a specific version of stack, using version ranges+# require-stack-version: -any # Default+# require-stack-version: ">=1.3"+#+# Override the architecture used by stack, especially useful on Windows+# arch: i386+# arch: x86_64+#+# Extra directories used by stack for building+# extra-include-dirs: [/path/to/dir]+# extra-lib-dirs: [/path/to/dir]+#+# Allow a newer minor version of GHC than the snapshot specifies+# compiler-check: newer-minor