mirror of
				https://github.com/notepad-plus-plus/notepad-plus-plus.git
				synced 2025-10-31 03:24:04 +01:00 
			
		
		
		
	git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@525 f5eea248-9336-0410-98b8-ebc06183d4e3
		
			
				
	
	
		
			111 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Module for reading and parsing Scintilla.iface file
 | |
| 
 | |
| def sanitiseLine(line):
 | |
| 	if line[-1:] == '\n': line = line[:-1]
 | |
| 	if line.find("##") != -1:
 | |
| 		line = line[:line.find("##")]
 | |
| 	line = line.strip()
 | |
| 	return line
 | |
| 	
 | |
| def decodeFunction(featureVal):
 | |
| 	retType, rest = featureVal.split(" ", 1)
 | |
| 	nameIdent, params = rest.split("(")
 | |
| 	name, value = nameIdent.split("=")
 | |
| 	params, rest = params.split(")")
 | |
| 	param1, param2 = params.split(",")[0:2]
 | |
| 	return retType, name, value, param1, param2
 | |
| 	
 | |
| def decodeEvent(featureVal):
 | |
| 	retType, rest = featureVal.split(" ", 1)
 | |
| 	nameIdent, params = rest.split("(")
 | |
| 	name, value = nameIdent.split("=")
 | |
| 	return retType, name, value
 | |
| 	
 | |
| def decodeParam(p):
 | |
| 	param = p.strip()
 | |
| 	type = ""
 | |
| 	name = ""
 | |
| 	value = ""
 | |
| 	if " " in param:
 | |
| 		type, nv = param.split(" ")
 | |
| 		if "=" in nv:
 | |
| 			name, value = nv.split("=")
 | |
| 		else:
 | |
| 			name = nv
 | |
| 	return type, name, value
 | |
| 
 | |
| class Face:
 | |
| 
 | |
| 	def __init__(self):
 | |
| 		self.order = []
 | |
| 		self.features = {}
 | |
| 		self.values = {}
 | |
| 		self.events = {}
 | |
| 		
 | |
| 	def ReadFromFile(self, name):
 | |
| 		currentCategory = ""
 | |
| 		currentComment = []
 | |
| 		currentCommentFinished = 0
 | |
| 		file = open(name)
 | |
| 		for line in file.readlines():
 | |
| 			line = sanitiseLine(line)
 | |
| 			if line:
 | |
| 				if line[0] == "#":
 | |
| 					if line[1] == " ":
 | |
| 						if currentCommentFinished:
 | |
| 							currentComment = []
 | |
| 							currentCommentFinished = 0
 | |
| 						currentComment.append(line[2:])
 | |
| 				else:
 | |
| 					currentCommentFinished = 1
 | |
| 					featureType, featureVal = line.split(" ", 1)
 | |
| 					if featureType in ["fun", "get", "set"]:
 | |
| 						retType, name, value, param1, param2 = decodeFunction(featureVal)
 | |
| 						p1 = decodeParam(param1)
 | |
| 						p2 = decodeParam(param2)
 | |
| 						self.features[name] = { 
 | |
| 							"FeatureType": featureType, 
 | |
| 							"ReturnType": retType,
 | |
| 							"Value": value, 
 | |
| 							"Param1Type": p1[0], "Param1Name": p1[1], "Param1Value": p1[2], 
 | |
| 							"Param2Type": p2[0],	"Param2Name": p2[1], "Param2Value": p2[2],
 | |
| 							"Category": currentCategory, "Comment": currentComment
 | |
| 						}
 | |
| 						if value in self.values:
 | |
| 							raise "Duplicate value " + value + " " + name
 | |
| 						self.values[value] = 1
 | |
| 						self.order.append(name)
 | |
| 					elif featureType == "evt":
 | |
| 						retType, name, value = decodeEvent(featureVal)
 | |
| 						self.features[name] = { 
 | |
| 							"FeatureType": featureType, 
 | |
| 							"ReturnType": retType,
 | |
| 							"Value": value, 
 | |
| 							"Category": currentCategory, "Comment": currentComment
 | |
| 						}
 | |
| 						if value in self.events:
 | |
| 							raise "Duplicate event " + value + " " + name
 | |
| 						self.events[value] = 1
 | |
| 						self.order.append(name)
 | |
| 					elif featureType == "cat":
 | |
| 						currentCategory = featureVal
 | |
| 					elif featureType == "val":
 | |
| 						try:
 | |
| 							name, value = featureVal.split("=", 1)
 | |
| 						except ValueError:
 | |
| 							print("Failure %s" % featureVal)
 | |
| 							raise
 | |
| 						self.features[name] = { 
 | |
| 							"FeatureType": featureType, 
 | |
| 							"Category": currentCategory, 
 | |
| 							"Value": value }
 | |
| 						self.order.append(name)
 | |
| 					elif featureType == "enu" or featureType == "lex":
 | |
| 						name, value = featureVal.split("=", 1)
 | |
| 						self.features[name] = { 
 | |
| 							"FeatureType": featureType, 
 | |
| 							"Category": currentCategory, 
 | |
| 							"Value": value }
 | |
| 						self.order.append(name)
 | |
| 
 |