diff --git a/scripts/TouchinBuild/Tests/UnitTests/LineConveyor/test_commentRemover.py b/scripts/TouchinBuild/Tests/UnitTests/LineConveyor/test_commentRemover.py index 028d416..8cff836 100644 --- a/scripts/TouchinBuild/Tests/UnitTests/LineConveyor/test_commentRemover.py +++ b/scripts/TouchinBuild/Tests/UnitTests/LineConveyor/test_commentRemover.py @@ -8,12 +8,12 @@ class TestCommentRemover(unittest.TestCase): def test_startsWithComment(self): line = '# this line is comment' - newLine = self.commentRemover.processText(line, self.commentRemover) + newLine = self.commentRemover.processText(line, None) self.assertEqual('', newLine) def test_containsComment(self): line = 'this line contains # a comment' - newLine = self.commentRemover.processText(line, self.commentRemover) + newLine = self.commentRemover.processText(line, None) self.assertEqual('this line contains ', newLine) \ No newline at end of file diff --git a/scripts/TouchinBuild/parsers/SettingsParser/SettingsParser.py b/scripts/TouchinBuild/parsers/SettingsParser/SettingsParser.py index 268d8d3..10c2ba4 100644 --- a/scripts/TouchinBuild/parsers/SettingsParser/SettingsParser.py +++ b/scripts/TouchinBuild/parsers/SettingsParser/SettingsParser.py @@ -3,7 +3,10 @@ from parsers.SettingsParser.SettingsMerger import SettingsMerger class SettingsParser: - def __init__(self, settings=None): + def __init__(self, compositeLineProcessor, settings=None): + assert compositeLineProcessor is not None + + self.compositeLineProcessor = compositeLineProcessor self.settings = settings if not self.settings: @@ -14,14 +17,14 @@ class SettingsParser: lines = content.splitlines() for line in lines: - stripped = line.strip(' \t\n\r') + processedLine = self.compositeLineProcessor.processText(line, None) - if len(stripped) == 0: - continue - if stripped.startswith("#"): + if len(processedLine) == 0: continue + else: + self.processLine(processedLine) - self.processLine(stripped) + self.processLine(processedLine) def processLine(self, line): assert line is not None diff --git a/scripts/TouchinBuild/taskRunner.py b/scripts/TouchinBuild/taskRunner.py index 0985a88..bb258fc 100755 --- a/scripts/TouchinBuild/taskRunner.py +++ b/scripts/TouchinBuild/taskRunner.py @@ -26,17 +26,17 @@ scriptDir = os.path.dirname(scriptFilePath) class TaskRunner: - def __init__(self, settingsProvider, fileContentProvider, buildConfigProvider): + def __init__(self, settingsProvider, fileContentProvider, buildConfigProvider, linePreprocessor): assert settingsProvider is not None assert fileContentProvider is not None assert buildConfigProvider is not None + assert linePreprocessor is not None self.settingsProvider = settingsProvider self.fileContentProvider = fileContentProvider self.configsProvider = buildConfigProvider + self.linePreprocessor = linePreprocessor - lineStripper = Stripper() - commentRemover = CommentRemover() macroProcessor = MacroProcessor() self.valueProvider = ValueProvider() @@ -52,9 +52,6 @@ class TaskRunner: self.textPreprocessor.addProcessor(macroResolver) self.textPreprocessor.addProcessor(textInclude) - self.linePreprocessor = TextConveyorPreprocessor() - self.linePreprocessor.addProcessor(commentRemover) - self.linePreprocessor.addProcessor(lineStripper) def run(self): rawSettings = self.settingsProvider.fetchSettings() @@ -83,8 +80,16 @@ if __name__ == "__main__": parser = argparse.ArgumentParser() overrideArgs = parser.parse_known_args()[1] + # компоную препроцессор для индивидуальной обработки строк (удаление комментариев и ведущих пробельных символов) + lineStripper = Stripper() + commentRemover = CommentRemover() + linePreprocessor = TextConveyorPreprocessor() + linePreprocessor.addProcessor(commentRemover) + linePreprocessor.addProcessor(lineStripper) + # TODO: перенести в корень комапановки - fromFileSettingsProvider = FromFileSettingsProvider() + settingsPath = 'scripts/settings.txt' + fromFileSettingsProvider = FromFileSettingsProvider(settingsPath, linePreprocessor) overrideWithCmdSetProvider = CmdArgsOverriderSettingsProvider(fromFileSettingsProvider, overrideArgs) fContentProvider = FileContentProvider() @@ -96,5 +101,5 @@ if __name__ == "__main__": resolvedBuildConfigProvider = ResolvedBuildConfigProvider(predefineBuildConfigProvider) - runner = TaskRunner(overrideWithCmdSetProvider, fContentProvider, resolvedBuildConfigProvider) + runner = TaskRunner(overrideWithCmdSetProvider, fContentProvider, resolvedBuildConfigProvider, linePreprocessor) runner.run() \ No newline at end of file diff --git a/scripts/TouchinBuild/utils/SettingsProvider/FromFileSettingsProvider.py b/scripts/TouchinBuild/utils/SettingsProvider/FromFileSettingsProvider.py index 6e9e614..19da67d 100644 --- a/scripts/TouchinBuild/utils/SettingsProvider/FromFileSettingsProvider.py +++ b/scripts/TouchinBuild/utils/SettingsProvider/FromFileSettingsProvider.py @@ -3,14 +3,20 @@ from parsers.SettingsParser.SettingsParser import SettingsParser class FromFileSettingsProvider(SettingsProviderBase): - def __init__(self): + def __init__(self, pathToSettings, compositeLineProcessor): SettingsProviderBase.__init__(self) + assert pathToSettings is not None + assert compositeLineProcessor is not None + + self.pathToSettings = pathToSettings + self.compositeLineProcessor = compositeLineProcessor + def fetchSettings(self): - settingsFile = open('scripts/settings.txt') + settingsFile = open(self.pathToSettings) content = settingsFile.read() - parser = SettingsParser() + parser = SettingsParser(self.compositeLineProcessor) parser.parse(content) return parser.settings