MarkdownUp is a Markdown viewer
Project description
markdown-up
MarkdownUp is a Markdown viewer.
Install MarkdownUp
Use Python's pip to install MarkdownUp as follows:
pip install markdown-up
View Markdown Files
To start MarkdownUp, open a terminal and run the markdown-up application:
markdown-up
The markdown-up application opens the web browser to the MarkdownUp file browser, which allows you
to view Markdown or HTML files and navigate directories. To view a file, click on its link.
You can view a specific file as follows:
markdown-up README.md
Note: MarkdownUp runs entirely offline. It does not use an external service to render Markdown files.
Running MarkdownUp
When you run the markdown-up application, in addition to opening the web browser, it starts a
chisel
backend API application using
waitress.
Automatic HTML for Markdown Files
When you run MarkdownUp and click on a Markdown file link, the link navigates to an HTML file that
renders the Markdown file. Every Markdown file hosted by MarkdownUp has a corresponding .html file
of the same name. For example, if you run MarkdownUp in a directory that has the following Markdown
files: "README.md" and "CHANGELOG.md". The MarkdownUp service automatically generates "README.html"
and "CHANGELOG.html" files.
The generated .html files are HTML stubs for the
MarkdownUp Front-End Application.
All Markdown parsing and rendering are done on the client.
Configuration File
The
MarkdownUp Application Configuration File,
markdown-up.json, allows you to enable release mode, set the number of backend server threads, and more.
Command-Line Arguments
The markdown-up application has the following command-line arguments:
usage: markdown-up [-h] [-p N] [-t N] [-n] [-r] [-q] [-d] [-v VAR EXPR] [-c FILE] [-a FILE] [path]
positional arguments:
path the file or directory to view (default is ".")
options:
-h, --help show this help message and exit
-p, --port N the application port (default is 8080)
-t, --threads N the number of web server threads (default is 8)
-n, --no-browser don't open a web browser
-r, --release release mode (cache statics, remove documentation and index)
-q, --quiet hide access logging
-d, --debug backend debug mode
-v, --var VAR EXPR set a backend global variable
-c, --config FILE the application config filename (default is "markdown-up.json")
-a, --api FILE the API config filename (default is "markdown-up-api.json")
MarkdownUp Applications
With MarkdownUp, you can write client-rendered frontend applications and backend APIs using BareScript.
MarkdownUp Frontend Applications
MarkdownUp frontend applications are created by adding markdown-script fenced code blocks containing
BareScript
to a Markdown file and viewing it with the MarkdownUp frontend application. When the Markdown file
is rendered, the BareScript is executed and its results are rendered in place. For example:
# Frontend Hello World
```markdown-script
markdownPrint('Hello, **World**!!')
```
MarkdownUp Frontend Reference
The MarkdownUp Include Library
MarkdownUp Backend APIs
MarkdownUp backend applications are created by adding a
MarkdownUp Backend API Configuration File,
markdown-up-api.json.
The markdown-up-api.json file specifies the following:
-
The Schema Markdown files containing the API input and output schema definitions
-
The BareScript files containing the API implementations
MarkdownUp Backend Reference
MarkdownUp Backend API Configuration File
The MarkdownUp Backend API Library
MarkdownUp Full Stack Application Example
In this simple full-stack application example, we'll create a MarkdownUp frontend application to input two numbers and display their sum. We'll use a MarkdownUp backend API to sum the numbers.
index.md
The frontend application's index file, index.md, includes the application script and executes the
main entry point:
```markdown-script
include 'example.bare'
exampleMain()
```
example.bare
The frontend application file, example.bare, uses the
args.bare
include library to parse the application arguments. It then uses the sumNumbers API to sum the
numbers. Finally, it then renders the links to change the input numbers and the result.
include <args.bare>
# The example application main entry point
async function exampleMain():
args = argsParse(exampleArguments)
n1 = objectGet(args, 'n1')
n2 = objectGet(args, 'n2')
# Call the backend service to add the two numbers
sumResponseText = systemFetch(objectNew( \
'url', 'sumNumbers', \
'body', jsonStringify(objectNew('n1', n1, 'n2', n2)) \
))
sumResponseJSON = if(sumResponseText, jsonParse(sumResponseText))
result = if(sumResponseJSON, objectGet(sumResponseJSON, 'result'))
# Render the page
title = 'Sum Two Numbers'
documentSetTitle(title)
markdownPrint( \
'# ' + markdownEscape(title), \
'', \
'n1 = ' + n1 + ' (' + \
argsLink(exampleArguments, 'Down', objectNew('n1', n1 - 1)) + ' | ' + \
argsLink(exampleArguments, 'Up', objectNew('n1', n1 + 1)) + ')', \
'', \
'n2 = ' + n2 + ' (' + \
argsLink(exampleArguments, 'Down', objectNew('n2', n2 - 1)) + ' | ' + \
argsLink(exampleArguments, 'Up', objectNew('n2', n2 + 1)) + ')', \
'', \
n1 + ' + ' + n2 + ' = ' + result \
)
endfunction
# The example application's arguments (for use with argsParse, etc.)
exampleArguments = arrayNew( \
objectNew('name', 'n1', 'type', 'float', 'default', 0), \
objectNew('name', 'n2', 'type', 'float', 'default', 0) \
)
markdown-up-api.json
The
MarkdownUp Backend API Configuration File,
markdown-up-api.json, specifies the backend API:
{
"schemas": ["example.smd"],
"scripts": ["exampleAPI.bare"],
"apis": [
{"name": "sumNumbers"}
]
}
example.smd
The API input and output schemas are defined using Schema Markdown.
group "Example"
# Sum two numbers
action sumNumbers
input
# The first number
float n1
# The second number
float n2
output
# The sum of the two numbers
float result
exampleAPI.bare
The backend API is implemented in BareScript.
By default, API implementation functions have the same name as the API schema definition. API
implementation functions take a single argument, request, that is the schema-validated input
object.
# Implementation of the sumNumbers API
function sumNumbers(request):
n1 = objectGet(request, 'n1')
n2 = objectGet(request, 'n2')
return objectNew('result', n1 + n2)
endfunction
To run the application, run markdown-up in the directory containing the application files.
markdown-up index.md
Development
This package is developed using python-build. It was started using python-template as follows:
template-specialize python-template/template/ markdown-up-py/ -k package markdown-up -k name 'Craig A. Hobbs' -k email 'craigahobbs@gmail.com' -k github 'craigahobbs' -k noapi 1
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file markdown_up-2.3.0.tar.gz.
File metadata
- Download URL: markdown_up-2.3.0.tar.gz
- Upload date:
- Size: 15.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3491fe4b2c8dd04733634d746f33cb3a3e7ae3beec4c9ec848c2f92041454eb5
|
|
| MD5 |
15a7efb83d5f027abadb1a7d7941c3e5
|
|
| BLAKE2b-256 |
79bc06380b3d68fb57ea3768deb71eafd336d65762a96a89f587da6c90ffcb2e
|
File details
Details for the file markdown_up-2.3.0-py3-none-any.whl.
File metadata
- Download URL: markdown_up-2.3.0-py3-none-any.whl
- Upload date:
- Size: 15.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2916e1c1cc705de352ad6f93695b9864de3218467e5061d07a4ceb8a5199e24b
|
|
| MD5 |
cabdca4a4512de187868072bacbcb1e0
|
|
| BLAKE2b-256 |
369ef0cb6fb5b8975b6bde14f3ae1465ccc7b1c26e285d6773c3857c671c309a
|