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'})