diff --git a/app/__init__.py b/app/__init__.py index 0319c5a..f577408 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -7,6 +7,7 @@ from .constants import ( PermissionLevel, permission_level_string, InfoboxKind, InfoboxIcons, InfoboxHTMLClass ) +from .lib.babycode import babycode_to_html, EMOJI from datetime import datetime import os import time @@ -103,6 +104,7 @@ def create_app(): "InfoboxHTMLClass": InfoboxHTMLClass, "InfoboxKind": InfoboxKind, "__commit": commit, + "__emoji": EMOJI, } @app.context_processor @@ -124,4 +126,18 @@ def create_app(): def permission_string(term): return permission_level_string(term) + @app.template_filter('babycode') + def babycode_filter(markup): + return babycode_to_html(markup) + + @app.template_filter('extract_h2') + def extract_h2(content): + import re + pattern = r'
{children}
"
+ return f"{children}
"
else:
t = children.strip()
button = f""
diff --git a/app/routes/app.py b/app/routes/app.py
index 0892bc3..4937d08 100644
--- a/app/routes/app.py
+++ b/app/routes/app.py
@@ -1,4 +1,4 @@
-from flask import Blueprint, redirect, url_for
+from flask import Blueprint, redirect, url_for, render_template
bp = Blueprint("app", __name__, url_prefix = "/")
@@ -9,4 +9,4 @@ def index():
@bp.route("/babycode")
def babycode_guide():
- return "not yet"
+ return render_template('babycode.html')
diff --git a/app/templates/babycode.html b/app/templates/babycode.html
new file mode 100644
index 0000000..851c9f0
--- /dev/null
+++ b/app/templates/babycode.html
@@ -0,0 +1,114 @@
+
+{% extends 'base.html' %}
+{% block title %}babycode guide{% endblock %}
+{% block content %}
+You may be familiar with BBCode, a loosely related family of markup languages popular on forums. Babycode is another, simplified, dialect of those languages. It is a way of formatting text by enclosing parts of it in special tags.
+[b][/b]
:[i][/i]
:[s][/s]
:There are a few emoji in the style of old forum emotes:
+Short code | +Emoji result | +
---|---|
:{{ emoji }}: | +{{ __emoji[emoji] | safe }} | +
Special thanks to the Forumoji project and its contributors for these graphics.
+Line breaks in babycode work like Markdown: to start a new paragraph, use two line breaks:
+ {{ '[code]paragraph 1\n\nparagraph 2[/code]' | babycode | safe }} + Will produce:To break a line without starting a new paragraph, end a line with two spaces:
+ {{ '[code]paragraph 1 \nstill paragraph 1[/code]' | babycode | safe }} + That will produce:Loose links (starting with http:// or https://) will automatically get converted to clickable links. To add a label to a link, use[url=https://example.com]Link label[/url]
:
+ Link label
To add an image to your post, use the [img]
tag:
+ [img=https://forum.poto.cafe/avatars/default.webp]the Python logo with a cowboy hat[/img]
+ {{ '[img=/static/avatars/default.webp]the Python logo with a cowboy hat[/img]' | babycode | safe }}
+
Text inside the tag becomes the alt text. The attribute is the image URL.
+Images will always break up a paragraph and will get scaled down to a maximum of 400px. The text inside the tag will become the image's alt text.
+There are two kinds of code blocks recognized by babycode: inline and block. Inline code blocks do not break a paragraph. They can be added with [code]your code here[/code]
. As long as there are no line breaks inside the code block, it is considered inline. If there are any, it will produce this:
Inline code tags look like this: {{ '[code]Inline code[/code]' | babycode | safe }}
+Babycodes are not parsed inside code blocks.
+Text enclosed within [quote][/quote]
will look like a quote:
A man provided with paper, pencil, and rubber, and subject to strict discipline, is in effect a universal machine.+
There are two kinds of lists, ordered (1, 2, 3, ...) and unordered (bullet points). Ordered lists are made with [ol][/ol]
tags, and unordered with [ul][/ul]
. Every new paragraph according to the usual paragraph rules will create a new list item. For example: