packages feed

pandoc-crossref 0.2.2.0 → 0.2.2.1

raw patch · 2 files changed

+76/−2 lines, 2 filesdep ~basePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base

API changes (from Hackage documentation)

Files

+ ghc-7/Text/Pandoc/CrossRef/Util/Settings/Template.hs view
@@ -0,0 +1,74 @@+{-# LANGUAGE TemplateHaskell, RankNTypes, ViewPatterns, MultiWayIf #-}+module Text.Pandoc.CrossRef.Util.Settings.Template where++import Text.Pandoc.Definition+import Text.Pandoc.Builder+import Text.Pandoc.CrossRef.Util.Meta+import qualified Data.Map as M+import Language.Haskell.TH hiding (Inline)+import Language.Haskell.TH.Syntax hiding (Inline)+import Data.List+import Text.Pandoc.CrossRef.Util.Template+import Text.Pandoc.CrossRef.Util.CustomLabels (customLabel)++namedFields :: Con -> [VarStrictType]+namedFields (RecC _ fs) = fs+namedFields (ForallC _ _ c) = namedFields c+namedFields _ = []++fromRecDef :: forall t a r. Name -> t -> (Name -> Name -> Q [a]) -> (t -> [a] -> r) -> Q r+fromRecDef t cname f c = do+  info <- reify t+  reified <- case info of+                  TyConI dec -> return dec+                  _ -> fail "No cons"+  (_, cons) <- case reified of+               DataD _ _ params cons' _ -> return (params, cons')+               NewtypeD _ _ params con' _ -> return (params, [con'])+               _ -> fail "No cons"+  decs <- fmap concat . mapM (\ (name,_,_) -> f t name) . nub $ concatMap namedFields cons+  return $ c cname decs++nameDeriveSetters :: Name -> Q [Dec]+nameDeriveSetters t = fromRecDef t undefined (const makeAcc) (const id)++dropQualifiers :: Name -> Name+dropQualifiers (Name occ _) = mkName (occString occ)++makeAcc :: Name -> Q [Dec]+makeAcc (dropQualifiers -> accName) = do+    body <- [| Meta . M.singleton $(liftString $ show accName) . toMetaValue |]+    sig <- [t|forall a. ToMetaValue a => a -> Meta|]+    return+      [ SigD accName sig+      , ValD (VarP accName) (NormalB body) []+      ]++makeCon :: Name -> Name -> Q Exp+makeCon t cname = fromRecDef t cname makeCon' RecConE++makeCon' :: Name -> Name -> Q [(Name, Exp)]+makeCon' t accName = do+    VarI _ t' _ _ <- reify accName+    funT <- [t|$(conT t) -> Bool -> Int -> [Inline]|]+    inlT <- [t|$(conT t) -> [Inline]|]+    blkT <- [t|$(conT t) -> [Block]|]+    fmtT <- [t|$(conT t) -> Maybe Format|]+    boolT <- [t|$(conT t) -> Bool|]+    intT <- [t|$(conT t) -> Int|]+    tmplT <- [t|$(conT t) -> Template|]+    clT <- [t|$(conT t) -> String -> Int -> Maybe String|]+    let varName | Name (OccName n) _ <- accName = liftString n+    let dtv = return $ VarE $ mkName "dtv"+    body <-+      if+      | t' == boolT -> [|getMetaBool $(varName) $(dtv)|]+      | t' == intT -> [|read $ getMetaString $(varName) $(dtv)|]+      | t' == funT -> [|tryCapitalizeM (flip (getMetaList toInlines) $(dtv)) $(varName)|]+      | t' == inlT -> [|getMetaInlines $(varName) $(dtv)|]+      | t' == blkT -> [|getMetaBlock $(varName) $(dtv)|]+      | t' == tmplT -> [|makeTemplate $(dtv) $ getMetaInlines $(varName) $(dtv)|]+      | t' == clT -> [|customLabel $(dtv)|]+      | t' == fmtT -> return $ VarE $ mkName "fmt"+      | otherwise -> fail $ show t'+    return [(accName, body)]
pandoc-crossref.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/  name:                pandoc-crossref-version:             0.2.2.0+version:             0.2.2.1 synopsis:            Pandoc filter for cross-references description:         pandoc-crossref is a pandoc filter for numbering figures, equations, tables and cross-references to them. license:             GPL-2@@ -25,7 +25,7 @@ source-repository this   type: git   location: https://github.com/lierdakil/pandoc-crossref-  tag: v0.2.2.0+  tag: v0.2.2.1  library   exposed-modules:     Text.Pandoc.CrossRef