doc: use macros not divs to select web/man content

Use slightly clearer m4 macros instead of special divs to mark content
as web only/man only. The temporary doc/*.md files are no longer needed,
slightly more redundant work is done.
This commit is contained in:
Simon Michael 2016-04-16 10:09:51 -07:00
parent 6787decca2
commit 4c291dc54e
9 changed files with 63 additions and 67 deletions

View File

@ -97,8 +97,6 @@ main = do
] ]
-- manuals m4 source, may include other files (hledger/doc/hledger.1.m4.md) -- manuals m4 source, may include other files (hledger/doc/hledger.1.m4.md)
m4manpages = [manpageDir m </> m <.> "m4.md" | m <- manpageNames] m4manpages = [manpageDir m </> m <.> "m4.md" | m <- manpageNames]
-- manuals rendered to markdown, ready for adjusting to web or man pages by pandoc (hledger/doc/hledger.1.md)
mdmanpages = [manpageDir m </> m <.> "md" | m <- manpageNames]
-- manuals rendered to nroff, ready for man (hledger/doc/hledger.1) -- manuals rendered to nroff, ready for man (hledger/doc/hledger.1)
nroffmanpages = [manpageDir m </> m | m <- manpageNames] nroffmanpages = [manpageDir m </> m | m <- manpageNames]
-- manuals rendered to text, ready for embedding (hledger/doc/hledger.1.txt) -- manuals rendered to text, ready for embedding (hledger/doc/hledger.1.txt)
@ -135,26 +133,21 @@ main = do
-- man pages -- man pages
-- process m4 includes and macros to get markdown, ready for further processing by pandoc -- use m4 and pandoc to process macros, filter content, and convert to nroff suitable for man output
mdmanpages |%> \out -> do -- hledger/doc/hledger.1.md
let dir = takeDirectory out
src = out -<.> "m4.md"
lib = "doc/lib.m4"
-- assume all other m4 files in dir are included by this one XXX not true in hledger-lib
deps <- liftIO $ filter (/= src) . filter (".m4.md" `isSuffixOf`) . map (dir </>)
<$> S.getDirectoryContents dir
need $ src : lib : deps
cmd Shell "m4 -P -DWEB -DMAN -I" dir lib src ">" out
-- adjust man page mds for man output and convert to nroff, with pandoc
phony "manpages" $ need nroffmanpages phony "manpages" $ need nroffmanpages
nroffmanpages |%> \out -> do -- hledger/doc/hledger.1 nroffmanpages |%> \out -> do -- hledger/doc/hledger.1
let src = out <.> "md" let src = out <.> "m4.md"
lib = "doc/lib.m4"
dir = takeDirectory out
tmpl = "doc/manpage.nroff" tmpl = "doc/manpage.nroff"
need $ src : tmpl : pandocFilters -- assume all other m4 files in dir are included by this one XXX not true in hledger-lib
cmd pandoc src "-s --template" tmpl deps <- liftIO $ filter (/= src) . filter (".m4.md" `isSuffixOf`) . map (dir </>) <$> S.getDirectoryContents dir
"--filter doc/pandoc-drop-web-blocks" need $ src : lib : tmpl : deps ++ pandocFilters
cmd Shell
"m4 -P -DMAN -I" dir lib src "|"
pandoc "-f markdown -s --template" tmpl
-- "--filter doc/pandoc-drop-web-blocks"
"--filter doc/pandoc-drop-html-blocks" "--filter doc/pandoc-drop-html-blocks"
"--filter doc/pandoc-drop-html-inlines" "--filter doc/pandoc-drop-html-inlines"
"--filter doc/pandoc-drop-links" "--filter doc/pandoc-drop-links"
@ -180,19 +173,25 @@ main = do
] ]
cmd Shell (Cwd "site") "hakyll-std/hakyll-std" "build" cmd Shell (Cwd "site") "hakyll-std/hakyll-std" "build"
-- adjust man page mds for web output, with pandoc -- use m4 and pandoc to process macros and filter content, leaving markdown suitable for web output
phony "webmanpages" $ need webmanpages phony "webmanpages" $ need webmanpages
webmanpages |%> \out -> do -- site/hledger.md webmanpages |%> \out -> do -- site/hledger.md
let m = manpageUriToName $ dropExtension $ takeFileName out -- hledger.1 let m = manpageUriToName $ dropExtension $ takeFileName out -- hledger.1
src = manpageDir m </> m <.> "md" -- hledger/doc/hledger.1.md dir = manpageDir m
src = dir </> m <.> "m4.md"
lib = "doc/lib.m4"
heading = let h = dropExtension m heading = let h = dropExtension m
in if "hledger_" `isPrefixOf` h in if "hledger_" `isPrefixOf` h
then drop 8 h ++ " format" then drop 8 h ++ " format"
else h else h
need $ src : pandocFilters -- assume all other m4 files in dir are included by this one XXX not true in hledger-lib
deps <- liftIO $ filter (/= src) . filter (".m4.md" `isSuffixOf`) . map (dir </>) <$> S.getDirectoryContents dir
need $ src : lib : deps ++ pandocFilters
liftIO $ writeFile out $ "# " ++ heading ++ "\n\n" liftIO $ writeFile out $ "# " ++ heading ++ "\n\n"
cmd Shell pandoc src "-t markdown --atx-headers" cmd Shell
"m4 -P -DMAN -DWEB -I" dir lib src "|"
pandoc "-f markdown -t markdown --atx-headers"
"--filter doc/pandoc-demote-headers" "--filter doc/pandoc-demote-headers"
-- "--filter doc/pandoc-add-toc" -- "--filter doc/pandoc-add-toc"
-- "--filter doc/pandoc-drop-man-blocks" -- "--filter doc/pandoc-drop-man-blocks"
@ -231,7 +230,6 @@ main = do
phony "clean" $ do phony "clean" $ do
putNormal "Cleaning generated files" putNormal "Cleaning generated files"
removeFilesAfter "." mdmanpages
removeFilesAfter "." webmanpages removeFilesAfter "." webmanpages
removeFilesAfter "." [webmanual] removeFilesAfter "." [webmanual]

View File

@ -2,12 +2,12 @@
% %
% January 2016 % January 2016
<div class="web"> _web_({{
_versions_({{hledger-api}}) _versions_({{hledger-api}})
* toc * toc
</div> }})
<div class="man"> _man_({{
# NAME # NAME
@ -24,7 +24,7 @@ hledger is a cross-platform program for tracking money, time, or any other commo
using double-entry accounting and a simple, editable file format. using double-entry accounting and a simple, editable file format.
hledger is inspired by and largely compatible with ledger(1). hledger is inspired by and largely compatible with ledger(1).
</div> }})
hledger-api is a simple web API server, intended to support hledger-api is a simple web API server, intended to support
client-side web apps operating on hledger data. It comes with a series client-side web apps operating on hledger data. It comes with a series
@ -110,7 +110,7 @@ access.
<!-- `-B --cost` --> <!-- `-B --cost` -->
<!-- : show amounts in their cost price's commodity --> <!-- : show amounts in their cost price's commodity -->
<div class="man"> _man_({{
# ENVIRONMENT # ENVIRONMENT
@ -142,4 +142,4 @@ The need to precede options with `--` when invoked from hledger is awkward.
<!-- appear to run normally, but you will be seeing pages served from the --> <!-- appear to run normally, but you will be seeing pages served from the -->
<!-- first one. --> <!-- first one. -->
</div> }})

View File

@ -2,12 +2,12 @@
% %
% April 2016 % April 2016
<div class="web"> _web_({{
_versions_({{csv}}) _versions_({{csv}})
* toc * toc
</div> }})
<div class="man"> _man_({{
# NAME # NAME
@ -15,7 +15,7 @@ CSV - how hledger reads CSV data, and the CSV rules file format
# DESCRIPTION # DESCRIPTION
</div> }})
hledger can read hledger can read
[CSV](http://en.wikipedia.org/wiki/Comma-separated_values) files, [CSV](http://en.wikipedia.org/wiki/Comma-separated_values) files,

View File

@ -2,12 +2,12 @@
% %
% April 2016 % April 2016
<div class="web"> _web_({{
_versions_({{journal}}) _versions_({{journal}})
* toc * toc
</div> }})
<div class="man"> _man_({{
# NAME # NAME
@ -15,7 +15,7 @@ Journal - hledger's default file format, representing a General Journal
# DESCRIPTION # DESCRIPTION
</div> }})
hledger's usual data source is a plain text file containing journal entries in hledger journal format. hledger's usual data source is a plain text file containing journal entries in hledger journal format.
This file represents a standard accounting [general journal](http://en.wikipedia.org/wiki/General_journal). This file represents a standard accounting [general journal](http://en.wikipedia.org/wiki/General_journal).

View File

@ -2,12 +2,12 @@
% %
% April 2016 % April 2016
<div class="web"> _web_({{
_versions_({{timeclock}}) _versions_({{timeclock}})
* toc * toc
</div> }})
<div class="man"> _man_({{
# NAME # NAME
@ -15,7 +15,7 @@ Timeclock - the time logging format of timeclock.el, as read by hledger
# DESCRIPTION # DESCRIPTION
</div> }})
hledger can read timeclock files. hledger can read timeclock files.
[As with Ledger](http://ledger-cli.org/3.0/doc/ledger3.html#Time-Keeping), [As with Ledger](http://ledger-cli.org/3.0/doc/ledger3.html#Time-Keeping),

View File

@ -2,12 +2,12 @@
% %
% April 2016 % April 2016
<div class="web"> _web_({{
_versions_({{timedot}}) _versions_({{timedot}})
* toc * toc
</div> }})
<div class="man"> _man_({{
# NAME # NAME
@ -15,7 +15,7 @@ Timedot - hledger's human-friendly time logging format
# DESCRIPTION # DESCRIPTION
</div> }})
Timedot is a plain text format for logging dated, categorised quantities (eg time), supported by hledger. Timedot is a plain text format for logging dated, categorised quantities (eg time), supported by hledger.
It is convenient for approximate and retroactive time logging, It is convenient for approximate and retroactive time logging,

View File

@ -2,7 +2,7 @@
% %
% October 2015 % October 2015
<div class="web"> _web_({{
_versions_({{hledger-ui}}) _versions_({{hledger-ui}})
* toc * toc
@ -20,8 +20,8 @@ _versions_({{hledger-ui}})
<a href="images/hledger-ui/hledger-ui-bcexample-acc.png" class="highslide" onclick="return hs.expand(this)"><img src="images/hledger-ui/hledger-ui-bcexample-acc.png" title="beancount example accounts" /></a> <a href="images/hledger-ui/hledger-ui-bcexample-acc.png" class="highslide" onclick="return hs.expand(this)"><img src="images/hledger-ui/hledger-ui-bcexample-acc.png" title="beancount example accounts" /></a>
<a href="images/hledger-ui/hledger-ui-bcexample-acc-etrade:cash.png" class="highslide" onclick="return hs.expand(this)"><img src="images/hledger-ui/hledger-ui-bcexample-acc-etrade:cash.png" title="beancount example's etrade cash subaccount" /></a> <a href="images/hledger-ui/hledger-ui-bcexample-acc-etrade:cash.png" class="highslide" onclick="return hs.expand(this)"><img src="images/hledger-ui/hledger-ui-bcexample-acc-etrade:cash.png" title="beancount example's etrade cash subaccount" /></a>
<a href="images/hledger-ui/hledger-ui-bcexample-acc-etrade.png" class="highslide" onclick="return hs.expand(this)"><img src="images/hledger-ui/hledger-ui-bcexample-acc-etrade.png" title="beancount example's etrade investments, all commoditiess" /></a> <a href="images/hledger-ui/hledger-ui-bcexample-acc-etrade.png" class="highslide" onclick="return hs.expand(this)"><img src="images/hledger-ui/hledger-ui-bcexample-acc-etrade.png" title="beancount example's etrade investments, all commoditiess" /></a>
</div> }})
<div class="man"> _man_({{
# NAME # NAME
@ -38,13 +38,13 @@ hledger is a cross-platform program for tracking money, time, or any other commo
using double-entry accounting and a simple, editable file format. using double-entry accounting and a simple, editable file format.
hledger is inspired by and largely compatible with ledger(1). hledger is inspired by and largely compatible with ledger(1).
</div> }})
hledger-ui is hledger's curses-style interface. hledger-ui is hledger's curses-style interface.
It reads a hledger journal file It reads a hledger journal file
<div class="man"> _man_({{
(~/.hledger.journal, $LEDGER_FILE, or -f FILE; see hledger(1) or hledger_journal(5)) (~/.hledger.journal, $LEDGER_FILE, or -f FILE; see hledger(1) or hledger_journal(5))
</div> }})
and provides a simple full-screen console interface for viewing account balances and transactions. and provides a simple full-screen console interface for viewing account balances and transactions.
It is simpler and more convenient for It is simpler and more convenient for
@ -231,7 +231,7 @@ This screen will appear if there is a problem, such as a parse error,
when you press g to reload. Once you have fixed the problem described, when you press g to reload. Once you have fixed the problem described,
press g again to reload and restore normal operation. press g again to reload and restore normal operation.
<div class="man"> _man_({{
# ENVIRONMENT # ENVIRONMENT
@ -263,4 +263,4 @@ The register screen's switching between historic balance and running
total based on query arguments may be confusing, and there is no total based on query arguments may be confusing, and there is no
column heading to indicate which is being displayed. column heading to indicate which is being displayed.
</div> }})

View File

@ -2,12 +2,12 @@
% %
% October 2015 % October 2015
<div class="web"> _web_({{
_versions_({{hledger-web}}) _versions_({{hledger-web}})
* toc * toc
</div> }})
<div class="man"> _man_({{
# NAME # NAME
hledger-web - web interface for the hledger accounting tool hledger-web - web interface for the hledger accounting tool
@ -32,7 +32,7 @@ hledger-web - web interface for the hledger accounting tool
hledger is a cross-platform program for tracking money, time, or any other commodity, hledger is a cross-platform program for tracking money, time, or any other commodity,
using double-entry accounting and a simple, editable file format. using double-entry accounting and a simple, editable file format.
hledger is inspired by and largely compatible with ledger(1). hledger is inspired by and largely compatible with ledger(1).
</div> }})
hledger-web is hledger's web interface. It starts a simple web hledger-web is hledger's web interface. It starts a simple web
application for browsing and adding transactions, and optionally application for browsing and adding transactions, and optionally
@ -176,7 +176,7 @@ The following common hledger options should also work:
`-B --cost` `-B --cost`
: show amounts in their cost price's commodity : show amounts in their cost price's commodity
<div class="man"> _man_({{
# ENVIRONMENT # ENVIRONMENT
@ -208,4 +208,4 @@ If you start two instances on the same port, the second one will
appear to run normally, but you will be seeing pages served from the appear to run normally, but you will be seeing pages served from the
first one. first one.
</div> }})

View File

@ -2,12 +2,12 @@
% %
% April 2016 % April 2016
<div class="web"> _web_({{
_versions_({{hledger}}) _versions_({{hledger}})
* toc * toc
</div> }})
<div class="man"> _man_({{
# NAME # NAME
@ -26,16 +26,14 @@ file format. It is inspired by and largely compatible with ledger(1).
Tested on unix, mac, windows, hledger aims to be a reliable, practical Tested on unix, mac, windows, hledger aims to be a reliable, practical
tool for daily use. tool for daily use.
</div> }})
_include_(description.m4.md) _include_(description.m4.md)
_include_(examples.m4.md) _include_(examples.m4.md)
_include_(options.m4.md) _include_(options.m4.md)
_include_(queries.m4.md) _include_(queries.m4.md)
_include_(commands.m4.md) _include_(commands.m4.md)
_include_(troubleshooting.m4.md) _include_(troubleshooting.m4.md)
_man_({{
<div class="man">
# ENVIRONMENT # ENVIRONMENT
@ -60,4 +58,4 @@ hledger can't render non-ascii characters when run from a Windows command prompt
When input data contains non-ascii characters, a suitable system locale must be configured (or there will be an unhelpful error). When input data contains non-ascii characters, a suitable system locale must be configured (or there will be an unhelpful error).
Eg on POSIX, set LANG to something other than C. Eg on POSIX, set LANG to something other than C.
</div> }})