1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- from visitor import Visitor
- from utils import FileOutputer
- from utils import Enum
- from utils import Logger
- from compiler_exceptions import CodeBlockException
- NOT_SET = 0
- SPACES_USED = 1
- TABS_USED = 2
- Languages = Enum("Python","CSharp","Javascript")
- Platforms = Enum("Threads","GameLoop")
- class CodeGenerator(Visitor):
- def __init__(self):
- self.supported_platforms = []
-
- def generate(self, class_diagram, output_file, platform):
- self.platform = platform
- if self.platform not in self.supported_platforms :
- Logger.showError("Unsupported platform.")
- return False
- try :
- self.fOut = FileOutputer(output_file)
- class_diagram.accept(self)
- finally :
- self.fOut.close()
- return True
-
- def writeCodeCorrectIndent(self, body):
- lines = body.split('\n')
- while( len(lines) > 0 and lines[-1].strip() == "") :
- del(lines[-1])
-
- index = 0;
- while( len(lines) > index and lines[index].strip() == "") :
- index += 1
-
- if index >= len(lines) :
- return
- #first index where valid code is present
- to_strip_index = len(lines[index].rstrip()) - len(lines[index].strip())
- indent_type = NOT_SET;
-
- while index < len(lines):
- strip_part = lines[index][:to_strip_index]
-
- if( ('\t' in strip_part and ' ' in strip_part) or
- (indent_type == SPACES_USED and '\t' in strip_part) or
- (indent_type == TABS_USED and ' ' in strip_part)
- ) :
- raise CodeBlockException("Mixed tab and space indentation!")
-
- if indent_type == NOT_SET :
- if ' ' in strip_part :
- indent_type = SPACES_USED
- elif '\t' in strip_part :
- indent_type = TABS_USED
-
- self.fOut.write(lines[index][to_strip_index:])
- index += 1
|