Skip to content

Commit 77ff943

Browse files
committed
Preprocess: split fix_relative_link()
1 parent 158c1a8 commit 77ff943

File tree

2 files changed

+37
-9
lines changed

2 files changed

+37
-9
lines changed

commands/preprocess.py

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -163,21 +163,28 @@ def find_html_files(root):
163163
html_files.append(os.path.join(dir, filename))
164164
return html_files
165165

166-
def fix_relative_link(rename_map, target, file, root):
166+
def is_loader_link(target):
167+
if re.match('https?://[a-z]+\.cppreference\.com/mwiki/load\.php', target):
168+
return True
169+
return False
170+
171+
def transform_loader_link(target, file, root):
172+
# Absolute loader.php links need to be made relative
173+
abstarget = os.path.join(root, "common/" + convert_loader_name(target))
174+
return os.path.relpath(abstarget, os.path.dirname(file))
175+
176+
def is_external_link(target):
167177
external_link_patterns = [
168178
'http://',
169179
'https://',
170180
'ftp://'
171181
]
172-
if re.match('https?://[a-z]+\.cppreference\.com/mwiki/load\.php', target):
173-
# Absolute loader.php links need to be made relative
174-
abstarget = os.path.join(root, "common/" + convert_loader_name(target))
175-
return os.path.relpath(abstarget, os.path.dirname(file))
176-
else:
177-
for pattern in external_link_patterns:
178-
if pattern in target:
179-
return target
182+
for pattern in external_link_patterns:
183+
if target.startswith(pattern):
184+
return True
185+
return False
180186

187+
def trasform_relative_link(rename_map, target):
181188
target = urllib.parse.unquote(target)
182189
for dir,fn,new_fn in rename_map:
183190
target = target.replace(fn, new_fn)
@@ -188,6 +195,19 @@ def fix_relative_link(rename_map, target, file, root):
188195
target = target.replace('%23', '#')
189196
return target
190197

198+
# Transforms a relative link in the given file according to rename map.
199+
# target is the link to transform.
200+
# file is the path of the file the link came from.
201+
# root is the path to the root of the archive.
202+
def fix_relative_link(rename_map, target, file, root):
203+
if is_loader_link(target):
204+
return transform_loader_link(target, file, root)
205+
206+
if is_external_link(target):
207+
return target
208+
209+
return trasform_relative_link(rename_map, target)
210+
191211
def has_class(el, classes_to_check):
192212
value = el.get('class')
193213
if value is None:

tests/test_preprocess.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,12 @@ def test_has_class(self):
7575
self.assertEqual(True, has_class(el, ['b', 'a']))
7676
self.assertEqual(True, has_class(el, ['b', 'c']))
7777

78+
class TestIsExternalLink(unittest.TestCase):
79+
def test_is_external_link(self):
80+
self.assertEqual(True, is_external_link('http://a'))
81+
self.assertEqual(True, is_external_link('https://a'))
82+
self.assertEqual(True, is_external_link('ftp://a'))
83+
self.assertEqual(False, is_external_link('ahttp://a'))
84+
self.assertEqual(False, is_external_link(' http://a'))
85+
7886

0 commit comments

Comments
 (0)