|
|
|
@ -26,6 +26,9 @@ class SampleImpl(metaclass=abc.ABCMeta): |
|
|
|
|
def __init__(self, args: Arguments): |
|
|
|
|
self.name = args.name |
|
|
|
|
self.version = args.version |
|
|
|
|
self.lowercase_token = re.sub(r'[^a-z0-9]', '_', self.name.lower()) |
|
|
|
|
self.uppercase_token = self.lowercase_token.upper() |
|
|
|
|
self.capitalized_token = self.lowercase_token.capitalize() |
|
|
|
|
|
|
|
|
|
@abc.abstractmethod |
|
|
|
|
def create_executable(self) -> None: |
|
|
|
@ -35,17 +38,6 @@ class SampleImpl(metaclass=abc.ABCMeta): |
|
|
|
|
def create_library(self) -> None: |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ClassImpl(SampleImpl): |
|
|
|
|
|
|
|
|
|
"""For Class based languages, like Java and C#""" |
|
|
|
|
|
|
|
|
|
def __init__(self, args: Arguments): |
|
|
|
|
super().__init__(args) |
|
|
|
|
self.lowercase_token = re.sub(r'[^a-z0-9]', '_', self.name.lower()) |
|
|
|
|
self.uppercase_token = self.lowercase_token.upper() |
|
|
|
|
self.capitalized_token = self.lowercase_token.capitalize() |
|
|
|
|
|
|
|
|
|
@abc.abstractproperty |
|
|
|
|
def exe_template(self) -> str: |
|
|
|
|
pass |
|
|
|
@ -70,6 +62,11 @@ class ClassImpl(SampleImpl): |
|
|
|
|
def source_ext(self) -> str: |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ClassImpl(SampleImpl): |
|
|
|
|
|
|
|
|
|
"""For Class based languages, like Java and C#""" |
|
|
|
|
|
|
|
|
|
def create_executable(self) -> None: |
|
|
|
|
source_name = f'{self.capitalized_token}.{self.source_ext}' |
|
|
|
|
with open(source_name, 'w', encoding='utf-8') as f: |
|
|
|
@ -102,3 +99,72 @@ class ClassImpl(SampleImpl): |
|
|
|
|
f.write(self.lib_test_template.format(**kwargs)) |
|
|
|
|
with open('meson.build', 'w', encoding='utf-8') as f: |
|
|
|
|
f.write(self.lib_meson_template.format(**kwargs)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FileImpl(SampleImpl): |
|
|
|
|
|
|
|
|
|
"""File based languages without headers""" |
|
|
|
|
|
|
|
|
|
def create_executable(self) -> None: |
|
|
|
|
source_name = f'{self.lowercase_token}.{self.source_ext}' |
|
|
|
|
with open(source_name, 'w', encoding='utf-8') as f: |
|
|
|
|
f.write(self.exe_template.format(project_name=self.name)) |
|
|
|
|
with open('meson.build', 'w', encoding='utf-8') as f: |
|
|
|
|
f.write(self.exe_meson_template.format(project_name=self.name, |
|
|
|
|
exe_name=self.name, |
|
|
|
|
source_name=source_name, |
|
|
|
|
version=self.version)) |
|
|
|
|
|
|
|
|
|
def lib_kwargs(self) -> T.Dict[str, str]: |
|
|
|
|
"""Get Language specific keyword arguments |
|
|
|
|
|
|
|
|
|
:return: A dictionary of key: values to fill in the templates |
|
|
|
|
""" |
|
|
|
|
return { |
|
|
|
|
'utoken': self.uppercase_token, |
|
|
|
|
'ltoken': self.lowercase_token, |
|
|
|
|
'header_dir': self.lowercase_token, |
|
|
|
|
'class_name': self.capitalized_token, |
|
|
|
|
'function_name': f'{self.lowercase_token[0:3]}_func', |
|
|
|
|
'namespace': self.lowercase_token, |
|
|
|
|
'source_file': f'{self.lowercase_token}.{self.source_ext}', |
|
|
|
|
'test_source_file': f'{self.lowercase_token}_test.{self.source_ext}', |
|
|
|
|
'test_exe_name': f'{self.lowercase_token}_test', |
|
|
|
|
'project_name': self.name, |
|
|
|
|
'lib_name': self.lowercase_token, |
|
|
|
|
'test_name': self.lowercase_token, |
|
|
|
|
'version': self.version, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
def create_library(self) -> None: |
|
|
|
|
lib_name = f'{self.lowercase_token}.{self.source_ext}' |
|
|
|
|
test_name = f'{self.lowercase_token}_test.{self.source_ext}' |
|
|
|
|
kwargs = self.lib_kwargs() |
|
|
|
|
with open(lib_name, 'w', encoding='utf-8') as f: |
|
|
|
|
f.write(self.lib_template.format(**kwargs)) |
|
|
|
|
with open(test_name, 'w', encoding='utf-8') as f: |
|
|
|
|
f.write(self.lib_test_template.format(**kwargs)) |
|
|
|
|
with open('meson.build', 'w', encoding='utf-8') as f: |
|
|
|
|
f.write(self.lib_meson_template.format(**kwargs)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FileHeaderImpl(FileImpl): |
|
|
|
|
|
|
|
|
|
@abc.abstractproperty |
|
|
|
|
def header_ext(self) -> str: |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
@abc.abstractproperty |
|
|
|
|
def lib_header_template(self) -> str: |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def lib_kwargs(self) -> T.Dict[str, str]: |
|
|
|
|
kwargs = super().lib_kwargs() |
|
|
|
|
kwargs['header_file'] = f'{self.lowercase_token}.{self.header_ext}' |
|
|
|
|
return kwargs |
|
|
|
|
|
|
|
|
|
def create_library(self) -> None: |
|
|
|
|
super().create_library() |
|
|
|
|
kwargs = self.lib_kwargs() |
|
|
|
|
with open(kwargs['header_file'], 'w', encoding='utf-8') as f: |
|
|
|
|
f.write(self.lib_header_template.format_map(kwargs)) |
|
|
|
|