Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pyrustic/litemark
Lightweight Markdown dialect for Python desktop apps
https://github.com/pyrustic/litemark
codegame desktop-app lightweight litemark markdown markup preview pyrustic scanner text tkinter tokens
Last synced: 2 days ago
JSON representation
Lightweight Markdown dialect for Python desktop apps
- Host: GitHub
- URL: https://github.com/pyrustic/litemark
- Owner: pyrustic
- License: mit
- Created: 2021-09-29T19:48:21.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2022-04-24T15:07:41.000Z (over 2 years ago)
- Last Synced: 2024-09-21T11:08:16.476Z (6 days ago)
- Topics: codegame, desktop-app, lightweight, litemark, markdown, markup, preview, pyrustic, scanner, text, tkinter, tokens
- Language: Python
- Homepage: https://pyrustic.github.io
- Size: 35.2 KB
- Stars: 13
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
This project is part of the [Pyrustic Open Ecosystem](https://pyrustic.github.io).
[Usage](#usage) | [Installation](#installation)
# Litemark
`Litemark` is a lightweight `Markdown` dialect originally created to be the markup language for the [Codegame Platform](https://github.com/pyrustic/codegame) project.
When you run `litemark` from the command line interface without any arguments, the `Litemark Viewer` opens and displays the rendered demo.
Litemark demo rendered in the Litemark Viewer
litemark-demo.md (plain text)
## Usage
The name `Litemark` refers to both the markup language and the distribution package.The distribution package comes with an API, a command line interface, and a graphical viewer.
### API
It is easy to break an arbitrary plain text into a flat list of tokens:
```python
import litemarkplain_text = """Hello *World* ! Visit the [repository](https://github.com/pyrustic/litemark) !"""
for token in litemark.scan(plain_text):
# a token instance is a named tuple with 2 fields: name and data
print(token)
```
The output:
```
Token(name='STRING', data='Hello ')
Token(name='BOLD', data='World')
Token(name='STRING', data=' ! Visit the ')
Token(name='LINK', data=('repository', 'https://github.com/pyrustic/litemark', ''))
Token(name='STRING', data=' !')
```
The formal names of the tokens are defined in `litemark.Element`:
```python
class Element:
CODEBLOCK = "CODEBLOCK"
HEADING = "HEADING"
BOLD = "BOLD"
ITALIC = "ITALIC"
WARNING = "WARNING"
OVERSTRIKE = "OVERSTRIKE"
IMAGE = "IMAGE"
INLINK = "INLINK"
LINK = "LINK"
STRING = "STRING"
```
The token's `data` field represents a string for all elements except the following:
- **Element.CODEBLOCK**: 2-tuple (str-title, str-content)
- **Element.HEADING**: 2-tuple (int-level, str-content)
- **Element.IMAGE**: 3-tuple (str-inline, str-path, str-alt)
- **Element.INLINK**: 3-tuple (str-inline, str-path, str-alt)
- **Element.LINK**: 3-tuple (str-inline, str-URL, str-alt)### Command line interface
To open `litemark-demo.md` in the graphical `Viewer`:
```bash
$ litemark
```To open a specific `litemark` file in the graphical `Viewer`:
```bash
$ cd /path/to/root
$ litemark my-file.md
```**Note:**
> Litemark is created for use in a desktop application. Thus, the Litemark Scanner assumes that the images referenced in a litemark document are relative to the `root` directory. The `root` directory is simply the current working directory. For this reason, you must first do a `cd` (change directory) to the root before rendering a document.### Graphical Viewer
It is easy to embed a `Litemark Viewer` in your Python desktop app:
```python
import litemark
import tkinter as tkroot_directory = "/home/alex/demo"
litemark_filename = "/home/alex/demo/document.md"# your GUI
gui = tk.Tk()
gui.geometry("500x500+0+0")# let's embed a Litemark Viewer in this GUI
# -- text widget
text_widget = tk.Text(gui)
text_widget.pack(expand=1, fill=tk.BOTH)# -- the viewer instance
viewer = litemark.Viewer(widget=text_widget, root=root_directory)
viewer.open(litemark_filename)
viewer.readonly = True# done !
gui.mainloop()
```This is a work in progress. A reference documentation will be released soon.
## Installation
### Install for the first time
```bash
pip install litemark
```### Upgrade
```bash
pip install litemark --upgrade --upgrade-strategy eager
```## Related projects
- [Codegame Platform](https://github.com/pyrustic/codegame): create, distribute, and run codegames
- [shared](https://github.com/pyrustic/shared): library to store, expose, read, and edit collections of dataThis is a work in progress...