diff --git a/scripts/Core/FileContentProvider.py b/scripts/Core/FileContentProvider.py new file mode 100644 index 0000000..2378ad1 --- /dev/null +++ b/scripts/Core/FileContentProvider.py @@ -0,0 +1,9 @@ +class FileContentProvider: + def __init__(self): + pass + + def fetchContent(self, path): + file = open(path) + content = file.read() + + return content diff --git a/scripts/Core/LineConveyor/TextInclude.py b/scripts/Core/LineConveyor/TextInclude.py index 4052cab..9d249f2 100644 --- a/scripts/Core/LineConveyor/TextInclude.py +++ b/scripts/Core/LineConveyor/TextInclude.py @@ -1,6 +1,20 @@ class TextInclude: - def __init__(self): - pass + def __init__(self, includeProcessor, contentProvider): + assert includeProcessor is not None + assert contentProvider is not None + + self.includeProcessor = includeProcessor + self.contentProvider = contentProvider def processText(self, text): - pass + assert text is not None + includesInfo = self.includeProcessor.getIncludesInfo(text) + + for info in includesInfo: + includeStatement = info[0] + path = info[1] + + content = self.contentProvider.fetchContent(path) + text.replace(includeStatement, content) + + return text \ No newline at end of file diff --git a/scripts/Tests/UnitTests/IncludeProcessor/__init__.py b/scripts/Tests/UnitTests/IncludeProcessor/__init__.py new file mode 100644 index 0000000..cc31abc --- /dev/null +++ b/scripts/Tests/UnitTests/IncludeProcessor/__init__.py @@ -0,0 +1 @@ +__author__ = 'rzaitov' diff --git a/scripts/Tests/UnitTests/IncludeProcessor/test_IncludeProcessor.py b/scripts/Tests/UnitTests/IncludeProcessor/test_IncludeProcessor.py new file mode 100644 index 0000000..43b3b09 --- /dev/null +++ b/scripts/Tests/UnitTests/IncludeProcessor/test_IncludeProcessor.py @@ -0,0 +1,32 @@ +import unittest +from utils.IncludeProcessor import IncludeProcessor + + +class TestIncludeProcessor(unittest.TestCase): + def setUp(self): + self.processor = IncludeProcessor() + + def test_getPathByIncludeStatement(self): + statement = "< include 'Some Path'>" + path = self.processor.getPathByIncludeStatement(statement) + + self.assertEqual('Some Path', path) + + def test_getInfos(self): + text = """ +< include 'path1'> +bla bla + +some text +""" + includeInfo = self.processor.getIncludesInfo(text) + + self.assertEqual(2, len(includeInfo)) + + info0 = includeInfo[0] + self.assertEqual("< include 'path1'>", info0[0]) + self.assertEqual('path1', info0[1]) + + info1 = includeInfo[1] + self.assertEqual("", info1[0]) + self.assertEqual('path2', info1[1]) \ No newline at end of file diff --git a/scripts/utils/IncludeProcessor.py b/scripts/utils/IncludeProcessor.py new file mode 100644 index 0000000..32545e8 --- /dev/null +++ b/scripts/utils/IncludeProcessor.py @@ -0,0 +1,34 @@ +import re +from parser.LineParser import LineParser + + +class IncludeProcessor(LineParser): + def __init__(self): + pass + + def getIncludesInfo(self, text): + assert text is not None + + regexpSource = '<\s*' + self.than('include') + r"'[^']+'" + '\s*>' + + regexp = re.compile(regexpSource, re.UNICODE) + results = regexp.findall(text) + + includesInfo = [] + if results: + for r in results: + path = self.getPathByIncludeStatement(r) + includesInfo.append((r, path)) + + return includesInfo + + def getPathByIncludeStatement(self, includeStatement): + assert includeStatement is not None + + regexpSource = r"'([^']+)'" + regexp = re.compile(regexpSource, re.UNICODE) + + results = regexp.findall(includeStatement) + path = results[0] + + return path \ No newline at end of file