From ee6442ecd07fbc0a2d77f2e4ee049b4ebe0b201c Mon Sep 17 00:00:00 2001 From: rzaitov Date: Wed, 13 Nov 2013 16:26:37 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BF=D1=80=D0=B5=D0=B4=D0=B2=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=B0=D1=8F=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=20=D0=B2=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B5=20=D0=BD?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA=20=D1=82=D0=B0=D0=BA?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=B6=D0=B5=20=D0=BA=D0=B0=D0=BA=20=D0=B2=20?= =?UTF-8?q?=D1=84=D0=B0=D0=B9=D0=BB=D0=B5=20=D1=88=D0=B0=D0=B3=D0=BE=D0=B2?= =?UTF-8?q?=20=E2=80=93=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D0=B5=D0=B2=20=D0=B8=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=D0=B5=D0=B4=D1=83=D1=89=D0=B8=D1=85?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B1=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D1=85?= =?UTF-8?q?=20=D1=81=D0=B8=D0=BC=D0=B2=D0=BE=D0=BB=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LineConveyor/test_commentRemover.py | 4 ++-- .../parsers/SettingsParser/SettingsParser.py | 15 +++++++------ scripts/TouchinBuild/taskRunner.py | 21 ++++++++++++------- .../FromFileSettingsProvider.py | 12 ++++++++--- 4 files changed, 33 insertions(+), 19 deletions(-) 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