@@ -174,10 +174,10 @@ def add_tables(db, module):
174174
175175def make_id (str ):
176176 #str = str.replace(".", "_") # colons are allowed
177- str = str . replace ( " " , "_" )
178- str = str .replace ("-" , "_" )
179- if str [0 ] in string .digits :
180- str = "_" + str
177+ for c in " -+~;" :
178+ str = str .replace (c , "_" )
179+ if str [0 ] in ( string .digits + "." ) :
180+ str = "_" + str
181181 assert re .match ("^[A-Za-z_][A-Za-z0-9_.]*$" , str ), "FILE" + str
182182 return str
183183
@@ -285,19 +285,28 @@ def start_component(self, component = None, feature = None, flags = None, keyfil
285285 [(feature .id , component )])
286286
287287 def make_short (self , file ):
288+ oldfile = file
289+ file = file .replace ('+' , '_' )
290+ file = '' .join (c for c in file if not c in ' "/\[]:;=,' )
288291 parts = file .split ("." )
289- if len (parts )> 1 :
292+ if len (parts ) > 1 :
293+ prefix = "" .join (parts [:- 1 ]).upper ()
290294 suffix = parts [- 1 ].upper ()
295+ if not prefix :
296+ prefix = suffix
297+ suffix = None
291298 else :
299+ prefix = file .upper ()
292300 suffix = None
293- prefix = parts [ 0 ]. upper ()
294- if len ( prefix ) <= 8 and ( not suffix or len (suffix )<= 3 ):
301+ if len ( parts ) < 3 and len ( prefix ) <= 8 and file == oldfile and (
302+ not suffix or len (suffix ) <= 3 ):
295303 if suffix :
296304 file = prefix + "." + suffix
297305 else :
298306 file = prefix
299- assert file not in self .short_names
300307 else :
308+ file = None
309+ if file is None or file in self .short_names :
301310 prefix = prefix [:6 ]
302311 if suffix :
303312 suffix = suffix [:3 ]
0 commit comments