diff --git a/Shake.hs b/Shake.hs index 2cbbaa2d0..e322ecb47 100755 --- a/Shake.hs +++ b/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 auto-installs the packages above. Also, some rules require: -- site/hakyll-std/hakyll-std - runhaskell - groff - m4 @@ -304,19 +303,6 @@ main = do let input = "site" dropDirectory2 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 need webhtmlpages @@ -347,10 +333,8 @@ main = do phony "Clean" $ do need ["clean"] - putNormal "Cleaning all hakyll generated files" + putNormal "Cleaning all site generated files" removeFilesAfter "site" ["_*"] - putNormal "Cleaning executables" - removeFilesAfter "." $ [ hakyllstd ] putNormal "Cleaning object files" -- also forces rebuild of executables removeFilesAfter "tools" ["*.o","*.p_o","*.hi"] removeFilesAfter "site" ["*.o","*.p_o","*.hi"] diff --git a/site/hakyll-std/LICENSE b/site/hakyll-std/LICENSE deleted file mode 100644 index c304a9483..000000000 --- a/site/hakyll-std/LICENSE +++ /dev/null @@ -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. diff --git a/site/hakyll-std/Setup.hs b/site/hakyll-std/Setup.hs deleted file mode 100644 index 9a994af67..000000000 --- a/site/hakyll-std/Setup.hs +++ /dev/null @@ -1,2 +0,0 @@ -import Distribution.Simple -main = defaultMain diff --git a/site/hakyll-std/TableOfContents.hs b/site/hakyll-std/TableOfContents.hs deleted file mode 100644 index 325b0e12a..000000000 --- a/site/hakyll-std/TableOfContents.hs +++ /dev/null @@ -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 = "" - 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 diff --git a/site/hakyll-std/hakyll-std.cabal b/site/hakyll-std/hakyll-std.cabal deleted file mode 100644 index d997bc823..000000000 --- a/site/hakyll-std/hakyll-std.cabal +++ /dev/null @@ -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 -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 diff --git a/site/hakyll-std/hakyll-std.hs b/site/hakyll-std/hakyll-std.hs deleted file mode 100755 index 72f7faf13..000000000 --- a/site/hakyll-std/hakyll-std.hs +++ /dev/null @@ -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" diff --git a/site/hakyll-std/package.yaml b/site/hakyll-std/package.yaml deleted file mode 100644 index 2181ad5d3..000000000 --- a/site/hakyll-std/package.yaml +++ /dev/null @@ -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 -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