@@ -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+
91106def 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