]> git.saurik.com Git - wxWidgets.git/blobdiff - src/stc/scintilla/src/LexGen.py
Initial copy of Scintilla 3.21 code
[wxWidgets.git] / src / stc / scintilla / src / LexGen.py
old mode 100644 (file)
new mode 100755 (executable)
index 571332e..d03c4a2
@@ -1,3 +1,4 @@
+#!/usr/bin/env python
 # LexGen.py - implemented 2002 by Neil Hodgson neilh@scintilla.org
 # Released to the public domain.
 
 # LexGen.py - implemented 2002 by Neil Hodgson neilh@scintilla.org
 # Released to the public domain.
 
@@ -164,6 +165,8 @@ def FindModules(lexFile):
             modules.append(l.split()[1])
     return modules
 
             modules.append(l.split()[1])
     return modules
 
+# Properties that start with lexer. or fold. are automatically found but there are some
+# older properties that don't follow this pattern so must be explicitly listed.
 knownIrregularProperties = [
     "fold",
     "styling.within.preprocessor",
 knownIrregularProperties = [
     "fold",
     "styling.within.preprocessor",
@@ -181,7 +184,7 @@ def FindProperties(lexFile):
     properties = {}
     f = open(lexFile)
     for l in f.readlines():
     properties = {}
     f = open(lexFile)
     for l in f.readlines():
-        if "GetProperty" in l:
+        if ("GetProperty" in l or "DefineProperty" in l) and "\"" in l:
             l = l.strip()
             if not l.startswith("//"): # Drop comments
                 propertyName = l.split("\"")[1]
             l = l.strip()
             if not l.startswith("//"): # Drop comments
                 propertyName = l.split("\"")[1]
@@ -205,13 +208,33 @@ def FindPropertyDocumentation(lexFile):
                 # Only allow lower case property names
                 name = propertyName
                 documents[name] = ""
                 # Only allow lower case property names
                 name = propertyName
                 documents[name] = ""
+        elif "DefineProperty" in l and "\"" in l:
+            propertyName = l.split("\"")[1]
+            if propertyName.lower() == propertyName:
+                # Only allow lower case property names
+                name = propertyName
+                documents[name] = ""
         elif name:
             if l.startswith("//"):
                 if documents[name]:
                     documents[name] += " "
                 documents[name] += l[2:].strip()
         elif name:
             if l.startswith("//"):
                 if documents[name]:
                     documents[name] += " "
                 documents[name] += l[2:].strip()
+            elif l.startswith("\""):
+                l = l[1:].strip()
+                if l.endswith(";"):
+                    l = l[:-1].strip()
+                if l.endswith(")"):
+                    l = l[:-1].strip()
+                if l.endswith("\""):
+                    l = l[:-1]
+                # Fix escaped double quotes
+                l = l.replace("\\\"", "\"")
+                documents[name] += l
             else:
                 name = ""
             else:
                 name = ""
+    for name in list(documents.keys()):
+        if documents[name] == "":
+            del documents[name]
     return documents
 
 def ciCompare(a,b):
     return documents
 
 def ciCompare(a,b):
@@ -219,18 +242,63 @@ def ciCompare(a,b):
 
 def ciKey(a):
     return a.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 sortListInsensitive(l):
     try:    # Try key function
         l.sort(key=ciKey)
     except TypeError:    # Earlier version of Python, so use comparison function
         l.sort(ciCompare)
 
+def UpdateLineInFile(path, linePrefix, lineReplace):
+    lines = []
+    with open(path, "r") as f:
+        for l in f.readlines():
+            l = l.rstrip()
+            if l.startswith(linePrefix):
+                lines.append(lineReplace)
+            else:
+                lines.append(l)
+    contents = NATIVE.join(lines) + NATIVE
+    UpdateFile(path, contents)
+
+def UpdateVersionNumbers(root):
+    with open(root + "scintilla/version.txt") as f:
+        version = f.read()
+    versionDotted = version[0] + '.' + version[1] + '.' + version[2]
+    versionCommad = version[0] + ', ' + version[1] + ', ' + version[2] + ', 0'
+
+    UpdateLineInFile(root + "scintilla/win32/ScintRes.rc", "#define VERSION_SCINTILLA",
+        "#define VERSION_SCINTILLA \"" + versionDotted + "\"")
+    UpdateLineInFile(root + "scintilla/win32/ScintRes.rc", "#define VERSION_WORDS", 
+        "#define VERSION_WORDS " + versionCommad)
+    UpdateLineInFile(root + "scintilla/qt/ScintillaEditBase/ScintillaEditBase.pro",
+        "VERSION =", 
+        "VERSION = " + versionDotted)
+    UpdateLineInFile(root + "scintilla/qt/ScintillaEdit/ScintillaEdit.pro",
+        "VERSION =", 
+        "VERSION = " + versionDotted)
+    UpdateLineInFile(root + "scintilla/doc/ScintillaDownload.html", "       Release", 
+        "       Release " + versionDotted)
+    UpdateLineInFile(root + "scintilla/doc/index.html",
+        '          <font color="#FFCC99" size="3"> Release version', 
+        '          <font color="#FFCC99" size="3"> Release version ' + versionDotted + '<br />') 
+
+    if os.path.exists(root + "scite"):
+        UpdateLineInFile(root + "scite/src/SciTE.h", "#define VERSION_SCITE", 
+            "#define VERSION_SCITE \"" + versionDotted + "\"")
+        UpdateLineInFile(root + "scite/src/SciTE.h", "#define VERSION_WORDS", 
+            "#define VERSION_WORDS " + versionCommad)
+        UpdateLineInFile(root + "scite/doc/SciTEDownload.html", "       Release", 
+            "       Release " + versionDotted)
+        UpdateLineInFile(root + "scite/doc/SciTE.html",
+            '          <font color="#FFCC99" size="3"> Release version', 
+            '          <font color="#FFCC99" size="3"> Release version ' + versionDotted + '<br />') 
+
 def RegenerateAll():
     root="../../"
 
     # Find all the lexer source code files
 def RegenerateAll():
     root="../../"
 
     # Find all the lexer source code files
-    lexFilePaths = glob.glob(root + "scintilla/src/Lex*.cxx")
+    lexFilePaths = glob.glob(root + "scintilla/lexers/Lex*.cxx")
     sortListInsensitive(lexFilePaths)
     lexFiles = [os.path.basename(f)[:-4] for f in lexFilePaths]
     print(lexFiles)
     sortListInsensitive(lexFilePaths)
     lexFiles = [os.path.basename(f)[:-4] for f in lexFilePaths]
     print(lexFiles)
@@ -245,7 +313,6 @@ def RegenerateAll():
         for k in documents.keys():
             propertyDocuments[k] = documents[k]
     sortListInsensitive(lexerModules)
         for k in documents.keys():
             propertyDocuments[k] = documents[k]
     sortListInsensitive(lexerModules)
-    del lexerProperties["fold.comment.python"]
     lexerProperties = list(lexerProperties.keys())
     sortListInsensitive(lexerProperties)
 
     lexerProperties = list(lexerProperties.keys())
     sortListInsensitive(lexerProperties)
 
@@ -255,9 +322,9 @@ def RegenerateAll():
     sortListInsensitive(documentProperties)
     propertiesHTML = []
     for k in documentProperties:
     sortListInsensitive(documentProperties)
     propertiesHTML = []
     for k in documentProperties:
-        propertiesHTML.append("\t<tr>\n\t<td>%s</td>\n\t<td>%s</td>\n\t</tr>" % 
-            (k, propertyDocuments[k]))
-        
+        propertiesHTML.append("\t<tr id='property-%s'>\n\t<td>%s</td>\n\t<td>%s</td>\n\t</tr>" %
+            (k, k, propertyDocuments[k]))
+
     # Find all the SciTE properties files
     otherProps = ["abbrev.properties", "Embedded.properties", "SciTEGlobal.properties", "SciTE.properties"]
     if os.path.exists(root + "scite"):
     # Find all the SciTE properties files
     otherProps = ["abbrev.properties", "Embedded.properties", "SciTEGlobal.properties", "SciTE.properties"]
     if os.path.exists(root + "scite"):
@@ -267,22 +334,17 @@ def RegenerateAll():
         sortListInsensitive(propFiles)
         print(propFiles)
 
         sortListInsensitive(propFiles)
         print(propFiles)
 
-    Regenerate(root + "scintilla/src/KeyWords.cxx", "//", NATIVE, lexerModules)
-    Regenerate(root + "scintilla/win32/makefile", "#", NATIVE, lexFiles)
+    Regenerate(root + "scintilla/src/Catalogue.cxx", "//", NATIVE, lexerModules)
     Regenerate(root + "scintilla/win32/scintilla.mak", "#", NATIVE, lexFiles)
     Regenerate(root + "scintilla/win32/scintilla_vc6.mak", "#", NATIVE, lexFiles)
     Regenerate(root + "scintilla/win32/scintilla.mak", "#", NATIVE, lexFiles)
     Regenerate(root + "scintilla/win32/scintilla_vc6.mak", "#", NATIVE, lexFiles)
-    # Use Unix EOLs for gtk Makefiles so they work for Linux users when
-    # extracted from the Scintilla source ZIP (typically created on
-    # Windows).
-    Regenerate(root + "scintilla/gtk/makefile", "#", LF, lexFiles)
-    Regenerate(root + "scintilla/gtk/scintilla.mak", "#", NATIVE, lexFiles)
-    Regenerate(root + "scintilla/macosx/makefile", "#", LF, lexFiles)
     if os.path.exists(root + "scite"):
     if os.path.exists(root + "scite"):
-        Regenerate(root + "scite/win32/makefile", "#", NATIVE, lexFiles, propFiles)
-        Regenerate(root + "scite/win32/scite.mak", "#", NATIVE, lexFiles, propFiles)
+        Regenerate(root + "scite/win32/makefile", "#", NATIVE, propFiles)
+        Regenerate(root + "scite/win32/scite.mak", "#", NATIVE, propFiles)
         Regenerate(root + "scite/src/SciTEProps.cxx", "//", NATIVE, lexerProperties)
         Regenerate(root + "scite/doc/SciTEDoc.html", "<!--", NATIVE, propertiesHTML)
         Generate(root + "scite/boundscheck/vcproj.gen",
          root + "scite/boundscheck/SciTE.vcproj", "#", NATIVE, lexFiles)
 
         Regenerate(root + "scite/src/SciTEProps.cxx", "//", NATIVE, lexerProperties)
         Regenerate(root + "scite/doc/SciTEDoc.html", "<!--", NATIVE, propertiesHTML)
         Generate(root + "scite/boundscheck/vcproj.gen",
          root + "scite/boundscheck/SciTE.vcproj", "#", NATIVE, lexFiles)
 
+    UpdateVersionNumbers(root)
+
 RegenerateAll()
 RegenerateAll()