`fromdateiso8601` was `strptime("%Y-%m-%dT%H:%M:%SZ") | mktime`, which
accepts only one of the many representations ISO 8601 permits. strptime
cannot be extended to cover the rest portably, since it has no specifier
for fractional seconds and glibc discards `%G` and `%V`.
Replace it with a parser in src/iso8601.c that handles basic and extended
representations, ordinal and week dates, fractional seconds, offsets and
date-only input. It uses integer arithmetic instead of `time_t`, so the
results no longer depend on the platform.
This is stricter than before. Impossible dates like `2015-02-30`, which
`mktime` used to normalize into March, and unpadded components like
`2015-3-5T6:00:00Z` are now errors. So is any trailing input, including
whitespace. Leading whitespace is rejected too; before, glibc skipped it
and macOS did not. A leap second now maps to the second before it rather
than the next minute. The error message has changed, and the result can
now be non-integer.
Documentation
The jq website, manpages and some of the tests are generated from this
directory. The manual is a YAML file in content/manual.
To build the documentation (including building the jq manpage), you'll
need python3 and pipenv. You can install pipenv like so:
pip install pipenv
Though, you may need to say pip3 instead, depending on your system. Once
you have pipenv installed, you can install the dependencies by running
pipenv sync from the docs/ directory.
Also, you may need to run virtualenv -p /usr/bin/python3 venv/ and
then source venv/bin/activate, and only then pipenv sync.
Once this is done, rerun ./configure --enable-docs in the jq root directory and then
the Makefile will be able to generate the jq manpage. You can just run
make jq.1 to build the manpage manually, and make tests/man.test to
update the manual tests.
To build the website, run pipenv run python3 build_website.py in the docs/ directory.
To serve them locally, you can run python3 -m http.server -d output.