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 | ||||
| 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"] | ||||
|  | ||||
| @ -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