#+TITLE: Rust SDML
#+AUTHOR: Simon Johnston
#+EMAIL: johnstonskj@gmail.com
#+LANGUAGE: en
#+STARTUP: overview hidestars inlineimages entitiespretty
#+OPTIONS: author:nil created:nil creator:nil date:nil email:nil num:3 toc:nil

[[https://raw.githubusercontent.com/sdm-lang/.github/main/profile/horizontal-text.svg]]

Rust Library and Tools for the Simple Domain Modeling Language (SDML).

[[https://opensource.org/licenses/Apache-2.0][https://img.shields.io/badge/License-Apache_2.0-blue.svg]]
[[https://github.com/johnstonskj/rust-sdml/actions/workflows/rust.yml][https://github.com/johnstonskj/rust-sdml/actions/workflows/rust.yml/badge.svg]]
[[https://github.com/johnstonskj/rust-sdml/actions/workflows/security-audit.yml][https://github.com/johnstonskj/rust-sdml/actions/workflows/security-audit.yml/badge.svg]]
[[https://codecov.io/gh/johnstonskj/rust-sdml][https://codecov.io/gh/johnstonskj/rust-sdml/branch/main/graph/badge.svg?token=1HGN6M4KIT]]
[[https://github.com/johnstonskj/rust-sdml/stargazers][https://img.shields.io/github/stars/johnstonskj/rust-sdml.svg]]

This project's intent is to provide an idiomatic implementation of the in-memory model, parser, generators, and the CLI
tool. The following figure shows the usage and relationships of the packages in this workspace.

#+CAPTION: Package Organization
#+BEGIN_EXAMPLE
                         ╭───────╮
                         │  CLI  │
                    ╔══  │ crate │  ══╗
                    ║    ╰───────╯    ║
┌╌╌╌╌╌╌╌╌┐          V                 V
┆        ┆       ╭───────╮       ╭──────────╮       Formatted Source
┆ source ┆  ══>  │ parse │  ══>  │ generate │  ══>  RDF Representation 
┆  file  ┆   ╭───│ crate │───────│   crate  │───╮   Documentation
┆        ┆   │   ╰───────╯       ╰──────────╯   │   Diagrams
└╌╌╌╌╌╌╌╌┘   │        core/errors crate         │
             ╰──────────────────────────────────╯
 ┌───────┐                  ⋀
 │ other │                  ║
 │ tools │  ════════════════╝
 └───────┘
#+END_EXAMPLE

To install the command-line tool on MacOS or Linux use the Homebrew package manager and the SDML Tap.

#+BEGIN_SRC sh :exports code :eval never
❯ brew install sdm-lang/sdml/sdml
#+END_SRC

* Packages
** errors

This [[./sdml-errors/README.org][package]] contains the common =Error= type as well as a diagnostic set for reporting language parse and model issues.

[[https://crates.io/crates/sdml-errors][https://img.shields.io/crates/v/sdml-errors.svg]]
[[https://docs.rs/sdml-errors][https://img.shields.io/docsrs/sdml-errors.svg]]

** core

This [[./sdml-core/README.org][package]] contains the in-memory model of an sdml module, the major component of the project itself. It also has
traits (`ModuleLoader`, `ModuleResolver`, `ModuleStore`) that are required by packages that follow.

[[https://crates.io/crates/sdml_core][https://img.shields.io/crates/v/sdml_core.svg]]
[[https://docs.rs/sdml_core][https://img.shields.io/docsrs/sdml-core.svg]]

** parse

This [[./sdml-parse/README.org][package]] contains the bridge from the tree-sitter SDML library to the in-memory model in =sdml_core=.

[[https://crates.io/crates/sdml_parse][https://img.shields.io/crates/v/sdml_parse.svg]]
[[https://docs.rs/sdml_parse][https://img.shields.io/docsrs/sdml-parse.svg]]

** generate

This [[./sdml-generate/README.org][package]] contains a set of tools for generating alternative representations of an in-memory module as well as
related actions for the CLI.

[[https://crates.io/crates/sdml_generate][https://img.shields.io/crates/v/sdml_generate.svg]]
[[https://docs.rs/sdml_generate][https://img.shields.io/docsrs/sdml-generate.svg]]

** cli

This [[./sdml-cli/README.org][package]] contains the entry-point for the command-line tool.

[[https://crates.io/crates/sdml_cli][https://img.shields.io/crates/v/sdml_cli.svg]]

* License

This repository, and all contents, are released under the Apache License, Version 2.0. See [[./LICENSE][LICENSE]] file
for details.

For information on contributing, see [[./doc/contributing.org][How to Contribute]], and the [[./doc/code_of_conduct.org][Code of Conduct]].

* Changes

After version 0.1.4 the single crate has been replaced with the four =sdml-core=, =sdml-errors=, =sdml-parse=, =sdml-generate=, and =sdml-cli=.
Each will have it's own version history starting with *0.1.5*.

*Version: 0.1.4*

- Support the latest grammar
- UML Class Diagram (initial)
- Modeling Library modules

*Version: 0.1.3*

- Support the latest grammar

*Version: 0.1.2*

- Syntax highlighting supported
- Support the latest grammar

*Version: 0.1.1*

- More drawing details
- More command-line features
- Support the latest grammar

*Version: 0.1.0*

- Initial version, limited to basic drawings

* Other Links

** Formatting

- https://github.com/numtide/treefmt/wiki
- https://melpa.org/#/format-all
- https://github.com/tweag/topiary

** Linting

- https://github.com/github/super-linter
