Shake.hs, site/hakyll-std: remove mentions/dependencies of hakyll-std
This commit is contained in:
parent
567a86b810
commit
1a909fe2a3
18
Shake.hs
18
Shake.hs
@ -19,7 +19,6 @@ compiling is recommended; run the script in interpreted mode to do that.
|
|||||||
|
|
||||||
It requires stack (https://haskell-lang.org/get-started) and
|
It requires stack (https://haskell-lang.org/get-started) and
|
||||||
auto-installs the packages above. Also, some rules require:
|
auto-installs the packages above. Also, some rules require:
|
||||||
- site/hakyll-std/hakyll-std
|
|
||||||
- runhaskell
|
- runhaskell
|
||||||
- groff
|
- groff
|
||||||
- m4
|
- m4
|
||||||
@ -304,19 +303,6 @@ main = do
|
|||||||
let input = "site" </> dropDirectory2 out
|
let input = "site" </> dropDirectory2 out
|
||||||
copyFile' input out
|
copyFile' input out
|
||||||
|
|
||||||
-- build standard hakyll script used for site rendering
|
|
||||||
hakyllstd %> \out -> do
|
|
||||||
let dir = takeDirectory out
|
|
||||||
need [out <.> "hs", dir </> "TableOfContents.hs"] -- XXX hard-coded dep
|
|
||||||
unit $ liftIO $
|
|
||||||
cmd (Cwd dir) "./hakyll-std.hs"
|
|
||||||
`catch` (\(e::IOException) -> putStr $ unlines $
|
|
||||||
["I could not run ./hakyll-std.hs in "++dir++" to install Hakyll."
|
|
||||||
,"If you see a hakyll-std build error after this, please do it manually:"
|
|
||||||
,"$ (cd site/hakyll-std; ./hakyll-std.hs)"
|
|
||||||
,"and try again."
|
|
||||||
])
|
|
||||||
|
|
||||||
phony "website-render" $ do
|
phony "website-render" $ do
|
||||||
need webhtmlpages
|
need webhtmlpages
|
||||||
|
|
||||||
@ -347,10 +333,8 @@ main = do
|
|||||||
|
|
||||||
phony "Clean" $ do
|
phony "Clean" $ do
|
||||||
need ["clean"]
|
need ["clean"]
|
||||||
putNormal "Cleaning all hakyll generated files"
|
putNormal "Cleaning all site generated files"
|
||||||
removeFilesAfter "site" ["_*"]
|
removeFilesAfter "site" ["_*"]
|
||||||
putNormal "Cleaning executables"
|
|
||||||
removeFilesAfter "." $ [ hakyllstd ]
|
|
||||||
putNormal "Cleaning object files" -- also forces rebuild of executables
|
putNormal "Cleaning object files" -- also forces rebuild of executables
|
||||||
removeFilesAfter "tools" ["*.o","*.p_o","*.hi"]
|
removeFilesAfter "tools" ["*.o","*.p_o","*.hi"]
|
||||||
removeFilesAfter "site" ["*.o","*.p_o","*.hi"]
|
removeFilesAfter "site" ["*.o","*.p_o","*.hi"]
|
||||||
|
|||||||
@ -1,30 +0,0 @@
|
|||||||
Copyright (c) 2015
|
|
||||||
|
|
||||||
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 Your name here 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.
|
|
||||||
@ -1,2 +0,0 @@
|
|||||||
import Distribution.Simple
|
|
||||||
main = defaultMain
|
|
||||||
@ -1,91 +0,0 @@
|
|||||||
-- from https://github.com/blaenk/blaenk.github.io
|
|
||||||
|
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
|
||||||
{-# LANGUAGE CPP #-}
|
|
||||||
|
|
||||||
module TableOfContents (
|
|
||||||
tableOfContents,
|
|
||||||
ignoreTOC,
|
|
||||||
collectHeaders,
|
|
||||||
TOCAlignment(TOCOff,TOCLeft,TOCRight)
|
|
||||||
) where
|
|
||||||
|
|
||||||
import Text.Pandoc
|
|
||||||
import Text.Pandoc.Walk (walk, query)
|
|
||||||
import Text.Pandoc.Class (runPure)
|
|
||||||
import Text.Pandoc.Builder (text, toList)
|
|
||||||
import Text.Pandoc.Options (def)
|
|
||||||
|
|
||||||
import Data.Either (fromRight)
|
|
||||||
import Data.List (groupBy)
|
|
||||||
import Data.Tree (Forest, Tree(Node))
|
|
||||||
#if !(MIN_VERSION_base(4,11,0))
|
|
||||||
import Data.Monoid ((<>), mconcat)
|
|
||||||
#endif
|
|
||||||
import Data.Function (on)
|
|
||||||
import Data.Maybe (fromMaybe)
|
|
||||||
import Data.Text (unpack)
|
|
||||||
|
|
||||||
import Text.Blaze.Html (preEscapedToHtml, (!))
|
|
||||||
import Text.Blaze.Html.Renderer.String (renderHtml)
|
|
||||||
import qualified Text.Blaze.Html5 as H
|
|
||||||
import qualified Text.Blaze.Html5.Attributes as A
|
|
||||||
|
|
||||||
data TOCAlignment = TOCOff | TOCLeft | TOCRight
|
|
||||||
|
|
||||||
headerLevel :: Block -> Int
|
|
||||||
headerLevel (Header level _ _) = level
|
|
||||||
headerLevel _ = error "not a header"
|
|
||||||
|
|
||||||
ignoreTOC :: Block -> Block
|
|
||||||
ignoreTOC (Header level (ident, classes, params) inlines) =
|
|
||||||
Header level (ident, "notoc" : classes, params) inlines
|
|
||||||
ignoreTOC x = x
|
|
||||||
|
|
||||||
collectHeaders :: Block -> [Block]
|
|
||||||
collectHeaders header@(Header _ (_, classes, _) _) =
|
|
||||||
if "notoc" `elem` classes
|
|
||||||
then []
|
|
||||||
else [header]
|
|
||||||
collectHeaders _ = []
|
|
||||||
|
|
||||||
groupByHierarchy :: [Block] -> Forest Block
|
|
||||||
groupByHierarchy = map (\(x:xs) -> Node x (groupByHierarchy xs)) . groupBy ((<) `on` headerLevel)
|
|
||||||
|
|
||||||
markupLink :: Attr -> [Inline] -> Inline
|
|
||||||
markupLink (headerId, _, headerProperties) headerText
|
|
||||||
= let linkText = fromMaybe headerText (fmap (toList . text) $ lookup "toc" headerProperties)
|
|
||||||
in Link nullAttr linkText (("#" ++ headerId), headerId)
|
|
||||||
|
|
||||||
markupHeader :: Tree Block -> [Block]
|
|
||||||
markupHeader n@(Node (Header _ hAttr hText) headers)
|
|
||||||
| headers == [] = [link]
|
|
||||||
| otherwise = [link, markupHeaders headers]
|
|
||||||
where link = Plain [markupLink hAttr hText]
|
|
||||||
markupHeader n = error $ "'markupHeader' should only be passed a 'Node $ Header'\n"
|
|
||||||
++ " saw: " ++ show n
|
|
||||||
|
|
||||||
markupHeaders :: Forest Block -> Block
|
|
||||||
markupHeaders = OrderedList (1, Decimal, Period) . map markupHeader
|
|
||||||
|
|
||||||
createTable :: TOCAlignment -> Forest Block -> Block
|
|
||||||
createTable _ [] = Null
|
|
||||||
createTable alignment headers
|
|
||||||
= let alignAttr = case alignment of
|
|
||||||
TOCRight -> " class=\"right-toc\""
|
|
||||||
_ -> ""
|
|
||||||
navBegin = "<nav id=\"toc\"" ++ alignAttr ++ ">"
|
|
||||||
navEnd = "</nav>"
|
|
||||||
tocDoc = Pandoc nullMeta [Para [Str "Contents"], markupHeaders headers]
|
|
||||||
tocString = unpack . fromRight mempty . runPure . writeHtml5String def $ tocDoc
|
|
||||||
in RawBlock "html" (navBegin ++ "\n" ++ tocString ++ "\n" ++ navEnd)
|
|
||||||
|
|
||||||
generateTOC :: [Block] -> TOCAlignment -> Block -> Block
|
|
||||||
generateTOC headers alignment x@(BulletList (( (( Plain ((Str "toc"):_)):_)):_))
|
|
||||||
= createTable alignment . groupByHierarchy $ headers
|
|
||||||
generateTOC _ _ x = x
|
|
||||||
|
|
||||||
tableOfContents :: TOCAlignment -> Pandoc -> Pandoc
|
|
||||||
tableOfContents TOCOff ast = walk ignoreTOC ast
|
|
||||||
tableOfContents alignment ast = let headers = query collectHeaders ast
|
|
||||||
in walk (generateTOC headers alignment) ast
|
|
||||||
@ -1,45 +0,0 @@
|
|||||||
-- This file has been generated from package.yaml by hpack version 0.5.2.
|
|
||||||
--
|
|
||||||
-- see: https://github.com/sol/hpack
|
|
||||||
|
|
||||||
name: hakyll-std
|
|
||||||
version: 0.1.0
|
|
||||||
synopsis: Generic hakyll site builder script (shipped with hledger)
|
|
||||||
description: A simple hakyll website builder suitable for (eg) software-related websites, intended to be used as-is without recompilation. Features:
|
|
||||||
.
|
|
||||||
- renders markdown and common web file types found in standard places
|
|
||||||
- a site.tmpl template will be used when rendering markdown files
|
|
||||||
- "- toc" in markdown files is replaced by a table of contents
|
|
||||||
- fenced code blocks are appropriately syntax-highlighted by highlighting-kate
|
|
||||||
(you should provide a syntax.css)
|
|
||||||
.
|
|
||||||
See the module doc (follow homepage link) for precise details.
|
|
||||||
category: Web
|
|
||||||
homepage: https://github.com/simonmichael/hledger/blob/master/doc/site/hakyll-std.hs
|
|
||||||
bug-reports: https://github.com/simonmichael/hledger/issues
|
|
||||||
author: Simon Michael <simon@joyful.com>
|
|
||||||
maintainer: -
|
|
||||||
license: BSD3
|
|
||||||
license-file: LICENSE
|
|
||||||
build-type: Simple
|
|
||||||
cabal-version: >= 1.10
|
|
||||||
|
|
||||||
source-repository head
|
|
||||||
type: git
|
|
||||||
location: https://github.com/simonmichael/hledger
|
|
||||||
|
|
||||||
executable hakyll-std
|
|
||||||
main-is: hakyll-std.hs
|
|
||||||
build-depends:
|
|
||||||
base >= 4.7 && < 5
|
|
||||||
, hakyll >=4.7
|
|
||||||
, pandoc
|
|
||||||
, pandoc-types
|
|
||||||
, process
|
|
||||||
, directory
|
|
||||||
, data-default
|
|
||||||
, blaze-html
|
|
||||||
, containers
|
|
||||||
other-modules:
|
|
||||||
TableOfContents
|
|
||||||
default-language: Haskell2010
|
|
||||||
@ -1,117 +0,0 @@
|
|||||||
#!/usr/bin/env stack
|
|
||||||
{- stack exec --verbosity info
|
|
||||||
--package hakyll
|
|
||||||
ghc
|
|
||||||
-}
|
|
||||||
-- pandoc must be >= 2
|
|
||||||
--
|
|
||||||
-- must use older stack-ghc8.2.yaml for hakyll/pandoc
|
|
||||||
-- (hledger and Shake use stack.yaml by default so you may
|
|
||||||
-- end up downloading and building two large snapshots)
|
|
||||||
--
|
|
||||||
-- hakyll-std will go away soon hopefully
|
|
||||||
|
|
||||||
{- |
|
|
||||||
|
|
||||||
A simple hakyll website builder suitable for software project sites,
|
|
||||||
intended to be used as-is without recompilation. Functionality:
|
|
||||||
|
|
||||||
- copies these static files to _site/ :
|
|
||||||
*.{html,htm,css,js,gif,jpg,jpeg,png}
|
|
||||||
{css,img,js,files}/** (** means everything below)
|
|
||||||
site/{css,img,js,files,etc}/**
|
|
||||||
doc/**.{html,htm,txt,gif,jpg,jpeg,png}
|
|
||||||
|
|
||||||
- renders these markdown files to _site/*.html :
|
|
||||||
*.{md,mdwn,markdown}
|
|
||||||
doc/**.{md,mdwn,markdown}
|
|
||||||
|
|
||||||
- applies this template file to markdown content:
|
|
||||||
site.tmpl or site/site.tmpl (the first found)
|
|
||||||
|
|
||||||
- a single markdown list item containing the word "toc" is replaced by
|
|
||||||
a table of contents based on headings
|
|
||||||
|
|
||||||
- syntax highlighting of fenced code blocks in markdown is enabled
|
|
||||||
(if you provide suitable kate styles, eg a syntax.css)
|
|
||||||
|
|
||||||
Usage:
|
|
||||||
|
|
||||||
$ hakyll-std [--help|clean|build|preview|...] # standard hakyll options
|
|
||||||
|
|
||||||
-}
|
|
||||||
|
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
|
||||||
|
|
||||||
import Control.Monad
|
|
||||||
import Data.Default
|
|
||||||
import Hakyll
|
|
||||||
import System.Directory
|
|
||||||
import System.Environment (getArgs)
|
|
||||||
import System.Exit (exitSuccess)
|
|
||||||
import System.Process (system)
|
|
||||||
-- import Text.Highlighting.Kate (pygments, kate, espresso, tango, haddock, monochrome, zenburn)
|
|
||||||
import Text.Pandoc.Options
|
|
||||||
|
|
||||||
import TableOfContents (tableOfContents, TOCAlignment(TOCRight))
|
|
||||||
|
|
||||||
import Debug.Trace
|
|
||||||
strace :: Show a => a -> a
|
|
||||||
strace a = trace (show a) a
|
|
||||||
|
|
||||||
filesToRender =
|
|
||||||
["*.md"
|
|
||||||
,"*.mdwn"
|
|
||||||
,"*.markdown"
|
|
||||||
,"doc/**.md"
|
|
||||||
,"doc/**.mdwn"
|
|
||||||
,"doc/**.markdown"
|
|
||||||
]
|
|
||||||
|
|
||||||
pandocReaderOptions = def
|
|
||||||
{ readerExtensions = pandocExtensions
|
|
||||||
}
|
|
||||||
|
|
||||||
pandocWriterOptions = def
|
|
||||||
--- {writerHighlight=True
|
|
||||||
-- this would change the value of pandoc's $highlight-css$ var
|
|
||||||
-- for now, let the user provide these styles
|
|
||||||
-- ,writerHighlightStyle=tango
|
|
||||||
--- }
|
|
||||||
|
|
||||||
pandocTransform = tableOfContents TOCRight
|
|
||||||
|
|
||||||
main = do
|
|
||||||
args <- getArgs
|
|
||||||
when (any (`elem` args) ["--version"]) $ do
|
|
||||||
putStrLn "hakyll standard site builder v0.1"
|
|
||||||
exitSuccess
|
|
||||||
|
|
||||||
hakyll $ do
|
|
||||||
|
|
||||||
-- there might or might not be a site template in ./ or ./site/
|
|
||||||
mtmpl <- preprocess $ do
|
|
||||||
t1 <- doesFileExist "site.tmpl"
|
|
||||||
t2 <- doesFileExist "site/site.tmpl"
|
|
||||||
return $ case (t1, t2) of (False, True) -> Just "site/site.tmpl"
|
|
||||||
(True, _) -> Just "site.tmpl"
|
|
||||||
(False, False) -> Nothing
|
|
||||||
case mtmpl of
|
|
||||||
Just tmpl -> match tmpl $ compile templateCompiler
|
|
||||||
Nothing -> return ()
|
|
||||||
|
|
||||||
match (foldl1 (.||.) filesToRender) $ do
|
|
||||||
route $ setExtension "html"
|
|
||||||
compile $
|
|
||||||
pandocCompilerWithTransformM pandocReaderOptions pandocWriterOptions (return . pandocTransform)
|
|
||||||
>>= (case mtmpl of
|
|
||||||
Just tmpl -> loadAndApplyTemplate (fromCapture tmpl "") defaultContext
|
|
||||||
Nothing -> return)
|
|
||||||
>>= relativizeUrls
|
|
||||||
|
|
||||||
-- this fails the first time after a clean because it runs before README.html generation
|
|
||||||
-- when ("build" `elem` args) $ preprocess linkReadmeToIndex
|
|
||||||
|
|
||||||
-- can't do anything here, hakyll exits
|
|
||||||
|
|
||||||
linkReadmeToIndex = void $ system "ln -sf README.html _site/index.html"
|
|
||||||
@ -1,39 +0,0 @@
|
|||||||
# hpack specification for generating the cabal file
|
|
||||||
# (run "hpack" in this directory)
|
|
||||||
|
|
||||||
name : hakyll-std
|
|
||||||
version : 0.1.0
|
|
||||||
license : BSD3
|
|
||||||
synopsis : Generic hakyll site builder script (shipped with hledger)
|
|
||||||
description : |
|
|
||||||
A simple hakyll website builder suitable for (eg) software-related websites, intended to be used as-is without recompilation. Features:
|
|
||||||
|
|
||||||
- renders markdown and common web file types found in standard places
|
|
||||||
- a site.tmpl template will be used when rendering markdown files
|
|
||||||
- "- toc" in markdown files is replaced by a table of contents
|
|
||||||
- fenced code blocks are appropriately syntax-highlighted by highlighting-kate
|
|
||||||
(you should provide a syntax.css)
|
|
||||||
|
|
||||||
See the module doc (follow homepage link) for precise details.
|
|
||||||
|
|
||||||
category : Web
|
|
||||||
github : simonmichael/hledger
|
|
||||||
homepage : https://github.com/simonmichael/hledger/blob/master/doc/site/hakyll-std.hs
|
|
||||||
author : Simon Michael <simon@joyful.com>
|
|
||||||
maintainer : '-'
|
|
||||||
|
|
||||||
dependencies:
|
|
||||||
- base >=4.7 && <4.12
|
|
||||||
- hakyll >=4.7
|
|
||||||
- pandoc #>=1.15
|
|
||||||
- pandoc-types
|
|
||||||
- process
|
|
||||||
- directory
|
|
||||||
- data-default
|
|
||||||
- blaze-html
|
|
||||||
- containers
|
|
||||||
|
|
||||||
executables:
|
|
||||||
hakyll-std:
|
|
||||||
main: hakyll-std.hs
|
|
||||||
other-modules: TableOfContents
|
|
||||||
Loading…
Reference in New Issue
Block a user