-
Notifications
You must be signed in to change notification settings - Fork 1
/
mclass
executable file
·100 lines (77 loc) · 2.58 KB
/
mclass
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/usr/bin/python3
import sys
import os
import re
#Actual program starts here
#Treat function below as "Main function"
def createClass(name):
createHeaderFile(name)
createSourceFile(name)
def createHeaderFile(name):
try:
with open(name + ".h", 'x') as header:
header.write("#pragma once\n\n")
header.write("class " + name + " {\n")
header.write("\tpublic:\n")
header.write("\t\t" + name + "();\n\n")
header.write("\tprivate:\n\n")
header.write("\tprivate:\n")
header.write("};")
except FileExistsError:
printErrorMsg(1, "header")
return
os.system("vim " + name + ".h")
def createSourceFile(name):
try:
with open(name + ".h", 'r') as header:
with open(name + ".cpp", 'x') as source:
f_dec = extractFunctionDeclarations(header.read())
source.write("#include \"" + name + ".h\"\n\n\n\n")
createFunctionDefinitions(f_dec, source, name)
except FileExistsError:
printErrorMsg(1, "source")
return
def extractFunctionDeclarations(text):
pattern = r"[^;{:]*:{2}[^;{]*\([^;]*\)[\sa-z]*;|[^:;}]*\([^;]*\)[\sa-z]*;"
return re.findall(pattern, text)
def createFunctionDefinitions(f_dec, source, name):
for declaration in f_dec:
contents = extractDeclarationContents(declaration)
createFunctionDefinition(contents, source, name)
def extractDeclarationContents(declaration):
words = r"\([^;]*\)|<[^;]*>|[a-zA-Z0-9_:\~]+"
contents = re.findall(words, declaration)
return contents;
def createFunctionDefinition(contents, source, name):
name_i = -1
virtual = 0
for i in range(len(contents)):
if(contents[i] == "virtual"):
virtual = 1
elif(contents[i][0] == '('):
name_i = i-1
elif(contents[i] == "inline"):
return
if(virtual):
contents.remove("virtual")
name_i -= 1
if(name_i == -1):
return
else:
definition = ""
for i in range(name_i):
definition += contents[i] + " "
definition += name + "::" + contents[name_i];
for i in range(name_i+1, len(contents)):
definition += contents[i] + " "
definition += "{\n}\n\n"
source.write(definition)
def printErrorMsg(id, filename = ""):
if(id == 0):
print("mclass: missing class name")
if(id == 1):
print("Class " + filename + " file already exists!")
if(len(sys.argv) > 1):
createClass(str(sys.argv[1]))
else:
printErrorMsg(0)