Skip to content

Commit ce3c2d0

Browse files
Continue work on python converter
1 parent 04cff43 commit ce3c2d0

1 file changed

Lines changed: 167 additions & 44 deletions

File tree

EZCode/Converter.cs

Lines changed: 167 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
using NAudio.MediaFoundation;
2-
using System.Net.Http.Headers;
3-
using System.Windows.Forms;
4-
5-
namespace EZCode.Converter
1+
namespace EZCode.Converter
62
{
73
public class Converter
84
{
@@ -11,7 +7,7 @@ public enum ProgrammingLanguage
117
Python,
128
}
139
private static readonly ProgrammingLanguage Default = ProgrammingLanguage.Python;
14-
public ProgrammingLanguage Language { get; set; } = Default;
10+
public static ProgrammingLanguage Language { get; set; } = Default;
1511
public string Code { get; set; } = "";
1612
public Converter() { }
1713
public Converter(string code, ProgrammingLanguage language)
@@ -105,16 +101,17 @@ private static string Convert(string code, ProgrammingLanguage language)
105101

106102
if (language == ProgrammingLanguage.Python)
107103
{
108-
con = ConvertLinePython(action, line, ref tab);
104+
con = ConvertLinePython(action, line, objects, ref tab);
109105
}
110106

111107
converted += con + Environment.NewLine;
112108
}
113109

114110
if (language == ProgrammingLanguage.Python && ImportAndDefine.ContainsMethod)
115111
{
112+
int ttab = 0;
116113
string firstMethod = lines.FirstOrDefault(x => getAction(x, objects) == Actions.Method, "method Start");
117-
firstMethod = ConvertLinePython(Actions.Method, firstMethod, ref tab).Split(" ")[1].Replace(":", "");
114+
firstMethod = ConvertLinePython(Actions.Method, firstMethod, objects, ref ttab).Split(" ").Select(x=>x.Trim()).ToArray()[1].Replace(":", "");
118115
converted += Environment.NewLine + firstMethod + Environment.NewLine;
119116
}
120117

@@ -136,7 +133,7 @@ private static string Convert(string code, ProgrammingLanguage language)
136133

137134
return converted;
138135
}
139-
private static string ConvertLinePython(Actions action, string line, ref int _tab)
136+
private static string ConvertLinePython(Actions action, string line, List<EZCodeObject> objects, ref int _tab)
140137
{
141138
try
142139
{
@@ -271,11 +268,34 @@ private static string ConvertLinePython(Actions action, string line, ref int _ta
271268
}
272269
string parameters = string.Join(", ", newW);
273270
line = $"def {w[1]}({parameters}):";
274-
tab += 1;
271+
tab ++;
275272
break;
276273
case Actions.EndMethod:
277274
line = "";
278-
tab -= 1;
275+
tab--;
276+
break;
277+
case Actions.ClosingBracket:
278+
line = "";
279+
tab--;
280+
break;
281+
case Actions.OpenningBracket:
282+
line = "";
283+
break;
284+
case Actions.If:
285+
int next = 0;
286+
line = $"if {returnAgument(w, 1, objects, ref next)}:";
287+
if (w.Length > next && !string.Join(" ", w).Trim().EndsWith("{"))
288+
{
289+
string nextLine = string.Join(" ", w.Skip(next));
290+
Actions _action = getAction(nextLine, objects);
291+
tab++;
292+
line += Environment.NewLine + ConvertLinePython(_action, nextLine, objects, ref tab);
293+
tab--;
294+
}
295+
else
296+
{
297+
tab++;
298+
}
279299
break;
280300
}
281301
string tabs = string.Join("", Enumerable.Repeat(" ", _tab));
@@ -287,6 +307,29 @@ private static string ConvertLinePython(Actions action, string line, ref int _ta
287307
return "";
288308
}
289309
}
310+
private static string returnAgument(string[] _w, int index, List<EZCodeObject> objects, ref int next)
311+
{
312+
string val = "";
313+
string[] w = _w.Skip(index).TakeWhile(x => x != ":").Select(y => y.Trim()).ToArray();
314+
for (int i = 0; i < w.Length; i++)
315+
{
316+
if (objects.FirstOrDefault(x => x.Type == EZCodeObject.EZType.Var && x.Name == w[i], null) != null)
317+
{
318+
val += w[i] + " ";
319+
}
320+
else if (new[] { "=", "!", "!=", ">", "<", "<=", ">=", "&", "and", "or" }.Any(x => w[i] == x))
321+
{
322+
val += w[i] + " ";
323+
}
324+
else
325+
{
326+
val += returnValue(w, i, false) + " ";
327+
}
328+
}
329+
if (val.EndsWith(" ")) val = val.Remove(val.Length - 1, 1);
330+
next = _w.ToList().IndexOf(":") + 1;
331+
return val.Replace(" = ", " == ").Replace(" ! ", " not ");
332+
}
290333
private static string returnArray(string[] w)
291334
{
292335
string val = "[";
@@ -349,6 +392,8 @@ private enum Actions
349392
SplitList,
350393
Method,
351394
EndMethod,
395+
ClosingBracket,
396+
OpenningBracket,
352397
Loop,
353398
Else,
354399
If,
@@ -736,9 +781,23 @@ private static Actions getAction(ref string line, List<EZCodeObject> objects)
736781
}
737782
break;
738783
case "method":
784+
if (parts.Length > 2)
785+
{
786+
string[] param = string.Join(" ", parts.Skip(3)).Split(",").Select(x=>x.Trim()).ToArray();
787+
EZCodeObject[] vals = new EZCodeObject[0];
788+
foreach (string val in param)
789+
{
790+
vals = vals.Append(new EZCodeObject(val.Split(":")[0], EZCodeObject.EZType.Var)).ToArray();
791+
}
792+
objects.AddRange(vals.ToList());
793+
}
739794
return Actions.Method;
740795
case "endmethod":
741796
return Actions.EndMethod;
797+
case "}":
798+
return Actions.ClosingBracket;
799+
case "{":
800+
return Actions.OpenningBracket;
742801
default:
743802
if (parts.Length == 0) return Actions.None;
744803
//vars
@@ -780,7 +839,7 @@ private static Actions getAction(ref string line, List<EZCodeObject> objects)
780839
}
781840
return Actions.None;
782841
}
783-
struct EZCodeObject
842+
class EZCodeObject
784843
{
785844
public enum EZType
786845
{
@@ -925,39 +984,73 @@ private static string ColonResponse(string value)
925984
switch (ind[2].ToLower())
926985
{
927986
case "today":
928-
return "datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0).strftime(\"%m/%d/%Y %I:%M:%S %p\")";
987+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
988+
return "datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0).strftime(\"%m/%d/%Y %I:%M:%S %p\")";
989+
else return "";
929990
case "now":
930-
return "datetime.datetime.now().strftime(\"%m/%d/%Y %I:%M:%S %p\")";
991+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
992+
return "datetime.datetime.now().strftime(\"%m/%d/%Y %I:%M:%S %p\")";
993+
else return "";
931994
case "utcnow":
932-
return "datetime.datetime.utcnow().strftime(\"%m/%d/%Y %I:%M:%S %p\")";
995+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
996+
return "datetime.datetime.utcnow().strftime(\"%m/%d/%Y %I:%M:%S %p\")";
997+
else return "";
933998
case "unixepoch":
934-
return "1/1/1970 12:00:00 AM";
999+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1000+
return "1/1/1970 12:00:00 AM";
1001+
else return "";
9351002
case "hour24":
936-
return "datetime.datetime.now().strftime(\"%H\")";
1003+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1004+
return "datetime.datetime.now().strftime(\"%H\")";
1005+
else return "";
9371006
case "hour":
938-
return "datetime.datetime.now().strftime(\"%I %p\")";
1007+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1008+
return "datetime.datetime.now().strftime(\"%I %p\")";
1009+
else return "";
9391010
case "minute":
940-
return "datetime.datetime.now().strftime(\"%M\")";
1011+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1012+
return "datetime.datetime.now().strftime(\"%M\")";
1013+
else return "";
9411014
case "second":
942-
return "datetime.datetime.now().strftime(\"%S\")";
1015+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1016+
return "datetime.datetime.now().strftime(\"%S\")";
1017+
else return "";
9431018
case "milisecond":
944-
return "datetime.datetime.now().strftime(\"%f\")[:-3]";
1019+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1020+
return "datetime.datetime.now().strftime(\"%f\")[:-3]";
1021+
else return "";
9451022
case "nownormal":
946-
return "datetime.datetime.now().strftime(\"%m/%d/%Y %I:%M %p\")";
1023+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1024+
return "datetime.datetime.now().strftime(\"%m/%d/%Y %I:%M %p\")";
1025+
else return "";
9471026
case "now24":
948-
return "datetime.datetime.now().strftime(\"%m/%d/%Y %H:%M\")";
1027+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1028+
return "datetime.datetime.now().strftime(\"%m/%d/%Y %H:%M\")";
1029+
else return "";
9491030
case "date":
950-
return "datetime.datetime.now().strftime(\"%m/%d/%Y\")";
1031+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1032+
return "datetime.datetime.now().strftime(\"%m/%d/%Y\")";
1033+
else return "";
9511034
case "datedash":
952-
return "datetime.datetime.now().strftime(\"%m-%d-%Y\")";
1035+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1036+
return "datetime.datetime.now().strftime(\"%m-%d-%Y\")";
1037+
else return "";
9531038
case "month":
954-
return "datetime.datetime.now().strftime(\"%B\")";
1039+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1040+
return "datetime.datetime.now().strftime(\"%B\")";
1041+
else return "";
9551042
case "monthnumber":
956-
return "datetime.datetime.now().strftime(\"%m\")";
1043+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1044+
return "datetime.datetime.now().strftime(\"%m\")";
1045+
else return "";
9571046
case "day":
958-
return "datetime.datetime.now().strftime(\"%d\")";
1047+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1048+
return "datetime.datetime.now().strftime(\"%d\")";
1049+
else return "";
9591050
case "dayname":
960-
return "datetime.datetime.now().strftime(\"%A\")";
1051+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1052+
return "datetime.datetime.now().strftime(\"%A\")";
1053+
else return "";
9611054
}
9621055
break;
9631056
case "random":
@@ -968,46 +1061,70 @@ private static string ColonResponse(string value)
9681061
bool more = value.Contains("system:random:");
9691062
if (more)
9701063
{
971-
return $"random.randint({ind[2]}, {ind[3]})";
1064+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1065+
return $"random.randint({ind[2]}, {ind[3]})";
1066+
else return "";
9721067
}
9731068
else
9741069
{
9751070
Converter.ImportAndDefine.Sys = true;
976-
return "random.randint(0, sys.maximize)";
1071+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1072+
return "random.randint(0, sys.maximize)";
1073+
else return "";
9771074
}
9781075
case "single":
979-
return "random.random()";
1076+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1077+
return "random.random()";
1078+
else return "";
9801079
}
9811080
case "isnumber":
9821081
Converter.ImportAndDefine.IsNumber = true;
983-
return $"is_number({Converter.returnValue(ind, 2, false)})";
1082+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1083+
return $"is_number({Converter.returnValue(ind, 2, false)})";
1084+
else return "";
9841085
case "machine":
9851086
switch (ind[2].ToLower())
9861087
{
9871088
case "machinename":
9881089
Converter.ImportAndDefine.Socket = true;
989-
return "socket.gethostname()";
1090+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1091+
return "socket.gethostname()";
1092+
else return "";
9901093
case "osversion":
9911094
Converter.ImportAndDefine.Platform = true;
992-
return "platform.platform()";
1095+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1096+
return "platform.platform()";
1097+
else return "";
9931098
case "is64bitoperatingsystem":
9941099
Converter.ImportAndDefine.Is64Bit = true;
995-
return "is_windows_64but()";
1100+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1101+
return "is_windows_64but()";
1102+
else return "";
9961103
case "username":
9971104
Converter.ImportAndDefine.OS = true;
998-
return "os.getlogin()";
1105+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1106+
return "os.getlogin()";
1107+
else return "";
9991108
case "workingset":
1000-
return "\"CAN_NOT_GET_WORKING_SET\"";
1109+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1110+
return "\"CAN_NOT_GET_WORKING_SET\"";
1111+
else return "";
10011112
case "hasshutdownstarted":
1002-
return "\"CAN_NOT_GET_HAS_SHUT_DOWN_STARTED\"";
1113+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1114+
return "\"CAN_NOT_GET_HAS_SHUT_DOWN_STARTED\"";
1115+
else return "";
10031116
}
10041117
break;
10051118
case "currentfile":
10061119
Converter.ImportAndDefine.OS = true;
1007-
return "os.path.dirname(os.path.realpath(__file__))";
1120+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1121+
return "os.path.dirname(os.path.realpath(__file__))";
1122+
else return "";
10081123
case "currentplaydirectory":
10091124
Converter.ImportAndDefine.OS = true;
1010-
return "os.getcwd()";
1125+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1126+
return "os.getcwd()";
1127+
else return "";
10111128
case "space":
10121129
return "\" \"";
10131130
case "newline":
@@ -1023,11 +1140,17 @@ private static string ColonResponse(string value)
10231140
switch (ind[1].ToLower())
10241141
{
10251142
case "length":
1026-
return ind[0] + ".__len__()";
1143+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1144+
return ind[0] + ".__len__()";
1145+
else return "";
10271146
case "contains":
1028-
return ind[0] + ".__contains__()";
1147+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1148+
return ind[0] + ".__contains__()";
1149+
else return "";
10291150
default:
1030-
return $"{ind[0]}[{ind[1]}]";
1151+
if (Converter.Language == Converter.ProgrammingLanguage.Python)
1152+
return $"{ind[0]}[{ind[1]}]";
1153+
else return "";
10311154

10321155

10331156

0 commit comments

Comments
 (0)