# MakeupCure
A [Makeup](https://hex.pm/packages/makeup) lexer for the
[Cure](https://cure-lang.org) programming language.
## Supported Cure version
The lexer tracks the surface syntax of Cure as of
**v0.28.0** (see the Cure
[`CHANGELOG.md`](https://github.com/am-kantox/cure/blob/main/CHANGELOG.md)).
Features covered include:
- Container declarations: `mod`, `fn`, `rec`, `type`, `proto`, `impl`, `fsm`,
`actor`, `sup`, `app`, `proof`.
- Control flow and pattern matching: `if`/`elif`/`else`/`then`, `match`/`when`,
`for`/`in`, `try`/`catch`/`finally`, `throw`, `return`, `yield`, `end`.
- Dependent-type constructs: `assert_type`, `rewrite`, typed holes (`??`,
`?name`), implicit arguments, predicate identifiers (`even?`, `is_empty?`).
- FSM / actor / supervisor / application lifecycle callbacks: `on_start`,
`on_stop`, `on_transition`, `on_enter`, `on_exit`, `on_failure`,
`on_timer`, `on_message`, `on_phase`.
- Operators: pipe `|>`, string concat `<>`, range `..` / `..=`, Melquiades
send `<-|` (and its unicode alias `✉`), binary-comprehension generator
`<-`, bitstring segment specifier `::`, augmented assignment
`+=` / `-=` / `*=` / `/=`, FSM transitions `--event-->`.
- Literals: integers (including `0xFF`, `0b1010`, digit-grouped), floats,
booleans, atoms, chars, strings with `#{...}` interpolation, regexes,
maps `%{...}`, tuples `%[...]`, binaries `<<...>>`.
- Comments: plain `#`, single-line doc `##`, fenced multi-line `###...###`
(the last two are highlighted as `:string_doc`).
## Installation
Add `makeup_cure` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:makeup_cure, "~> 0.2"}
]
end
```
The lexer will be automatically registered in Makeup for
the language name `"cure"` and the file extension `.cure`.
## Usage
Once installed, ExDoc and any other tool using Makeup will automatically
syntax-highlight Cure code blocks (tagged with `cure` as the language).
You can also use it directly:
```elixir
alias Makeup.Lexers.CureLexer
CureLexer.lex("fn add(a: Int, b: Int) -> Int = a + b")
```
## License
MIT—see [LICENSE](LICENSE) for details.