https://github.com/ente/protoml-parser
ProtoML is a lightweight, declarative markup language designed for writing and structuring meeting protocols, notes and task lists in a human-readable and machine-parseable format.
https://github.com/ente/protoml-parser
markup-language meeting meetings-enhancement parser protocols
Last synced: 3 months ago
JSON representation
ProtoML is a lightweight, declarative markup language designed for writing and structuring meeting protocols, notes and task lists in a human-readable and machine-parseable format.
- Host: GitHub
- URL: https://github.com/ente/protoml-parser
- Owner: Ente
- License: gpl-3.0
- Created: 2025-05-22T15:01:58.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2025-05-27T03:23:29.000Z (about 1 year ago)
- Last Synced: 2025-11-27T09:35:12.749Z (6 months ago)
- Topics: markup-language, meeting, meetings-enhancement, parser, protocols
- Language: JavaScript
- Homepage: https://openducks.org/protoml.php
- Size: 80.1 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# ProtoML - A minimal structured protocol language
ProtoML is a lightweight, declarative markup language designed for writing and structuring meeting protocols, notes and task lists in a human-readable and machine-parseable format.
## Installing the Parser
- Clone the repository: `git clone https://github.com/ente/protoml-parser.git`
- Install the app: `npm install -g .`
- Restart your terminal
- Run `protoparser test.pml html` to convert a file named `test.pml` to HTML.
- Run `protoviewer test.pml [theme]` to view the file with the built-in viewer.
## Install via NPM
Requires Node 18
```bash
npm install -g protoml-parser
```
## Key Concepts
- **Purely declarative** - no logic, no runtime, just the code
- **Flat structure** with modular references
- **External resources** such as tags or files are importable
- **Styling & referencing syntax** included
- **Fully parsable into structured JSON, HTML or PDF files**
## Syntax Overview
| Symbol | Meaning |
| ------ | ------- |
| `@command` | Starts a data block (e.g. `@participants`) |
| `@@command` | Used inside `@meeting`, acts as inline macro |
| `=` | Declare an ID for referencing |
| `:` | Assigns value to the declared ID |
| `-` | Declares a plain list entry |
| `#`, `##` | Markdown-style headers |
| `//` | Comment, ignored by parser |
| `-b Text -b-`, `-i Text -i-`, `-a=url Text -a-` | Inline text styling |
## Example
All available commands are used in this example.
```plaintext
@tags_import "tags.pml"
@macro myMacro "myMacro.pml"
@date:21.05.2025
@participants // or @ptp
=pt1=John Doe,jdoe,jdoe@example.com
=pt2=Jane Doe
@subjects
=0:Project Status: TimeTrack
=1:Security: TLS Check
@tasks
-[ ] Renew SSL certificate @ptp=pt1 =1 @tag=important // Assigns the tasks to participant "pt1", assigns it to subject with ID 1 and tags it with the "important" tag
@notes
- PDF export works -b very well -b-
@meeting
# Meeting Title: @@e=0 // echoes value of ID 0
## Participants
@@e=pt1 , @@e=pt2
## Some topic
@@macro=myMacro:title=IMPORTANT;text=@@e=1
.....
```
## External tags file (tags.pml) - not fully supported, yet
```plaintext
@tags // this command behaves differently when used in the tags.pml
=0:Important
=important:Critical, high priority
```
## External macro file (myMacro.pml)
Macros allow you to do any styling the render is not able to understand, the below's example therefore can only affectively be used with the `html` render.
* `=name:myMacro` defines the name to be used when accessing the macro like `@@macro=myMacro:....`
* `=template:` defines what the macro does, this can be multiline.
**For `html` renders, keep in mind, that `protoparser` does not remove JS code contained inside a `html` macro.
This could lead to possible security risks like XSS**
The behavior for this will be changed in release v1.1.0, allowing native JS integration to your scripts.
```plaintext
@new_macro
=name:myMacro
=template: