Skip to content

Commit 45e0d9f

Browse files
authored
Merge pull request p12tic#53 from PeterFeicht/fix-loader
Fix absolute links to loader.php
2 parents 62771ab + 35fb52b commit 45e0d9f

File tree

1 file changed

+27
-20
lines changed

1 file changed

+27
-20
lines changed

preprocess.py

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,21 @@ def add_file_to_rename_map(rename_map, dir, fn, new_fn):
8888
return
8989
rename_map.append((dir, fn, new_fn))
9090

91+
def convert_loader_name(fn):
92+
if re.search("modules=site&only=scripts", fn):
93+
return "site_scripts.js"
94+
elif re.search("modules=site&only=styles", fn):
95+
return "site_modules.css"
96+
elif re.search("modules=skins.*&only=scripts", fn):
97+
return "skin_scripts.js"
98+
elif re.search("modules=startup&only=scripts", fn):
99+
return "startup_scripts.js"
100+
elif re.search("modules=.*ext.*&only=styles", fn):
101+
return "ext.css"
102+
else:
103+
print("Loader file " + fn + " does not match any known files")
104+
sys.exit(1)
105+
91106
def find_files_to_be_renamed(root):
92107
# Returns a rename map: array of tuples each of which contain three strings:
93108
# the directory the file resides in, the source and destination filenames.
@@ -123,20 +138,7 @@ def find_files_to_be_renamed(root):
123138

124139
# map loader names to more recognizable names
125140
for dir,fn in files_loader:
126-
if re.search("modules=site&only=scripts", fn):
127-
new_fn = "site_scripts.js"
128-
elif re.search("modules=site&only=styles", fn):
129-
new_fn = "site_modules.css"
130-
elif re.search("modules=skins.*&only=scripts", fn):
131-
new_fn = "skin_scripts.js"
132-
elif re.search("modules=startup&only=scripts", fn):
133-
new_fn = "startup_scripts.js"
134-
elif re.search("modules=.*ext.*&only=styles", fn):
135-
new_fn = "ext.css"
136-
else:
137-
print("Loader file " + fn + " does not match any known files")
138-
sys.exit(1)
139-
141+
new_fn = convert_loader_name(fn)
140142
add_file_to_rename_map(rename_map, dir, fn, new_fn)
141143

142144
# rename filenames that conflict on case-insensitive filesystems
@@ -160,15 +162,20 @@ def find_html_files(root):
160162
html_files.append(os.path.join(dir, filename))
161163
return html_files
162164

163-
def fix_relative_link(rename_map, target):
165+
def fix_relative_link(rename_map, target, file, root):
164166
external_link_patterns = [
165167
'http://',
166168
'https://',
167169
'ftp://'
168170
]
169-
for pattern in external_link_patterns:
170-
if pattern in target:
171-
return target
171+
if re.match('https?://[a-z]+\.cppreference\.com/mwiki/load\.php', target):
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+
else:
176+
for pattern in external_link_patterns:
177+
if pattern in target:
178+
return target
172179

173180
target = urllib.parse.unquote(target)
174181
for dir,fn,new_fn in rename_map:
@@ -256,9 +263,9 @@ def preprocess_html_file(root, fn, rename_map):
256263
# apply changes to links caused by file renames
257264
for el in html.xpath('//*[@src or @href]'):
258265
if el.get('src') is not None:
259-
el.set('src', fix_relative_link(rename_map, el.get('src')))
266+
el.set('src', fix_relative_link(rename_map, el.get('src'), fn, root))
260267
elif el.get('href') is not None:
261-
el.set('href', fix_relative_link(rename_map, el.get('href')))
268+
el.set('href', fix_relative_link(rename_map, el.get('href'), fn, root))
262269

263270
for err in parser.error_log:
264271
print("HTML WARN: {0}".format(err))

0 commit comments

Comments
 (0)