site: simplify man page uris; shake cleanups
This commit is contained in:
		
							parent
							
								
									5d9d155ca0
								
							
						
					
					
						commit
						775ab2fd4e
					
				
							
								
								
									
										99
									
								
								Shake.hs
									
									
									
									
									
								
							
							
						
						
									
										99
									
								
								Shake.hs
									
									
									
									
									
								
							| @ -54,20 +54,6 @@ buildDir = ".build" | |||||||
| pandoc = | pandoc = | ||||||
|   -- "stack exec -- pandoc" -- use the pandoc required above |   -- "stack exec -- pandoc" -- use the pandoc required above | ||||||
|   "pandoc"                  -- use pandoc in PATH (faster) |   "pandoc"                  -- use pandoc in PATH (faster) | ||||||
| manpages = [ -- in suggested reading order |  | ||||||
|    "hledger.1" |  | ||||||
|   ,"hledger-ui.1" |  | ||||||
|   ,"hledger-web.1" |  | ||||||
|   ,"hledger-api.1" |  | ||||||
|   ,"hledger_journal.5" |  | ||||||
|   ,"hledger_csv.5" |  | ||||||
|   ,"hledger_timelog.5" |  | ||||||
|   ,"hledger_timedot.5" |  | ||||||
|   ] |  | ||||||
| 
 |  | ||||||
| manpageDir p |  | ||||||
|   | '_' `elem` p = "hledger-lib" </> "doc" |  | ||||||
|   | otherwise    = dropExtension p </> "doc" |  | ||||||
| 
 | 
 | ||||||
| main = do | main = do | ||||||
| 
 | 
 | ||||||
| @ -103,6 +89,32 @@ main = do | |||||||
|       ] |       ] | ||||||
| 
 | 
 | ||||||
|     -- man pages |     -- man pages | ||||||
|  | 
 | ||||||
|  |     let | ||||||
|  |       manpageNames = [ -- in suggested reading order | ||||||
|  |          "hledger.1" | ||||||
|  |         ,"hledger-ui.1" | ||||||
|  |         ,"hledger-web.1" | ||||||
|  |         ,"hledger-api.1" | ||||||
|  |         ,"hledger_journal.5" | ||||||
|  |         ,"hledger_csv.5" | ||||||
|  |         ,"hledger_timelog.5" | ||||||
|  |         ,"hledger_timedot.5" | ||||||
|  |         ] | ||||||
|  | 
 | ||||||
|  |       -- hledger.1 -> hledger, hledger_journal.5 -> journal | ||||||
|  |       manpageNameToUri m | "hledger_" `isPrefixOf` m = dropExtension $ drop 8 m | ||||||
|  |                          | otherwise                 = dropExtension m | ||||||
|  | 
 | ||||||
|  |       -- hledger -> hledger.1, journal -> hledger_journal.5 | ||||||
|  |       manpageUriToName u | "hledger" `isPrefixOf` u = u <.> "1" | ||||||
|  |                          | otherwise                = "hledger_" ++ u <.> "5" | ||||||
|  | 
 | ||||||
|  |       -- hledger.1 -> hledger/doc, hledger_journal.5 -> hledger-lib/doc | ||||||
|  |       manpageDir m | ||||||
|  |         | '_' `elem` m = "hledger-lib" </> "doc" | ||||||
|  |         | otherwise    = dropExtension m </> "doc" | ||||||
|  | 
 | ||||||
|     -- method 1: |     -- method 1: | ||||||
| 
 | 
 | ||||||
|     -- pandoc filters, these adjust master md files for web or man output |     -- pandoc filters, these adjust master md files for web or man output | ||||||
| @ -112,10 +124,10 @@ main = do | |||||||
|       cmd ("stack ghc") out |       cmd ("stack ghc") out | ||||||
| 
 | 
 | ||||||
|     -- man pages adjusted for man and converted to nroff, by pandoc |     -- man pages adjusted for man and converted to nroff, by pandoc | ||||||
|     let manpageNroffs = [manpageDir p </> p | p <- manpages] |     let manpages = [manpageDir m </> m | m <- manpageNames] -- hledger/doc/hledger.1, hledger-lib/doc/hledger_journal.5 | ||||||
|     phony "manpages" $ need manpageNroffs |     phony "manpages" $ need manpages | ||||||
|     manpageNroffs |%> \out -> do |     manpages |%> \out -> do | ||||||
|       let md = out <.> "md" |       let md = out <.> "md"  -- hledger/doc/hledger.1.md | ||||||
|           tmpl = "doc/manpage.nroff" |           tmpl = "doc/manpage.nroff" | ||||||
|       need $ md : tmpl : pandocFilters |       need $ md : tmpl : pandocFilters | ||||||
|       cmd pandoc md "-s --template" tmpl |       cmd pandoc md "-s --template" tmpl | ||||||
| @ -127,11 +139,11 @@ main = do | |||||||
|         "-o" out |         "-o" out | ||||||
| 
 | 
 | ||||||
|     -- man pages adjusted for web by pandoc (ready for hakyll) |     -- man pages adjusted for web by pandoc (ready for hakyll) | ||||||
|     let webManpageMds = ["site" </> p <.>".md" | p <- manpages] |     let webmanpages = ["site" </> manpageNameToUri m <.>".md" | m <- manpageNames] -- site/hledger.md, site/journal.md | ||||||
|     phony "webmanpages" $ need webManpageMds |     phony "webmanpages" $ need webmanpages | ||||||
|     webManpageMds |%> \out -> do |     webmanpages |%> \out -> do | ||||||
|       let p = dropExtension $ takeFileName out |       let m = manpageUriToName $ dropExtension $ takeFileName out  -- hledger.1 | ||||||
|           md = manpageDir p </> p <.> "md" |           md = manpageDir m </> m <.> "md"                         -- hledger/doc/hledger.1.md | ||||||
|       need $ md : pandocFilters |       need $ md : pandocFilters | ||||||
|       cmd pandoc md |       cmd pandoc md | ||||||
|         "--filter doc/pandoc-demote-headers" |         "--filter doc/pandoc-demote-headers" | ||||||
| @ -142,9 +154,9 @@ main = do | |||||||
|     -- method 2: |     -- method 2: | ||||||
| 
 | 
 | ||||||
|     -- man pages assembled from parts and adjusted for man with m4, adjusted more and converted to nroff with pandoc |     -- man pages assembled from parts and adjusted for man with m4, adjusted more and converted to nroff with pandoc | ||||||
|     let m4manpageNroffs = [manpageDir p </> "m4-"++p | p <- ["hledger.1"]] |     let m4manpages = [manpageDir m </> "m4-"++m | m <- ["hledger.1"]] -- hledger/doc/m4-hledger.1 | ||||||
|     phony "m4manpages" $ need m4manpageNroffs |     phony "m4manpages" $ need m4manpages | ||||||
|     m4manpageNroffs |%> \out -> do                      -- hledger/doc/m4-hledger.1 |     m4manpages |%> \out -> do                           -- hledger/doc/m4-hledger.1 | ||||||
|       let (dir,file) = splitFileName out                -- hledger/doc, m4-hledger.1 |       let (dir,file) = splitFileName out                -- hledger/doc, m4-hledger.1 | ||||||
|           m4src = dir </> drop 3 file <.> "md" <.> "m4" -- hledger/doc/hledger.1.md.m4 |           m4src = dir </> drop 3 file <.> "md" <.> "m4" -- hledger/doc/hledger.1.md.m4 | ||||||
|           m4includes = map (dir </>) ["description.md","examples.md","queries.md","commands.md","options.md"] |           m4includes = map (dir </>) ["description.md","examples.md","queries.md","commands.md","options.md"] | ||||||
| @ -160,13 +172,13 @@ main = do | |||||||
|         "-o" out |         "-o" out | ||||||
| 
 | 
 | ||||||
|     -- man pages assembled from parts and adjusted for web with m4, adjusted slightly more with pandoc (ready for hakyll) |     -- man pages assembled from parts and adjusted for web with m4, adjusted slightly more with pandoc (ready for hakyll) | ||||||
|     let m4webManpageMds = ["site" </> "m4-"++p <.>".md" | p <- ["hledger.1"]] |     let m4webmanpages = ["site" </> "m4-" ++ manpageNameToUri m <.> ".md" | m <- ["hledger.1"]] -- site/m4-hledger.md | ||||||
|     phony "m4webmanpages" $ need $ m4webManpageMds |     phony "m4webmanpages" $ need $ m4webmanpages | ||||||
|     m4webManpageMds |%> \out -> do                  -- site/m4-hledger.1.md |     m4webmanpages |%> \out -> do                                   -- site/m4-hledger.md | ||||||
|       let file  = takeFileName out                  -- m4-hledger.1.md |       let file  = takeFileName out                                 -- m4-hledger.1.md | ||||||
|           manpage = drop 3 $ dropExtension file     -- hledger.1 |           manpage = manpageUriToName $ drop 3 $ dropExtension file -- hledger.1 | ||||||
|           dir = manpageDir manpage                  -- hledger/doc |           dir = manpageDir manpage                                 -- hledger/doc | ||||||
|           m4src = dir </> manpage <.> "md" <.> "m4" -- hledger/doc/hledger.1.md.m4 |           m4src = dir </> manpage <.> "md" <.> "m4"                -- hledger/doc/hledger.1.md.m4 | ||||||
|           m4includes = map (dir </>) ["description.md","examples.md","queries.md","commands.md","options.md"] |           m4includes = map (dir </>) ["description.md","examples.md","queries.md","commands.md","options.md"] | ||||||
|           m4lib = "doc/lib.m4" |           m4lib = "doc/lib.m4" | ||||||
|       need $ m4src : m4lib : m4includes |       need $ m4src : m4lib : m4includes | ||||||
| @ -181,7 +193,7 @@ main = do | |||||||
|     let webmanual = "site/manual2.md" |     let webmanual = "site/manual2.md" | ||||||
|     phony "webmanual" $ need [ webmanual ] |     phony "webmanual" $ need [ webmanual ] | ||||||
|     "site/manual2.md" %> \out -> do |     "site/manual2.md" %> \out -> do | ||||||
|       need webManpageMds |       need webmanpages | ||||||
|       liftIO $ writeFile webmanual [i| |       liftIO $ writeFile webmanual [i| | ||||||
| <style> | <style> | ||||||
| #toc > ol > li { | #toc > ol > li { | ||||||
| @ -195,12 +207,12 @@ main = do | |||||||
| * toc | * toc | ||||||
| 
 | 
 | ||||||
| |] | |] | ||||||
|       forM_ webManpageMds $ \f -> do |       forM_ webmanpages $ \f -> do -- site/hledger.md, site/journal.md | ||||||
|         let heading = |         let heading = | ||||||
|               let s = dropExtension $ dropExtension $ takeFileName f |               let h = dropExtension $ takeFileName f -- hledger, journal | ||||||
|               in if "hledger_" `isPrefixOf` s |               in if "hledger" `isPrefixOf` h | ||||||
|                  then drop 8 s ++ " format" |                  then h                              -- hledger | ||||||
|                  else s |                  else h ++ " format"                 -- journal format | ||||||
|         cmd Shell ("printf '\\n## "++ heading ++"\\n\\n' >>") webmanual :: Action ExitCode |         cmd Shell ("printf '\\n## "++ heading ++"\\n\\n' >>") webmanual :: Action ExitCode | ||||||
|         cmd Shell "pandoc" f "-t markdown" |         cmd Shell "pandoc" f "-t markdown" | ||||||
|           "--filter doc/pandoc-drop-man-blocks" |           "--filter doc/pandoc-drop-man-blocks" | ||||||
| @ -213,14 +225,15 @@ main = do | |||||||
| 
 | 
 | ||||||
|     phony "clean" $ do |     phony "clean" $ do | ||||||
|       putNormal "Cleaning generated files" |       putNormal "Cleaning generated files" | ||||||
|       -- removeFilesAfter "." manpageNroffs |       removeFilesAfter "." m4manpages | ||||||
|       removeFilesAfter "." m4manpageNroffs |       removeFilesAfter "." m4webmanpages | ||||||
|       removeFilesAfter "." webManpageMds |       removeFilesAfter "." webmanpages | ||||||
|       removeFilesAfter "." m4webManpageMds |  | ||||||
|       removeFilesAfter "." [webmanual] |       removeFilesAfter "." [webmanual] | ||||||
| 
 | 
 | ||||||
|     phony "Clean" $ do |     phony "Clean" $ do | ||||||
|       need ["clean"] |       need ["clean"] | ||||||
|  |       putNormal "Cleaning generated man page nroffs" | ||||||
|  |       removeFilesAfter "." manpages | ||||||
|       putNormal "Cleaning object files" |       putNormal "Cleaning object files" | ||||||
|       removeFilesAfter "doc" ["*.o","*.p_o","*.hi"] -- forces rebuild of exes ? |       removeFilesAfter "doc" ["*.o","*.p_o","*.hi"] -- forces rebuild of exes ? | ||||||
|       putNormal "Cleaning shake build files" |       putNormal "Cleaning shake build files" | ||||||
|  | |||||||
							
								
								
									
										17
									
								
								site/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								site/.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -3,12 +3,13 @@ _cache | |||||||
| _site | _site | ||||||
| files/downloads | files/downloads | ||||||
| files/static | files/static | ||||||
| hledger-api.1.md | hledger-api.md | ||||||
| hledger-ui.1.md | hledger-ui.md | ||||||
| hledger-web.1.md | hledger-web.md | ||||||
| hledger.1.md | hledger.md | ||||||
| hledger_csv.5.md | csv.md | ||||||
| hledger_journal.5.md | journal.md | ||||||
| hledger_timedot.5.md | timedot.md | ||||||
| hledger_timelog.5.md | timelog.md | ||||||
| manual2.md | manual2.md | ||||||
|  | m4-hledger.md | ||||||
							
								
								
									
										16
									
								
								site/docs.md
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								site/docs.md
									
									
									
									
									
								
							| @ -57,30 +57,30 @@ Or, as man pages (work in progress): | |||||||
| 
 | 
 | ||||||
| <div style="padding-left:1em;"> | <div style="padding-left:1em;"> | ||||||
| 
 | 
 | ||||||
| #### [hledger(1)](hledger.1.html) | #### [hledger(1)](hledger.html) | ||||||
| The main reporting tool and command-line interface. | The main reporting tool and command-line interface. | ||||||
| 
 | 
 | ||||||
| #### [hledger-ui(1)](hledger-ui.1.html) | #### [hledger-ui(1)](hledger-ui.html) | ||||||
| A curses-style UI for quick exploration. | A curses-style UI for quick exploration. | ||||||
| 
 | 
 | ||||||
| #### [hledger-web(1)](hledger-web.1.html) | #### [hledger-web(1)](hledger-web.html) | ||||||
| A web UI for browsing and data entry, personal or shared. | A web UI for browsing and data entry, personal or shared. | ||||||
| 
 | 
 | ||||||
| #### [hledger-api(1)](hledger-api.1.html) | #### [hledger-api(1)](hledger-api.html) | ||||||
| A REST-y JSON and file server, good for building client-side UIs. | A REST-y JSON and file server, good for building client-side UIs. | ||||||
| 
 | 
 | ||||||
| **File formats:** | **File formats:** | ||||||
| 
 | 
 | ||||||
| #### [hledger_journal(5)](hledger_journal.5.html) | #### [hledger_journal(5)](journal.html) | ||||||
| hledger's primary data format, representing a general journal. | hledger's primary data format, representing a general journal. | ||||||
| 
 | 
 | ||||||
| #### [hledger_csv(5)](hledger_csv.5.html) | #### [hledger_csv(5)](csv.html) | ||||||
| How hledger reads Comma Separated Value data. | How hledger reads Comma Separated Value data. | ||||||
| 
 | 
 | ||||||
| #### [hledger_timelog(5)](hledger_timelog.5.html) | #### [hledger_timelog(5)](timelog.html) | ||||||
| Timeclock format, a sequence of clock-in/clock-out records. | Timeclock format, a sequence of clock-in/clock-out records. | ||||||
| 
 | 
 | ||||||
| #### [hledger_timedot(5)](hledger_timedot.5.html) | #### [hledger_timedot(5)](timedot.html) | ||||||
| Timedot format, an alternative time logging format. | Timedot format, an alternative time logging format. | ||||||
| 
 | 
 | ||||||
| **Combined:** | **Combined:** | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user