aboutsummaryrefslogtreecommitdiffhomepage
path: root/scripts/ScintillaData.py
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2015-08-12 17:27:30 +1000
committerNeil <nyamatongwe@gmail.com>2015-08-12 17:27:30 +1000
commit5c76f0840cde7d0d3efdf8e37ca5c4ff2af71566 (patch)
treecded8d895965d32852d54451b452af1aa6079410 /scripts/ScintillaData.py
parent6b633800f2d59ef4658e1a1a1406411c91fd52c0 (diff)
downloadscintilla-mirror-5c76f0840cde7d0d3efdf8e37ca5c4ff2af71566.tar.gz
Read multiline LexerModule declarations and extract lexer name -> lexer ID and
lexer ID -> fileName dictionaries.
Diffstat (limited to 'scripts/ScintillaData.py')
-rw-r--r--scripts/ScintillaData.py36
1 files changed, 31 insertions, 5 deletions
diff --git a/scripts/ScintillaData.py b/scripts/ScintillaData.py
index f9c7718bf..a5f269573 100644
--- a/scripts/ScintillaData.py
+++ b/scripts/ScintillaData.py
@@ -24,9 +24,13 @@
# sorted list of lexer properties
# propertyDocuments
# dictionary of property documentation { name: document string }
+# sclexFromName
+# dictionary of SCLEX_* IDs { name: SCLEX_ID }
+# fileFromSclex
+# dictionary of file names { SCLEX_ID: file name }
# This file can be run to see the data it provides.
-# Requires Python 2.5 or later
+# Requires Python 2.7 or later
from __future__ import with_statement
@@ -36,11 +40,21 @@ import FileGenerator
def FindModules(lexFile):
modules = []
+ partLine = ""
with open(lexFile) as f:
for l in f.readlines():
- if l.startswith("LexerModule"):
- l = l.replace("(", " ")
- modules.append(l.split()[1])
+ l = l.rstrip()
+ if partLine or l.startswith("LexerModule"):
+ if ")" in l:
+ l = partLine + l
+ l = l.replace("(", " ")
+ l = l.replace(")", " ")
+ l = l.replace(",", " ")
+ parts = l.split()
+ modules.append([parts[1], parts[2], parts[4][1:-1]])
+ partLine = ""
+ else:
+ partLine = partLine + l
return modules
# Properties that start with lexer. or fold. are automatically found but there are some
@@ -185,8 +199,14 @@ class ScintillaData:
self.lexerModules = []
lexerProperties = set()
self.propertyDocuments = {}
+ self.sclexFromName = {}
+ self.fileFromSclex = {}
for lexFile in lexFilePaths:
- self.lexerModules.extend(FindModules(lexFile))
+ modules = FindModules(lexFile)
+ for module in modules:
+ self.sclexFromName[module[2]] = module[1]
+ self.fileFromSclex[module[1]] = lexFile
+ self.lexerModules.append(module[0])
for k in FindProperties(lexFile).keys():
lexerProperties.add(k)
documents = FindPropertyDocumentation(lexFile)
@@ -209,6 +229,12 @@ if __name__=="__main__":
sci.dateModified, sci.yearModified, sci.mdyModified, sci.dmyModified, sci.myModified))
printWrapped(str(len(sci.lexFiles)) + " lexer files: " + ", ".join(sci.lexFiles))
printWrapped(str(len(sci.lexerModules)) + " lexer modules: " + ", ".join(sci.lexerModules))
+ print("Lexer name to ID:")
+ lexNames = sorted(sci.sclexFromName.keys())
+ for lexName in lexNames:
+ sclex = sci.sclexFromName[lexName]
+ fileName = os.path.basename(sci.fileFromSclex[sclex])
+ print(" " + lexName + " -> " + sclex + " in " + fileName)
printWrapped("Lexer properties: " + ", ".join(sci.lexerProperties))
print("Lexer property documentation:")
documentProperties = list(sci.propertyDocuments.keys())