mirror of
				https://github.com/notepad-plus-plus/notepad-plus-plus.git
				synced 2025-10-31 03:24:04 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			93 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Script to check that headers are in a consistent order
 | |
| # Requires Python 2.6 or later
 | |
| 
 | |
| from __future__ import print_function
 | |
| import codecs, glob, os, platform, sys, unicodedata
 | |
| 
 | |
| def ciCompare(a,b):
 | |
|     return cmp(a.lower(), b.lower())
 | |
| 
 | |
| def ciKey(a):
 | |
|     return a.lower()
 | |
| 
 | |
| def SortListInsensitive(l):
 | |
|     try:    # Try key function
 | |
|         l.sort(key=ciKey)
 | |
|     except TypeError:    # Earlier version of Python, so use comparison function
 | |
|         l.sort(ciCompare)
 | |
| 
 | |
| def IsHeader(x):
 | |
|     return x.strip().startswith("#") and ("include" in x or "import" in x)
 | |
| 
 | |
| def ExtractHeaders(filename):
 | |
|     with codecs.open(filename, "r", "UTF-8") as infile:
 | |
|         includeLines = [x.strip()[1:].strip()[7:].strip() for x in infile.readlines() if \
 | |
|             IsHeader(x)]
 | |
|     if '.' not in filename:
 | |
|         print(filename)
 | |
|         for n in includeLines:
 | |
|             print(n)
 | |
|         print()
 | |
|     return includeLines
 | |
| 
 | |
| def CheckFiles(root):
 | |
|     # Find all the lexer source code files
 | |
|     filePaths = glob.glob(root + "/include/*.h")
 | |
|     filePaths += glob.glob(root + "/src/*.cxx")
 | |
|     SortListInsensitive(filePaths)
 | |
|     filePaths += glob.glob(root + "/lexlib/*.cxx")
 | |
|     filePaths += glob.glob(root + "/lexers/*.cxx")
 | |
|     filePaths += glob.glob(root + "/win32/*.cxx")
 | |
|     filePaths += glob.glob(root + "/gtk/*.cxx")
 | |
|     filePaths += glob.glob(root + "/cocoa/*.mm")
 | |
|     filePaths += glob.glob(root + "/cocoa/*.h")
 | |
|     filePaths += glob.glob(root + "/test/unit/*.cxx")
 | |
|     # The Qt platform code interleaves system and Scintilla headers
 | |
|     #~ filePaths += glob.glob(root + "/qt/ScintillaEditBase/*.cpp")
 | |
|     #~ filePaths += glob.glob(root + "/qt/ScintillaEdit/*.cpp")
 | |
|     #~ print(filePaths)
 | |
|     masterHeaderList = ExtractHeaders(root + "/scripts/HeaderOrder.txt")
 | |
|     for f in filePaths:
 | |
|         if "LexCaml" in f:
 | |
|             continue
 | |
|         print("   File ", f)
 | |
|         try:
 | |
|             incs = ExtractHeaders(f)
 | |
|         except UnicodeDecodeError:
 | |
|             #~ print("UnicodeDecodeError\n")
 | |
|             continue
 | |
|         #~ print("\n".join(incs))
 | |
|         news = set(incs) - set(masterHeaderList)
 | |
|         #~ print("")
 | |
|         #~ print("\n".join(incs))
 | |
|         #~ print("")
 | |
|         ended = False
 | |
|         m = 0
 | |
|         i = 0
 | |
|         while i < len(incs):
 | |
|             if m == len(masterHeaderList):
 | |
|                 print("**** extend", incs[i:])
 | |
|                 masterHeaderList.extend(incs[i:])
 | |
|                 break
 | |
|             if masterHeaderList[m] == incs[i]:
 | |
|                 #~ print("equal", masterHeaderList[m])
 | |
|                 i += 1
 | |
|                 m += 1
 | |
|             else:
 | |
|                 if masterHeaderList[m] not in incs:
 | |
|                     #~ print("skip", masterHeaderList[m])
 | |
|                     m += 1
 | |
|                 elif incs[i] not in masterHeaderList:
 | |
|                     print(f + ":1: Add master", incs[i])
 | |
|                     masterHeaderList.insert(m, incs[i])
 | |
|                     i += 1
 | |
|                     m += 1
 | |
|                 else:
 | |
|                     print(f + ":1: Header out of order", incs[i], masterHeaderList[m])
 | |
|                     print("incs", " ".join(incs))
 | |
|                     i += 1
 | |
|                     #~ return
 | |
|         #print("Master header list", " ".join(masterHeaderList))
 | |
| 
 | |
| CheckFiles("..")
 |