2025-03-03: Version 3.3.2
2025-03-03: Version 3.3.2-RC3

Fix release script.

2025-03-03: Version 3.3.2-RC2

Fix release script.

2025-03-03: Version 3.3.2-RC1

Fix bug due to --lines which caused xmq to return failure (1)
even when parse was successful.

2025-03-02: Version 3.3.1

Now --lines works. Each input line is treated as a separate document.
Use this to parse jsonl files. It also works for xmll, xmql.
You can also parse each input line with an ixml grammar.

2025-01-16: Version 3.2.2

Fix bug in IXML grammar where rule alias was lost for alternatives.

Explanation, given the rule:
myrule>myalias = 'alfa' | 'beta'.

If matched against 'alfa' then the produced rule was named myalias.
If matched against 'beta' then the produced rule was named myrule.
After bug-fix the produced rule is always myalias.

2025-01-05: Version 3.2.1

Fix bug in Windows version where redirect into file using > did not work.
Solution is to use WriteFile when writing to redirected stdout and
WriteConsole when writing to console.

2025-01-03: Version 3.2.0

You can now print all href attributes in a web page:

xmq index.html select //a/@href

You can now compose a new web page with all the svg images found
and view this page in your default browser:

xmq index.html select //svg add-root body add-root html to-html br

2025-01-02: Version 3.1.3
2025-01-02: Version 3.1.2

Omoeba helped improve the configure and installation scripts! Thanks Omoeba!

2024-12-08: Version 3.1.1

Steven Pemberton noticed that xmq wrongly reported some IXML grammars
as ambiguous even though they weren't. This is now fixed. Thanks Steven!

2024-12-08: Version 3.1.0

The IXML parser can now parse the ixml grammar itself.
Added grammars/core/tsv.ixml to parse tab separated value files.

Use it like for example like this:
xmq --ixml=grammars/core/tsv.ixml tabbed_input.txt to-xml > values.xml

2024-12-07: Version 3.0.0

XMQ now supports invisible XML (IXML). Read https://invisiblexml.org/

Try:
xmq --ixml=grammar.ixml input_file

or for quicker testing, the input can be provided as an argument:
xmq --ixml=grammar.ixml -i 'text to parse'

The implementation of the IXML standard is not yet complete,
but it has reached a useful state!

2024-11-26: Version 2.18.0

Release artifacts for Posix platformas are now tar.gz archives with a single executable binary.

2024-11-24: Version 2.17.0

For-each now prints the node name for $ {..} in shell.
XML encoding should be utf-8 not utf8.
Update language exposé.
An xslt transform can now load xmq/xml/json using document(...)

2024-10-11: Version 2.16.0

You can now write an xsl transform in json!
(Just as you can write the xsl transform in xml/xmq.)

This transform can then work on xml/xmq/json and produce xml/xmq/json.

For example: xmq dostuff.xslt to-json > dostuff.xslj

Then run: xmq source.json transform dostuff.xslj to-json

2024-10-10: Version 2.15.0

Properly handle xml namespaces when converting to and from json.
Handle json with a key that is the empty string.
Changed default for tabs to be kept as is inside quotes.
Added --escape-tabs to trigger replacement of tabs into &#9; when generating xmq.

2024-10-09: Version 2.14.0

Print an empty document on stdout when xsl transform fails instead of
generating a segmentation fault.

2024-06-23: Version 2.13.0

Handle leading/ending comments (outside of root node) when converting to/from json.
Rename command noout to no-output.

2024-06-01: Version 2.12.0

Add colors for xsl and xlmns for tex rendering.
Separate xmqGetString vs xmqGetStringRel.
Handle !DOCTYPE in json conversion.
Json conversion handle true/false/null correctly.
Convert single char top level element to correct json.
Do not trim json comments.
Do not trim json quotes.
Handle entities to/from json strings.
Handle attribute without value when converting to from json.
Escape backslash with backslash*2 in json strings.
When converting to json for key = value with attributes, then create json objects instead.
Handle comments and pure text nodes in json conversion.
Handle pure text nodes (key |) when converting to json.

2024-05-29: Version 2.11.0

Improve json compatibility.
Read all of stdin in certain situations where it did not before.

2024-05-27: Version 2.10.0

Add -z to start with empty DOM then use add command to build DOM.
E.g.: xmq -z add weight=2.5ton add speed=123km/h add-root car to-xml
Generate proper colors for the tex output.

2024-05-19: Version 2.9.0

Add --stringparam=key=value and --param=key=value to transform command.

2024-05-11: Version 2.8.1

If writing to a pipe/file (ie NOT tty) then do not add ansi colors
unless render-terminal --color is used.

2024-05-03: Version 2.8.0

Remove \r in \r\n newlines inside quotes.

Enable stdin pipe into xmq tokenize command.

Use --nomerge to prevent xmq from merging text and character entity nodes
when loading xmq.

Leading and ending newlines can now be expressed using empty lines. E.g.
the content "\nhello\n" can be expressed as:
'

hello

'
instead of
&#10;
'hello'
&#10;

2024-04-11: Version 2.7.0

Fix where comments could disappear when indentation was just right/bad.

2024-04-02: Version 2.6.0

Add validate command to xmq, which can check doc agains an xsd.
Add xmq-diff and xmq-meld
Change --lightbg/--darkbg to --theme=darkbg
Change env variable XMQ_BG to XMQ_THEME, eg. XMQ_THEME=darkbg and XMQ_THEME=lightbg

2024-03-26: Version 2.5.0

Fix so XMQ_BG is always used unless --mono.
Improve error message explaining that the TAB character is not allowed
between tokens, ie it is always content whitespace that must be quoted.
Add source size to statistics.
Print missing comma between json arrays in a json array.
Improve documentation and man page.
Add ${.} to for-each shell to get all text in node.

2024-02-10: Version 2.4.0

Add for-each command.
Add select command.
Add statistics command.

2024-01-22: Version 2.3.0

Add more internal testing.
Improve xmq default formatting.
Do not use newlines in compact mode in special cases.
Improve documentation.
Add gray/dark gray to winapi build.
Break at any character in render-html pre.
Improve colors.

2024-01-16: Version 2.2.0

Pager now works even when input is on stdin.
Color namespace grey and namespace declaration dark cyan.
Change default font size and max width for portrait devices.
Improve background color detection in xterm.
Improve documentation.
Refactor code.

2024-01-12: Version 2.1.0

Add browser command to view content in your default web browser.

2024-01-11: Version 2.0.0

Improve documentation.

2024-01-10: Version 1.9.14

Support processing instruction (pi) nodes.

2024-01-10: Version 1.9.13

Added to-text command which writes text content nodes to stdout.

2024-01-09: Version 1.9.12

Enable C++ compilation of dist/xmq.h and dist/xmq.c

2024-01-09: Version 1.9.11

Properly handle json string escapes.

2024-01-09: Version 1.9.10

Build and test with asan only on Ubuntu.
Do not release any asan binaries.

2024-01-09: Version 1.9.9

Build and test with asan.
Release with asan for all platform.

2024-01-09: Version 1.9.8

Fix Windows build.

2024-01-09: Version 1.9.7

Handle namespaces for elements. Refactor code.

2024-01-05: Version 1.9.6

Improve pager. Improve documentation. Refactor code.

2024-01-05: Version 1.9.5

Generate HTML with <br> and not <br/>.
More documentation written.

2023-12-29: Version 1.9.4

A lot of documentation is written and bugs fixed.

2023-12-22: Version 1.9

Added Windows build.
Added MacOS build.
Added JSON parsing/printing.

2023-10-14: Version 1.0

Complete rewrite from scratch.

2019-09-02: Version 0.1

Proof of concept.