16
16
17
17
from pathlib import Path
18
18
import getopt
19
+ import os
19
20
import re
20
21
import sys
21
22
@@ -44,6 +45,14 @@ class UpdateLicenseCode(object):
44
45
"<!-- Language Selector Start - DO NOT DELETE -->" ,
45
46
"<!-- Language Selector End - DO NOT DELETE -->" ,
46
47
),
48
+ "legalcode" : (
49
+ "<!-- Legalcode Start - DO NOT DELETE -->" ,
50
+ "<!-- Legalcode End - DO NOT DELETE -->" ,
51
+ ),
52
+ "language-footer" : (
53
+ "<!-- Language Footer Start - DO NOT DELETE -->" ,
54
+ "<!-- Language Footer End - DO NOT DELETE -->" ,
55
+ ),
47
56
}
48
57
49
58
image_map = {
@@ -78,12 +87,9 @@ def get_args(self):
78
87
return False
79
88
80
89
self .verbose = False
81
- self .add_placeholders = False
82
90
for option in opts :
83
91
if "-v" in option :
84
92
self .verbose = True
85
- elif "-a" in option :
86
- self .add_placeholders = True
87
93
88
94
return True
89
95
@@ -115,7 +121,7 @@ def process_file(self, filepath):
115
121
- Remove references to deed3 css files
116
122
- Remove inline styles
117
123
- Remove Creative Commons text header"""
118
- self .log ("Processing: " + filepath .name , "verbose" )
124
+ self .log (f "Processing: { filepath .name } " , "verbose" )
119
125
with filepath .open (encoding = "utf-8" ) as infile :
120
126
content = infile .read ()
121
127
license_attrs = self .get_license_attrs (filepath .name )
@@ -130,7 +136,7 @@ def process_file(self, filepath):
130
136
content = self .add_type_logos (content , license_attrs ["type" ])
131
137
content = self .handling_consideration_blockquotes (content )
132
138
133
- self .log (" Updating content: " + filepath .name , "verbose" )
139
+ self .log (f " Updating content: { filepath .name } " , "verbose" )
134
140
with filepath .open ("w" , encoding = "utf-8" ) as outfile :
135
141
outfile .write (content )
136
142
@@ -142,23 +148,60 @@ def handle_placeholders(self, content):
142
148
for placeholder_pair in sorted (UpdateLicenseCode .placeholders ):
143
149
if self .has_placeholders (content , placeholder_pair ):
144
150
self .log (
145
- " Found placeholder: " + placeholder_pair + " , skipping" ,
151
+ f " Found placeholder: { placeholder_pair } , skipping" ,
146
152
"verbose" ,
147
153
)
148
154
else :
149
155
start , end = UpdateLicenseCode .placeholders [placeholder_pair ]
150
156
if placeholder_pair == "head" :
151
157
target = "</head>"
152
- replacement = start + " \n " + end + " \n " + target
158
+ replacement = f" { start } \n { end } \n { target } "
153
159
elif placeholder_pair == "header" :
154
160
target = re .search ("<body.*?>" , content ).group ()
155
- replacement = target + " \n " + start + " \n " + end
161
+ replacement = f" { target } \n { start } \n { end } "
156
162
elif placeholder_pair == "footer" :
157
163
target = "</body>"
158
- replacement = start + " \n " + end + " \n " + target
164
+ replacement = f" { start } \n { end } \n { target } "
159
165
elif placeholder_pair == "language-selector" :
160
166
target = "<!-- Site Header End - DO NOT DELETE -->"
161
- replacement = target + "\n " + start + "\n " + end
167
+ replacement = f"{ target } \n { start } \n { end } "
168
+ elif placeholder_pair == "legalcode" :
169
+ re_pattern = re .compile (
170
+ r"""
171
+ ^\s*<div\ id="deed"
172
+ .*
173
+ ^\s*<li\ id="s8d">.*</li>\s*</ol>$
174
+ (?=\s*<p\ class="shaded">)
175
+ """ ,
176
+ re .DOTALL | re .MULTILINE | re .VERBOSE ,
177
+ )
178
+ target = re_pattern .search (content ).group ()
179
+ replacement = f"\n { start } \n { target .strip ()} \n { end } \n "
180
+ elif placeholder_pair == "language-footer" :
181
+ re_pattern = re .compile (
182
+ r"""
183
+ ^\s*<p\ class="shaded(?:\ a-nobreak)?">\s*
184
+ <a(?:\ name="languages")?\ id="languages">
185
+ .*(?:\s*</p>)?
186
+ (?=\s*</div>\s*</div>\s*<div\ id="deed-foot">)
187
+ |
188
+ ^\s*<p\ class="shaded(?:\ a-nobreak)?">\s*
189
+ <a(?:\ name="languages")?\ id="languages">
190
+ .*\s*</p>
191
+ (?=\s*</div>\s*<div\ id="deed-foot">)
192
+ |
193
+ ^\s*<p\ class="shaded(?:\ a-nobreak)?">\s*
194
+ <a(?:\ name="languages")?\ id="languages">
195
+ .*\s*</p>
196
+ (?=
197
+ \s*</li>\s*</ol>\s*</div>\s*</div>\s*"
198
+ \s*<div\ id="deed-foot">
199
+ )
200
+ """ ,
201
+ re .DOTALL | re .MULTILINE | re .VERBOSE ,
202
+ )
203
+ target = re_pattern .search (content ).group ()
204
+ replacement = f"{ start } \n { target .strip ()} \n { end } \n "
162
205
content = content .replace (target , replacement , 1 )
163
206
return content
164
207
@@ -259,28 +302,18 @@ def add_type_logos(self, content, lic_type):
259
302
filename = UpdateLicenseCode .image_map [lic_attr ]["file" ]
260
303
alt_text = UpdateLicenseCode .image_map [lic_attr ]["alt_text" ]
261
304
image_tag = (
262
- '<img src="/images/deed/svg/'
263
- + filename
264
- + '" alt="'
265
- + alt_text
266
- + '"/>'
305
+ f'<img src="/images/deed/svg/{ filename } " alt="{ alt_text } "/>'
267
306
)
268
307
lic_images += (
269
- '<span class="cc-icon-'
270
- + lic_attr
271
- + '">'
272
- + image_tag
273
- + "</span>"
308
+ f'<span class="cc-icon-{ lic_attr } ">{ image_tag } </span>'
274
309
)
275
310
cc_logo_section = re .search (
276
311
'<div id="cc-logo">.*?</div>' , content , re .DOTALL
277
312
).group ()
278
313
new_cc_logo_section = (
279
- '<div id="cc-logo">'
280
- + '<span class="cc-icon-logo">'
281
- + '<img src="/images/deed/svg/cc_white.svg" alt="CC"/></span>'
282
- + lic_images
283
- + "</div>"
314
+ '<div id="cc-logo"><span class="cc-icon-logo">'
315
+ '<img src="/images/deed/svg/cc_white.svg" alt="CC"/></span>'
316
+ f"{ lic_images } </div>"
284
317
)
285
318
content = content .replace (cc_logo_section , new_cc_logo_section )
286
319
return content
@@ -295,7 +328,11 @@ def handling_consideration_blockquotes(self, content):
295
328
def main (self ):
296
329
"""Get the command line arguments, find the files, and process them"""
297
330
if self .get_args () and self .get_path ():
298
- file_list = [f for f in self .path .glob ("*4.0*.html" )]
331
+ file_list = [
332
+ f
333
+ for f in self .path .glob ("*4.0*.html" )
334
+ if not os .path .islink (f )
335
+ ]
299
336
self .process_files (file_list )
300
337
301
338
0 commit comments