From 46a2400231820ab3cae837014081189b8149d02e Mon Sep 17 00:00:00 2001 From: Bad Manners Date: Fri, 30 Jun 2023 18:24:00 -0300 Subject: [PATCH] Add generic user tag --- README.md | 2 ++ description.py | 31 ++++++++++++++++++++++--------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index dc8d443..097b2d9 100644 --- a/README.md +++ b/README.md @@ -63,4 +63,6 @@ There are also special tags to link to yourself or other users automatically. Th [ib=Amet][weasyl=Sit][/weasyl][/ib] is the same as above, but the Weasyl is prioritized instead. [ib=Amet][weasyl=Sit]Consectetur[/weasyl][/ib] is the same as above, but Consectetur is displayed as the username for websites other than Inkbunny and Weasyl. The Weasyl gallery is linked to in those websites. + +[generic=https://github.com/BadMannersXYZ]Bad Manners[/generic] can be used as the innermost tag with a mandatory URL attribute and default username, and is similar to the URL tag, but it can be nested within other profile links. ``` diff --git a/description.py b/description.py index 1e23180..05b5e05 100644 --- a/description.py +++ b/description.py @@ -28,13 +28,14 @@ DESCRIPTION_GRAMMAR = r""" self_tag: "[self]" [WS] "[/self]" user_tag_root: user_tag - user_tag: """ + user_tag: generic_tag | """ DESCRIPTION_GRAMMAR += ' | '.join(f'{tag}_tag' for tag in SUPPORTED_USER_TAGS) -DESCRIPTION_GRAMMAR += ''.join(f'\n {tag}_tag: "[{tag}" ["=" USERNAME] "]" USERNAME "[/{tag}]" | "[{tag}" "=" USERNAME "]" [user_tag] "[/{tag}]"' for tag in SUPPORTED_USER_TAGS) +DESCRIPTION_GRAMMAR += ''.join(f'\n {tag}_tag: "[{tag}" ["=" USERNAME] "]" USERNAME "[/{tag}]" | "[{tag}" "=" USERNAME "]" [user_tag] "[/{tag}]"' for tag in SUPPORTED_USER_TAGS) DESCRIPTION_GRAMMAR += r""" + generic_tag: "[generic=" URL "]" USERNAME "[/generic]" USERNAME: /[a-zA-Z0-9][a-zA-Z0-9 _-]*/ URL: /(https?:\/\/)?[^\]]+/ @@ -43,6 +44,8 @@ DESCRIPTION_GRAMMAR += r""" %import common.WS """ +print(DESCRIPTION_GRAMMAR) + DESCRIPTION_PARSER = lark.Lark(DESCRIPTION_GRAMMAR, parser='lalr') @@ -111,23 +114,33 @@ class UploadTransformer(lark.Transformer): def user_tag_root(self, data): user_data: UserTag = data[0] for site in user_data.sites: - if site == 'eka': + if site == 'generic': + return self.url_tag((user_data['generic'].strip(), user_data.default)) + elif site == 'eka': return self.url_tag((f'https://aryion.com/g4/user/{user_data["eka"]}', user_data.default or user_data["eka"])) - if site == 'fa': + elif site == 'fa': return self.url_tag((f'https://furaffinity.net/user/{user_data["fa"].replace("_", "")}', user_data.default or user_data['fa'])) - if site == 'ib': + elif site == 'weasyl': + return self.url_tag((f'https://www.weasyl.com/~{user_data["weasyl"].replace(" ", "").lower()}', user_data.default or user_data['weasyl'])) + elif site == 'ib': return self.url_tag((f'https://inkbunny.net/{user_data["ib"]}', user_data.default or user_data['ib'])) - if site == 'sf': + elif site == 'sf': return self.url_tag((f'https://{user_data["sf"].replace(" ", "-").lower()}.sofurry.com', user_data.default or user_data['sf'])) - if site == 'twitter': + elif site == 'twitter': return self.url_tag((f'https://twitter.com/{user_data["twitter"]}', user_data.default or user_data['twitter'])) - if site == 'weasyl': - self.url_tag((f'https://www.weasyl.com/~{user_data["weasyl"].replace(" ", "").lower()}', user_data.default or user_data['weasyl'])) + else: + print(f'Unknown site "{site}" found in user tag; ignoring...') raise TypeError('Invalid UserTag data') def user_tag(self, data): return data[0] + def generic_tag(self, data): + attribute, inner = data[0], data[1] + user = UserTag(default=inner.strip()) + user['generic'] = attribute.strip() + return user + class BbcodeTransformer(UploadTransformer): def b_tag(self, data): if data[0] is None or not data[0].strip():