I have recently been using readthedocs for hosting documentation. It uses a markdown like language called sphinx. I used it with some of the ModernUI stuff, and most recently when i updated my DateTime Library:
https://datetime-library.readthedocs.io/en/latest/ - you can specify sphinx to auto build the html version, also pdf, epub & html zipped.
Lower left panel is opened by clicking it and it expands up to reveal download options for the readthedocs project:

But incidentally I was looking at zeal again the other day (
https://masm32.com/board/index.php?topic=9581.0 and
https://github.com/zealdocs/zeal) and came across docdash (
https://doc2dash.readthedocs.io/en/stable/index.html - zeal uses the dash docsets) which converts the sphinx like documentation to a docset for use in zeal.
So once you create the sphinx documentation and using docdash you would have various doc sources: online, pdf, epub, html zipped, and a zeal docset.
Here is an example of what the rst file looks like for a DTDay function:
.. _DTDay:
===================================
DTDay
===================================
Get the day part of a date & time string.
::
DTDay PROTO lpszDateTimeString:DWORD, DateFormat:DWORD
**Parameters**
* ``lpszDateTimeString`` - Pointer to a buffer containing the date & time string to retrieve the **day** portion from. The format of the date & time string is determined by the ``DateFormat`` parameter.
* ``DateFormat`` - Value indicating the date & time format used in the buffer pointed to by ``lpszDateTimeString`` parameter. The parameter can contain one of the following constants as listed in the :ref:`DateTime Formats<DateTime Formats>` page and as defined in the ``DateTime.inc`` include file.
**Returns**
Returns the day value in ``EAX``
**Example**
::
.data
DateTimeStringValue db "2008/03/21 16:21:01:00",0
.data?
DayValue dd ?
.code
Invoke DTDay, Addr DateTimeStringValue, CCYYMMDDHHMMSSMS
mov DayValue, eax ; save day part of date value to data variable
; eax should contain 21
**See Also**
:ref:`DTMonth<DTMonth>`, :ref:`DTYear<DTYear>`, :ref:`DTIsLeapYear<DTIsLeapYear>`, :ref:`DTDayOfWeek<DTDayOfWeek>`, :ref:`DateTime Formats<DateTime Formats>`
and this is what that looks like when readthedocs renders it:

I can go over some of the bits and pieces in the rst file to help explain what they do, and to speed up the learning process.
Also i use a batch file to help create the .rst files for functions - kinda like a template for them and then edit to change the details and add parameters and notes etc.
@echo off
rem delete temp files
for /f "Tokens=*" %%a in ('dir *. /b/a-d') do (
del %%a
)
echo.>DTGetDateTime
echo.>DTDateFormat
echo.>DTDateTimeStringToDwordDateTime
echo.>DTDwordDateTimeToDateTimeString
echo.>DTDwordDateToJulianDate
echo.>DTJulianDateToDwordDate
echo.>DTDateTimeStringToJulianMillisec
echo.>DTJulianMillisecToDateTimeString
echo.>DTDwordDateTimeToJulianMillisec
echo.>DTJulianMillisecToDwordDateTime
echo.>DTDateTimeStringToUnixTime
echo.>DTUnixTimeToDateTimeString
echo.>DTDwordDateTimeToUnixTime
echo.>DTUnixTimeToDwordDateTime
echo.>DTDwordTimeToMillisec
echo.>DTMillisecToDwordTime
echo.>DTDayOfWeek
echo.>DTIsLeapYear
echo.>DTDay
echo.>DTMonth
echo.>DTYear
echo.>DTDateStringsCompare
echo.>DTDateStringsDifference
echo.>DTDateTimeStringsDifference
rem bare files to rst
for /f "Tokens=*" %%a in ('dir *. /b/a-d') do (
echo... _%%a:>%%a.rst
echo.>>%%a.rst
echo ===================================>>%%a.rst
echo %%a >>%%a.rst
echo ===================================>>%%a.rst
echo.>>%%a.rst
echo... delete this starting at \.\. and type description>>%%a.rst
echo.>>%%a.rst
echo ::>>%%a.rst
echo.>>%%a.rst
echo %%a^(^)>>%%a.rst
echo.>>%%a.rst
echo.>>%%a.rst
echo **Parameters**>>%%a.rst
echo.>>%%a.rst
echo * **>>%%a.rst
echo * **>>%%a.rst
echo * **>>%%a.rst
echo.>>%%a.rst
echo.>>%%a.rst
echo **Returns**>>%%a.rst
echo.>>%%a.rst
echo.>>%%a.rst
echo.>>%%a.rst
echo **Notes**>>%%a.rst
echo.>>%%a.rst
echo.>>%%a.rst
echo.>>%%a.rst
echo **Example**>>%%a.rst
echo.>>%%a.rst
echo ::>>%%a.rst
echo.>>%%a.rst
echo %%a^(^)>>%%a.rst
echo.>>%%a.rst
echo **See Also**>>%%a.rst
echo.>>%%a.rst
echo :ref:``, :ref:`` >>%%a.rst
echo.>>%%a.rst
)
rem delete temp files
for /f "Tokens=*" %%a in ('dir *. /b/a-d') do (
del %%a > nul
)
del "%a.rst" > nul
Once i have created them, i rename the batch file to prevent accidentally clicking it again and overwriting any work done ;-)