SnakeMD is your ticket to generating markdown in Python. To prove it to you, we've generated this entire README using SnakeMD. See readme.py for how it was done. To get started, download and install SnakeMD:
pip install snakemd
In the remainder of this document, we'll show you all of the things this library can do. For more information, check out the official documentation here.
Table of Contents
Below you'll find the table of contents, but these can also be generated programatically for every markdown document.
def _table_of_contents(doc: Document): doc.add_table_of_contents()
Paragraphs are the most basic feature of any markdown file. As a result, they are very easy to create using SnakeMD.
def _paragraph(doc: Document): doc.add_paragraph("I think. Therefore, I am.")
I think. Therefore, I am.
I think. Therefore, I am.
Links are targets to files or web pages and can be embedded in a Paragraph in a variety of ways. As of v0.2.0, we're able to add links to existing paragraphs using the insert_link() method. Even better, in v0.4.0, we can chain these insert_link() calls.
def _insert_link(doc: Document): doc.add_paragraph("Learn to program with The Renegade Coder (@RenegadeCoder94).") \ .insert_link("The Renegade Coder", "https://therenegadecoder.com") \ .insert_link("@RenegadeCoder94", "https://twitter.com/RenegadeCoder94")
Learn to program with [The Renegade Coder](https://therenegadecoder.com) ([@RenegadeCoder94](https://twitter.com/RenegadeCoder94)).
Images can be added by embedding InlineText in a Paragraph.
def _image(doc: Document): logo = "https://therenegadecoder.com/wp-content/uploads/2020/05/header-logo-without-tag-300x75.png" doc.add_element(Paragraph([InlineText("Logo", url=logo, image=True)]))
SnakeMD can make a variety of markdown lists. The two main types of lists are ordered and unordered.
Ordered lists are lists in which the order of the items matters. As a result, we number them.
def _ordered_list(doc: Document): doc.add_ordered_list(["Deku", "Bakugo", "Uraraka", "Tsuyu"])
1. Deku 2. Bakugo 3. Uraraka 4. Tsuyu
Unordered lists are lists in which the order of the items does not matter. As a result, we bullet them.
def _unordered_list(doc: Document): doc.add_unordered_list(["Crosby", "Malkin", "Lemieux"])
- Crosby - Malkin - Lemieux
Nested lists are complex lists that contain lists. Currently, SnakeMD does not support any convenience methods to generate nested lists, but they can be created manually using the MDList object. As of v0.4.0, you can forego the InlineText elements if you don't need them.
def _nested_list(doc: Document): doc.add_element( MDList([ "Apples", InlineText("Onions"), MDList([ "Sweet", "Red" ]), Paragraph(["This is the end of the list!"]) ]) )
- Apples - Onions - Sweet - Red - This is the end of the list!
- This is the end of the list!
Tables are sets of rows and columns which can display text in a grid. To style any of the contents of a table, consider using Paragraph or InlineText. As of v0.4.0, you can also align the columns of the table using the Table.Align enum.
def _table(doc: Document): doc.add_table( ["Height (cm)", "Weight (kg)", "Age (y)"], [ ['150', '70', '21'], ['164', '75', '19'], ['181', '87', '40'] ], [Table.Align.LEFT, Table.Align.CENTER, Table.Align.RIGHT] )
| Height (cm) | Weight (kg) | Age (y) | | :---------- | :---------: | ------: | | 150 | 70 | 21 | | 164 | 75 | 19 | | 181 | 87 | 40 |
|Height (cm)||Weight (kg)||Age (y)|
Code blocks are a form of structured text for sharing code snippets with syntax highlighting.
def _code(doc: Document): doc.add_code("x = 5", lang="py")
```py x = 5 ```
x = 5
Quotes are blocks of text that represent quotes from people.
def _quote(doc: Document): doc.add_quote("How Now Brown Cow")
> How Now Brown Cow
How Now Brown Cow
Horizontal Rules are visible dividers in a document.
def _horizontal_rule(doc: Document): doc.add_horizontal_rule()