diff --git a/doc/scripts/wikiparser.py b/doc/scripts/wikiparser.py index bac732083..3127b31d6 100644 --- a/doc/scripts/wikiparser.py +++ b/doc/scripts/wikiparser.py @@ -194,7 +194,11 @@ class Link(Element): for element in self.text: link_text += element.to_docbook(context) - xml = f'{link_text}' + if target.startswith('#'): + xml = f'{link_text}' + else: + xml = f'{link_text}' + return xml @@ -514,6 +518,9 @@ def resolve_url(url, context): url.startswith('irc://'): return url + if url.startswith('#'): + return url + if url.startswith('attachment:'): target = url.lstrip('attachment:') page_title = context.get('title') if context else None @@ -540,9 +547,14 @@ def resolve_url(url, context): url = url[3:] page_title = page_title.rpartition('/')[0] - return f'{BASE_URL}{page_title}/{url}#' + url = f'{BASE_URL}{page_title}/{url}' + else: + url = f'{BASE_URL}{url}' - return f'{BASE_URL}{url}#' + if '#' not in url: + url = url + '#' + + return url def split_formatted(text, delimiter, end_delimiter=None): @@ -606,6 +618,7 @@ def parse_text(line, context=None, parse_links=True): if remaining: params, _, remaining = remaining.partition('|') + text = text or target link = Link(target.strip(), [ItalicText(text.strip())], params) result.append(link) continue @@ -637,7 +650,7 @@ def parse_text(line, context=None, parse_links=True): if content: target, _, remaining = content.partition('|') target = target.strip() - text = None + text = target if remaining: # Handle embedded attachments inside links if '{{' in remaining and '}}' in remaining: @@ -649,8 +662,8 @@ def parse_text(line, context=None, parse_links=True): else: text, _, remaining = remaining.partition('|') - text = text.strip() - text = parse_text(text, parse_links=False) + text = text.strip() + text = parse_text(text, parse_links=False) params = None if remaining: @@ -916,6 +929,9 @@ PlainText(' ')])] >>> parse_wiki('Back to [[FreedomBox/Manual|manual]] page.') [Paragraph([PlainText('Back to '), Link('FreedomBox/Manual', \ [PlainText('manual')]), PlainText(' page. ')])] + >>> parse_wiki('[[FreedomBox/Manual]]') + [Paragraph([Link('FreedomBox/Manual', [PlainText('FreedomBox/Manual')]), \ +PlainText(' ')])] >>> parse_wiki('[[attachment:Searx.webm|Searx installation and first steps\ |&do=get]]') [Paragraph([Link('attachment:Searx.webm', \ @@ -1590,6 +1606,14 @@ Contribute' 'Discuss' + >>> generate_inner_docbook([Link('WiFi#USB_Devices', \ +[PlainText('Devices')])]) + 'Devices' + + >>> generate_inner_docbook([Link('#internal-link', \ +[PlainText('Section')])]) + 'Section' + >>> generate_inner_docbook([Link("attachment:Let's Encrypt.webm", \ [PlainText("Let's Encrypt")], 'do=get')], context={'title': \ 'FreedomBox/Manual/LetsEncrypt'})