bd96a6f7b7
According to [1]: > Changed in version 3.6: Unrecognized escape sequences produce a DeprecationWarning. > In a future Python version they will be a SyntaxWarning and eventually a SyntaxError. [1] https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals Change-Id: Ia4f79f17ccb121f423f35b1e1306d5ae285e8762 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98321 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
92 lines
3.3 KiB
Python
Executable file
92 lines
3.3 KiB
Python
Executable file
#!/usr/bin/python
|
|
|
|
|
|
# Scan .hrc files for conflicting SID constants
|
|
#
|
|
# This is not as easy as it sounds because some of the constants depend on other constants whose names do not start with SID_
|
|
#
|
|
|
|
import subprocess
|
|
import sys
|
|
|
|
sidNameToValue = dict()
|
|
sidNameToOriginalLine = dict()
|
|
|
|
|
|
def extractSidValue(sidValue):
|
|
if isinstance(sidValue, int):
|
|
return sidValue
|
|
if sidValue.isdigit():
|
|
return int(sidValue)
|
|
if sidValue[0:2] == "0x":
|
|
return int(sidValue, 16)
|
|
if sidValue.find("+") != -1:
|
|
tokens = sidValue.split("+")
|
|
tokens1 = tokens[0].strip()
|
|
tokens2 = tokens[1].strip()
|
|
return extractSidValue(tokens1) + extractSidValue(tokens2)
|
|
rv = extractSidValue(sidNameToValue[sidValue])
|
|
sidNameToValue[sidValue] = rv
|
|
return rv
|
|
|
|
|
|
#a = subprocess.Popen(r"git grep -P '#define\s+(SID_|SC_|DETECTIVE_|DRAWTEXTBAR_|DRAW_BAR_|RID_|OBJBAR_FORMAT_|TAB_POPUP_|DATA_MENU_|EXTRA_MENU_|FORMAT_MENU_|INSERT_MENU_|VIEW_MENU_|EDIT_MENU_|FILE_MENU_|SC_FUNCTION_|RC_)'", stdout=subprocess.PIPE, shell=True)
|
|
a = subprocess.Popen(r"git grep -Pn '#define\s+(\S+)' -- *.hrc", stdout=subprocess.PIPE, shell=True)
|
|
|
|
with a.stdout as txt:
|
|
for line in txt:
|
|
originalLine = line.strip()
|
|
# strip the '#define' off the front
|
|
idx1 = line.find(" ")
|
|
line = line[idx1 : len(line)].strip()
|
|
# extract the name
|
|
idx1 = line.find(" ")
|
|
if (idx1 == -1): continue
|
|
sidName = line[0 : idx1].strip()
|
|
line = line[idx1 : len(line)].strip()
|
|
# strip any trailing comments
|
|
idx1 = line.find("//")
|
|
if (idx1 != -1):
|
|
line = line[0 : idx1].strip()
|
|
idx1 = line.find("/*")
|
|
if (idx1 != -1):
|
|
line = line[0 : idx1].strip()
|
|
if len(line) == 0: continue
|
|
# strip brackets
|
|
if line[0] == "(": line = line[1:]
|
|
if line[len(line)-1] == ")": line = line[0:len(line)-1]
|
|
sidTextValue = line.strip()
|
|
# ignore the #define strings
|
|
if (sidTextValue.find("\"") != -1): continue
|
|
# ignore the multiline macros
|
|
if (sidTextValue.find("\\") != -1): continue
|
|
# check for redefinitions
|
|
if sidName[0:4] == "SID_" and sidNameToValue.has_key(sidName):
|
|
print "Redefinition:\n\t", sidNameToOriginalLine[sidName], "\n\t" , originalLine
|
|
else:
|
|
sidNameToValue[sidName] = sidTextValue
|
|
sidNameToOriginalLine[sidName] = originalLine
|
|
|
|
# decode the constants into their numeric values recursively
|
|
sidNamesToIgnore = set()
|
|
for sidName in sidNameToValue:
|
|
sidTextValue = sidNameToValue[sidName]
|
|
try:
|
|
sidValueNum = extractSidValue(sidTextValue)
|
|
sidNameToValue[sidName] = sidValueNum
|
|
except KeyError:
|
|
sidNamesToIgnore.add(sidName)
|
|
|
|
# check for conflicts
|
|
sidValueToName = dict()
|
|
for sidName in sidNameToValue:
|
|
if sidName in sidNamesToIgnore: continue
|
|
if sidName[0:4] != "SID_": continue
|
|
sidValue = sidNameToValue[sidName]
|
|
if sidValueToName.has_key(sidValue):
|
|
print "conflict:\n\t", sidNameToOriginalLine[sidName], "\n\t", sidNameToOriginalLine[sidValueToName[sidValue]]
|
|
else:
|
|
sidValueToName[sidValue] = sidName
|
|
|
|
|
|
|