Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/keenwrite.git
# Open-source software

{{app.title}} is free, open-source software.

## License

Copyright © 2025 White Magic Software, Ltd.

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
Street, Fifth Floor, Boston, MA 02110-1301 USA.

The full text of the GPLv2 license can be found at:
[https://www.gnu.org/licenses/old-licenses/gpl-2.0.html](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html)

## Software architecture

[@fig:architecture] illustrates the software's high-level application
architecture. The processing pipeline transforms textual content through
multiple stages to produce the final document. Each processor in the
chain receives a document from its predecessor. This allows each
processor to handle a single responsibility, such as curling quotation
marks, replacing variable names, or inserting a caret position.

![architecture](images/architecture/architecture)

:: Software architecture {#fig:architecture}

* The **"Today"** section shows a single flow where a user writes in Markdown,
which is then processed and converted into a final HTML output. This is
typical of most conversion programs written today: they can only handle a
single type of input and a single type of output.

* The **"Proposed"** section shows that the architecture can be updated to
handle a wider range of input formats, all feeding into a more flexible
*Processor Chain*. The two-way arrow indicates that the output from one
processing pass can be be fed back into the next process.

* The **"Example Processing Combination"** section provides a detailed look at
how the system could handle multiple, complex inputs and outputs
simultaneously. It shows how different data formats (XML, YAML, JSON, etc.)
are processed through dedicated processors (XSLT Processor, R Processor,
etc.) to produce a variety of outputs (R Markdown, Markdown, HTML5),
demonstrating a more robust and interconnected system.