aboutsummaryrefslogtreecommitdiffhomepage
path: root/lexilla/scripts/LexillaGen.py
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2020-05-23 14:31:08 +1000
committerNeil <nyamatongwe@gmail.com>2020-05-23 14:31:08 +1000
commit09328a33a46f5b57bc66c129662c26058b1b392b (patch)
tree79e84330cfba29d108d1d67b8c81aa59b26fdbd2 /lexilla/scripts/LexillaGen.py
parentfeb5dcb46da298b1a1d8aae44948c9da63b5ce95 (diff)
downloadscintilla-mirror-09328a33a46f5b57bc66c129662c26058b1b392b.tar.gz
Update Lexilla Xcode project with new lexers and changed version number.
Updage make dependencies files.
Diffstat (limited to 'lexilla/scripts/LexillaGen.py')
-rw-r--r--lexilla/scripts/LexillaGen.py90
1 files changed, 88 insertions, 2 deletions
diff --git a/lexilla/scripts/LexillaGen.py b/lexilla/scripts/LexillaGen.py
index eaa48f1d9..af7789c8b 100644
--- a/lexilla/scripts/LexillaGen.py
+++ b/lexilla/scripts/LexillaGen.py
@@ -8,15 +8,85 @@
# Files are regenerated in place with templates stored in comments.
# The format of generation comments is documented in FileGenerator.py.
-import pathlib, sys
+import os, pathlib, sys, uuid
-sys.path.append(str(pathlib.Path(__file__).resolve().parent.parent.parent / "scripts"))
+thisPath = pathlib.Path(__file__).resolve()
+
+sys.path.append(str(thisPath.parent.parent.parent / "scripts"))
from FileGenerator import Regenerate, UpdateLineInFile, \
ReplaceREInFile, UpdateLineInPlistFile, ReadFileAsList, UpdateFileFromLines, \
FindSectionInList
import ScintillaData
+sys.path.append(str(thisPath.parent.parent / "src"))
+import DepGen
+
+# RegenerateXcodeProject and assiciated functions is copied from scintilla/scripts/LexGen.py
+
+# Last 24 digits of UUID, used for item IDs in Xcode
+def uid24():
+ return str(uuid.uuid4()).replace("-", "").upper()[-24:]
+
+def ciLexerKey(a):
+ return a.split()[2].lower()
+
+
+"""
+ 11F35FDB12AEFAF100F0236D /* LexA68k.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 11F35FDA12AEFAF100F0236D /* LexA68k.cxx */; };
+ 11F35FDA12AEFAF100F0236D /* LexA68k.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexA68k.cxx; path = ../../lexers/LexA68k.cxx; sourceTree = SOURCE_ROOT; };
+ 11F35FDA12AEFAF100F0236D /* LexA68k.cxx */,
+ 11F35FDB12AEFAF100F0236D /* LexA68k.cxx in Sources */,
+"""
+def RegenerateXcodeProject(path, lexers, lexerReferences):
+ # Build 4 blocks for insertion:
+ # Each markers contains a unique section start, an optional wait string, and a section end
+
+ markersPBXBuildFile = ["Begin PBXBuildFile section", "", "End PBXBuildFile section"]
+ sectionPBXBuildFile = []
+
+ markersPBXFileReference = ["Begin PBXFileReference section", "", "End PBXFileReference section"]
+ sectionPBXFileReference = []
+
+ markersLexers = ["/* Lexers */ =", "children", ");"]
+ sectionLexers = []
+
+ markersPBXSourcesBuildPhase = ["Begin PBXSourcesBuildPhase section", "files", ");"]
+ sectionPBXSourcesBuildPhase = []
+
+ for lexer in lexers:
+ if lexer not in lexerReferences:
+ uid1 = uid24()
+ uid2 = uid24()
+ print("Lexer", lexer, "is not in Xcode project. Use IDs", uid1, uid2)
+ lexerReferences[lexer] = [uid1, uid2]
+ linePBXBuildFile = "\t\t{} /* {}.cxx in Sources */ = {{isa = PBXBuildFile; fileRef = {} /* {}.cxx */; }};".format(uid1, lexer, uid2, lexer)
+ linePBXFileReference = "\t\t{} /* {}.cxx */ = {{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = {}.cxx; path = ../../lexers/{}.cxx; sourceTree = SOURCE_ROOT; }};".format(uid2, lexer, lexer, lexer)
+ lineLexers = "\t\t\t\t{} /* {}.cxx */,".format(uid2, lexer)
+ linePBXSourcesBuildPhase = "\t\t\t\t{} /* {}.cxx in Sources */,".format(uid1, lexer)
+ sectionPBXBuildFile.append(linePBXBuildFile)
+ sectionPBXFileReference.append(linePBXFileReference)
+ sectionLexers.append(lineLexers)
+ sectionPBXSourcesBuildPhase.append(linePBXSourcesBuildPhase)
+
+ lines = ReadFileAsList(path)
+
+ sli = FindSectionInList(lines, markersPBXBuildFile)
+ lines[sli.stop:sli.stop] = sectionPBXBuildFile
+
+ sli = FindSectionInList(lines, markersPBXFileReference)
+ lines[sli.stop:sli.stop] = sectionPBXFileReference
+
+ sli = FindSectionInList(lines, markersLexers)
+ # This section is shown in the project outline so sort it to make it easier to navigate.
+ allLexers = sorted(lines[sli.start:sli.stop] + sectionLexers, key=ciLexerKey)
+ lines[sli] = allLexers
+
+ sli = FindSectionInList(lines, markersPBXSourcesBuildPhase)
+ lines[sli.stop:sli.stop] = sectionPBXSourcesBuildPhase
+
+ UpdateFileFromLines(path, lines, "\n")
+
def RegenerateAll(rootDirectory):
root = pathlib.Path(rootDirectory)
@@ -42,5 +112,21 @@ def RegenerateAll(rootDirectory):
UpdateLineInFile(rcPath, "#define VERSION_WORDS",
"#define VERSION_WORDS " + versionCommad)
+ lexillaXcode = lexillaDir / "src" / "Lexilla"
+ lexillaXcodeProject = lexillaXcode / "Lexilla.xcodeproj" / "project.pbxproj"
+
+ lexerReferences = ScintillaData.FindLexersInXcode(lexillaXcodeProject)
+
+ UpdateLineInPlistFile(lexillaXcode / "Lexilla" / "Info.plist",
+ "CFBundleShortVersionString", versionDotted)
+
+ ReplaceREInFile(lexillaXcodeProject, "CURRENT_PROJECT_VERSION = [0-9.]+;",
+ f'CURRENT_PROJECT_VERSION = {versionDotted};')
+
+ RegenerateXcodeProject(lexillaXcodeProject, sci.lexFiles, lexerReferences)
+
+ os.chdir(srcDir)
+ DepGen.Generate()
+
if __name__=="__main__":
RegenerateAll(pathlib.Path(__file__).resolve().parent.parent.parent)