diff --git a/src/bozodown.py b/src/bozodown.py
deleted file mode 100644
index 224d51e..0000000
--- a/src/bozodown.py
+++ /dev/null
@@ -1,153 +0,0 @@
-from __future__ import annotations
-
-from collections.abc import Callable
-from typing import Any
-
-def _photohub_render(id: str, text: str) -> str:
- if (id == "img"):
- return f""
-
-def _bozodown_render(id: str, text: str) -> str:
- if (id == "list"):
- print("error: list not supported")
- return ""
- if (id == "block"):
- style, to_parse = text[5:-5].split("---")
- style = style.replace("\n", "")
- content: str = render(to_parse)
- return f"""
-
",
- "to_suffix": "
",
- "to_suffix": "
",
- },
- {
- "from_prefix": "![",
- "from_suffix": "]",
- "code": "photohub:img",
- },
- {
- "from_prefix": "- [ ] ",
- "from_suffix": "\n",
- "to_prefix": "", - "to_suffix": "
", -} - -def _render_element(text: str, converter: dict[str, str]) -> str: - code: str = converter.get("code") - if (code is not None): - namespace, id = code.split(":") - func = _specific_case_namespaces[namespace] - return func(id, text) - start: int = len(converter["from_prefix"]) - stop: int = len(text) - len(converter.get("from_suffix", "")) - return f"{converter['to_prefix']}{text[start:stop]}{converter['to_suffix']}" - -def _get_first_converter(text: str) -> tuple[str, dict] | None: - first_converter_found: dict[str, str | Callable[[str, list[str]], Any]] | None = None - start: int | None = None - for converter in _converters: - matching_patern_pos: str = text.find(converter['from_prefix']) - if (matching_patern_pos != -1): - if (first_converter_found is None or matching_patern_pos < start): - first_converter_found = converter - start = matching_patern_pos - if (first_converter_found is None): - return text, _default_converter - if (start != 0): - return text[:start], _default_converter - suffix: int = first_converter_found.get("from_suffix", "") - prefix: int = first_converter_found['from_prefix'] - stop: int = text.find(suffix, start + len(prefix)) - if (stop == -1): - print(f"error: '{prefix}' was never finished by a '{suffix}'") - return - stop += len(suffix) - return text[start:stop], first_converter_found - -def render(raw_content: str) -> str: - content: str = "" - to_parse: str = raw_content - while len(to_parse) > 0: - text, converter = _get_first_converter(to_parse) - content += _render_element(text, converter) - to_parse = to_parse[len(text):] - return content \ No newline at end of file diff --git a/src/bozodown/__init__.py b/src/bozodown/__init__.py new file mode 100644 index 0000000..acf0ac1 --- /dev/null +++ b/src/bozodown/__init__.py @@ -0,0 +1 @@ +__all__ = ["Bozodown"] \ No newline at end of file diff --git a/src/bozodown/bozodown.py b/src/bozodown/bozodown.py new file mode 100644 index 0000000..a89a6d0 --- /dev/null +++ b/src/bozodown/bozodown.py @@ -0,0 +1,65 @@ + + +from collections.abc import Callable + +from . import default_converters + +class Bozodown(): + + def __init__(self): + self._converters: dict[str, dict[str, str]] = default_converters.converters.copy() + self._text_converter: dict[str, str] = default_converters.text_converter.copy() + self._specific_case_namespaces: dict[str, Callable[[object, str, str], str]] = { + "bozodown": self._bozodown_render, + } + + def render(self, to_parse: str): + content: str = "" + while len(to_parse) > 0: + text, converter = self._get_first_converter(to_parse) + content += self._render_element(text, converter) + to_parse = to_parse[len(text):] + return content + + + def _render_element(self, text: str, converter: dict[str, str]) -> str: + code: str = converter.get("code") + if (code is not None): + namespace, id = code.split(":") + func = self._specific_case_namespaces[namespace] + return func(id, text) + start: int = len(converter["from_prefix"]) + stop: int = len(text) - len(converter.get("from_suffix", "")) + return f"{converter['to_prefix']}{text[start:stop]}{converter['to_suffix']}" + + def _bozodown_render(self, id: str, text: str) -> str: + if (id == "list"): + print("error: list not supported") + return "" + if (id == "block"): + style, to_parse = text[5:-5].split("---") + style = style.replace("\n", "") + content: str = self.render(to_parse) + return f"",
+ "to_suffix": "
",
+ "to_suffix": "
",
+ },
+ "image": {
+ "from_prefix": "![",
+ "from_suffix": "]",
+ "to_prefix": "", + "to_suffix": "
", +} \ No newline at end of file diff --git a/src/photodown.py b/src/photodown.py new file mode 100644 index 0000000..aaac921 --- /dev/null +++ b/src/photodown.py @@ -0,0 +1,28 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +from bozodown.bozodown import Bozodown + +if TYPE_CHECKING: + from picture import Picture + from bulk_page import BulkPage + +class Photodown(Bozodown): + + def __init__(self): + super().__init__() + self._specific_case_namespaces.update({"photohub": self._photohub_render}) + image_converter = self._converters.get("image") + image_converter.update({"code": "photohub:image"}) + self._bulk: list[Picture] = [] + + def add_bulk(self, bulk: list[Picture]): + self._bulk = bulk.copy() + + def _photohub_render(self, id: str, text: str) -> str: + if (id == "image"): + picture_url = f"{text[2:-1]}" + + return f"