# HTML post-processing
This directory contains material for enhancing the html of the manual
and the API (from the `../htmlman` directory), including a quick
search widget for the API.
The process will create the `../webman` dir, and output the new html
files (and assets) in `../webman/manual` (the manual) and `../webman/api` (the
API).
## manual and api
There are two different scripts, `process_manual.ml` and
`process_api.ml`. The first one deals with all the chapters of the
manual, while the latter deals with the api generated with `ocamldoc`.
They both use a common module `common.ml`.
## How to build
With dependencies to build the whole manual:
```
cd ..
make web
```
Or, much faster if you know that `htmlman` is already up-to-date, from
within the `html_processing` dir:
```
make
```
You need a working
[`sass`](https://sass-lang.com/) CSS processor (tested with version
"3.4.23").
## How to browse
From the `html_processing` directory:
`firefox ../webman/api/index.html`
`firefox ../webman/manual/index.html`
## Debug
```
make DEBUG=1
```
By default all html files are re-created by `make`, but the javascript
index `webman/api/index.js` and `webman/api/compilerlibref/index.js`
are kept if they already exist. You can use `make clean` to delete all
generated files.
The javascript files in the `html_processing/js` dir add functionality
but the web-manual is still browsable without them:
- `scroll.js`: adds smooth scrolling in the html page, but only for
near targets. The reason is that when you jump to another place in a
text, if the jump is immediate (no scrolling), you easily get lost;
for instance you usually don't even realize that the target of the
link is just half a page below! Thus smooth scrolling helps
_understanding the structure_ of the document. However, when the
target is very far, the browser will scroll a huge amount of text
very quickly, and this becomes useless, and even painful for the
eye. Hence we disable smooth scrolling for far targets.
- `search.js`: adds an 'as-you-type quick search widget', which
recognize values, modules, and type signatures. It is very useful,
but of course not strictly necessary.