Clone wiki

LMX / Home


This is the primary repository for the LMX backwards XML parser.

What it is

A parser that parses XML data from end to start, not start to end.

Unlike some XML parsers, LMX is designed to support incremental parsing of chunks of data.

Why it is

Adium uses an XML-based format for its chat transcripts. It has a feature where it displays the last five or so messages from a contact when you open a new chat with them. LMX exists to enable Adium to easily retrieve those last five messages or so without having to read and parse the whole file.

There are other solutions, such as using a database for that, but they would have required us to store messages in two places. Additionally, LMX's strict XML requirements have helped detect several XML-generation bugs in Adium, especially in the first couple of releases after it adopted the new format.

LMX past and future

The LMX 1.x series is written in pure Cocoa and so has only a Cocoa-based API, similar to that of NSXMLParser. The Cocoa-based LMX is maintained on the LMX-1.0 branch.

The second system, LMX 2.0, will be a state-machine written in C, exposing a C-based API. (A Cocoa wrapper may follow.) The C-based LMX will be developed on the default branch.

Please do not commit patches for LMX 1.x on the default branch.