Compare commits
No commits in common. "e4cd94b7c3b005db880aaf7320c67420b689d24d" and "6b3c48e0675ea80456245de2a95170405362fbef" have entirely different histories.
e4cd94b7c3
...
6b3c48e067
|
@ -1,5 +0,0 @@
|
||||||
.git
|
|
||||||
.gitignore
|
|
||||||
config.ini
|
|
||||||
README.md
|
|
||||||
TODO
|
|
|
@ -1,11 +1,6 @@
|
||||||
FROM python:3.10-alpine
|
FROM python:3.10-alpine
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
COPY requirements.txt /app/requirements.txt
|
|
||||||
|
|
||||||
RUN pip install -r /app/requirements.txt && rm /app/requirements.txt
|
|
||||||
|
|
||||||
COPY . /app
|
COPY . /app
|
||||||
|
WORKDIR /app
|
||||||
|
RUN pip install -r /app/requirements.txt
|
||||||
|
|
||||||
CMD ["python3", "-m", "mastoposter", "/config.ini"]
|
CMD ["python3", "-m", "mastoposter", "/config.ini"]
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
from html import escape
|
from html import escape
|
||||||
from typing import Callable, Dict
|
|
||||||
from bs4.element import Tag, PageElement
|
from bs4.element import Tag, PageElement
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,119 +16,31 @@ def md_escape(text: str) -> str:
|
||||||
|
|
||||||
|
|
||||||
def node_to_html(el: PageElement) -> str:
|
def node_to_html(el: PageElement) -> str:
|
||||||
TAG_TRANSFORMS: Dict[str, Callable[[Tag,], str]] = {
|
|
||||||
"a": lambda tag: '<a href="{}">{}</a>'.format(
|
|
||||||
escape(tag.attrs["href"]),
|
|
||||||
str.join("", map(node_to_html, tag.children)),
|
|
||||||
),
|
|
||||||
"p": lambda tag: (
|
|
||||||
str.join("", map(node_to_html, tag.children)) + "\n\n"
|
|
||||||
),
|
|
||||||
"i": lambda tag: (
|
|
||||||
"<i>%s</i>" % str.join("", map(node_to_html, tag.children))
|
|
||||||
),
|
|
||||||
"b": lambda tag: (
|
|
||||||
"<b>%s</b>" % str.join("", map(node_to_html, tag.children))
|
|
||||||
),
|
|
||||||
"s": lambda tag: (
|
|
||||||
"<s>%s</s>" % str.join("", map(node_to_html, tag.children))
|
|
||||||
),
|
|
||||||
"u": lambda tag: (
|
|
||||||
"<u>%s</u>" % str.join("", map(node_to_html, tag.children))
|
|
||||||
),
|
|
||||||
"pre": lambda tag: (
|
|
||||||
"\n<pre>%s</pre>\n" % str.join("", map(node_to_html, tag.children))
|
|
||||||
),
|
|
||||||
"code": lambda tag: (
|
|
||||||
"<code>%s</code>" % str.join("", map(node_to_html, tag.children))
|
|
||||||
),
|
|
||||||
"blockquote": lambda tag: "\n%s"
|
|
||||||
% str.join(
|
|
||||||
"\n",
|
|
||||||
(
|
|
||||||
"| %s" % part
|
|
||||||
for part in str.join(
|
|
||||||
"", map(node_to_html, tag.children)
|
|
||||||
).split("\n")
|
|
||||||
),
|
|
||||||
),
|
|
||||||
"br": lambda _: "\n",
|
|
||||||
}
|
|
||||||
|
|
||||||
TAG_SUBSTITUTIONS: Dict[str, str] = {
|
|
||||||
"strong": "b",
|
|
||||||
"em": "i",
|
|
||||||
"del": "s",
|
|
||||||
"ins": "u",
|
|
||||||
}
|
|
||||||
|
|
||||||
if isinstance(el, Tag):
|
if isinstance(el, Tag):
|
||||||
if el.name in TAG_TRANSFORMS:
|
if el.name == "a":
|
||||||
return TAG_TRANSFORMS[el.name](el)
|
return '<a href="{}">{}</a>'.format(
|
||||||
if el.name in TAG_SUBSTITUTIONS:
|
escape(el.attrs["href"]),
|
||||||
sub = TAG_SUBSTITUTIONS[el.name]
|
str.join("", map(node_to_html, el.children)),
|
||||||
if sub in TAG_TRANSFORMS:
|
)
|
||||||
return TAG_TRANSFORMS[sub](el)
|
elif el.name == "p":
|
||||||
|
return str.join("", map(node_to_html, el.children)) + "\n\n"
|
||||||
|
elif el.name == "br":
|
||||||
|
return "\n"
|
||||||
return str.join("", map(node_to_html, el.children))
|
return str.join("", map(node_to_html, el.children))
|
||||||
return escape(str(el))
|
return escape(str(el))
|
||||||
|
|
||||||
|
|
||||||
def node_to_markdown(el: PageElement) -> str:
|
def node_to_markdown(el: PageElement) -> str:
|
||||||
TAG_TRANSFORMS: Dict[str, Callable[[Tag,], str]] = {
|
|
||||||
"a": lambda tag: "[{}]({})".format(
|
|
||||||
md_escape(str.join("", map(node_to_markdown, tag.children))),
|
|
||||||
tag.attrs["href"],
|
|
||||||
),
|
|
||||||
"p": lambda tag: (
|
|
||||||
str.join("", map(node_to_markdown, tag.children)) + "\n\n"
|
|
||||||
),
|
|
||||||
"i": lambda tag: (
|
|
||||||
"_%s_" % str.join("", map(node_to_markdown, tag.children))
|
|
||||||
),
|
|
||||||
"b": lambda tag: (
|
|
||||||
"*%s*" % str.join("", map(node_to_markdown, tag.children))
|
|
||||||
),
|
|
||||||
"s": lambda tag: (
|
|
||||||
"~%s~" % str.join("", map(node_to_markdown, tag.children))
|
|
||||||
),
|
|
||||||
"u": lambda tag: (
|
|
||||||
"__%s__" % str.join("", map(node_to_markdown, tag.children))
|
|
||||||
),
|
|
||||||
"pre": lambda tag: (
|
|
||||||
"\n``%s``\n" % str.join("", map(node_to_markdown, tag.children))
|
|
||||||
),
|
|
||||||
"code": lambda tag: (
|
|
||||||
"`%s`" % str.join("", map(node_to_markdown, tag.children))
|
|
||||||
),
|
|
||||||
"blockquote": lambda tag: (
|
|
||||||
"\n%s"
|
|
||||||
% str.join(
|
|
||||||
"\n",
|
|
||||||
(
|
|
||||||
"▍%s" % part
|
|
||||||
for part in str.join(
|
|
||||||
"", map(node_to_markdown, tag.children)
|
|
||||||
).split("\n")
|
|
||||||
),
|
|
||||||
)
|
|
||||||
),
|
|
||||||
"br": lambda _: "\n",
|
|
||||||
}
|
|
||||||
|
|
||||||
TAG_SUBSTITUTIONS: Dict[str, str] = {
|
|
||||||
"strong": "b",
|
|
||||||
"em": "i",
|
|
||||||
"del": "s",
|
|
||||||
"ins": "u",
|
|
||||||
}
|
|
||||||
|
|
||||||
if isinstance(el, Tag):
|
if isinstance(el, Tag):
|
||||||
if el.name in TAG_TRANSFORMS:
|
if el.name == "a":
|
||||||
return TAG_TRANSFORMS[el.name](el)
|
return "[%s](%s)" % (
|
||||||
if el.name in TAG_SUBSTITUTIONS:
|
md_escape(str.join("", map(node_to_markdown, el.children))),
|
||||||
sub = TAG_SUBSTITUTIONS[el.name]
|
el.attrs["href"],
|
||||||
if sub in TAG_TRANSFORMS:
|
)
|
||||||
return TAG_TRANSFORMS[sub](el)
|
elif el.name == "p":
|
||||||
|
return str.join("", map(node_to_markdown, el.children)) + "\n\n"
|
||||||
|
elif el.name == "br":
|
||||||
|
return "\n"
|
||||||
return str.join("", map(node_to_markdown, el.children))
|
return str.join("", map(node_to_markdown, el.children))
|
||||||
return md_escape(str(el))
|
return md_escape(str(el))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue