2021-11-27 11:54:42 +00:00
|
|
|
# Copyright: Ren Tatsumoto <tatsu at autistici.org>
|
|
|
|
# License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|
|
|
|
2022-12-02 13:31:59 +00:00
|
|
|
import dataclasses
|
2021-04-20 13:23:50 +00:00
|
|
|
import re
|
2021-11-27 11:54:42 +00:00
|
|
|
from dataclasses import dataclass
|
2021-04-20 10:27:47 +00:00
|
|
|
|
2021-11-27 11:54:42 +00:00
|
|
|
from .consts import *
|
|
|
|
|
|
|
|
|
|
|
|
class ANTPError(Exception):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
|
|
class CardTemplate:
|
|
|
|
name: str
|
|
|
|
front: str
|
|
|
|
back: str
|
|
|
|
|
2021-04-20 13:23:50 +00:00
|
|
|
|
2021-11-27 11:54:42 +00:00
|
|
|
@dataclass(frozen=True)
|
|
|
|
class NoteType:
|
|
|
|
name: str
|
|
|
|
fields: list[str]
|
|
|
|
css: str
|
|
|
|
templates: list[CardTemplate]
|
2021-04-20 10:27:47 +00:00
|
|
|
|
2022-12-02 13:31:59 +00:00
|
|
|
def rename(self, new_name: str):
|
|
|
|
_d = dataclasses.asdict(self)
|
|
|
|
del _d['name']
|
|
|
|
return type(self)(name=new_name, **_d)
|
|
|
|
|
2021-04-20 10:27:47 +00:00
|
|
|
|
|
|
|
def read_num(msg: str = "Input number: ", min_val: int = 0, max_val: int = None) -> int:
|
2022-04-03 15:00:13 +00:00
|
|
|
try:
|
|
|
|
resp = int(input(msg))
|
|
|
|
except ValueError as ex:
|
|
|
|
raise ANTPError(ex) from ex
|
2021-04-20 10:27:47 +00:00
|
|
|
if resp < min_val or (max_val and resp > max_val):
|
2021-11-27 11:54:42 +00:00
|
|
|
raise ANTPError("Value out of range.")
|
2021-04-20 10:27:47 +00:00
|
|
|
return resp
|
|
|
|
|
|
|
|
|
2021-12-25 19:38:09 +00:00
|
|
|
def select(items: list[str], msg: str = "Select item number: ") -> str | None:
|
2021-04-20 10:27:47 +00:00
|
|
|
if not items:
|
|
|
|
print("Nothing to show.")
|
|
|
|
return
|
2021-04-22 20:03:51 +00:00
|
|
|
|
2021-04-20 10:27:47 +00:00
|
|
|
for idx, model in enumerate(items):
|
|
|
|
print(f"{idx}: {model}")
|
2021-04-22 20:03:51 +00:00
|
|
|
print()
|
|
|
|
|
|
|
|
idx = read_num(msg, max_val=len(items) - 1)
|
|
|
|
return items[idx]
|
2021-04-20 13:23:50 +00:00
|
|
|
|
|
|
|
|
|
|
|
def get_used_fonts(template_css: str):
|
2023-03-07 08:09:56 +00:00
|
|
|
return re.findall(r"url\([\"'](\w+\.(?:[ot]tf|woff\d?))[\"']\)", template_css, re.IGNORECASE)
|
2021-11-27 11:54:42 +00:00
|
|
|
|
|
|
|
|
|
|
|
def init():
|
|
|
|
from .consts import NOTE_TYPES_DIR, FONTS_DIR
|
|
|
|
|
|
|
|
for path in (NOTE_TYPES_DIR, FONTS_DIR):
|
|
|
|
if not os.path.isdir(path):
|
|
|
|
os.mkdir(path)
|
|
|
|
|
|
|
|
|
|
|
|
init()
|