diff options
author | Neil <nyamatongwe@gmail.com> | 2020-05-23 14:31:08 +1000 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2020-05-23 14:31:08 +1000 |
commit | 09328a33a46f5b57bc66c129662c26058b1b392b (patch) | |
tree | 79e84330cfba29d108d1d67b8c81aa59b26fdbd2 | |
parent | feb5dcb46da298b1a1d8aae44948c9da63b5ce95 (diff) | |
download | scintilla-mirror-09328a33a46f5b57bc66c129662c26058b1b392b.tar.gz |
Update Lexilla Xcode project with new lexers and changed version number.
Updage make dependencies files.
-rw-r--r-- | lexilla/scripts/LexillaGen.py | 90 |
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) |