public override void Parse(MemoryStream ms, ParseState state) { /* eat the method byte */ ms.ReadByte(); Element stringElement = new PureStringElement(); stringElement.Parse(ms, state); MethodName = stringElement.Value; /* eat the open paren */ ms.ReadByte(); byte nextByte = Peek(ms); while (nextByte != 20) /* close paren */ { stringElement.Parse(ms, state); var paramName = stringElement.Value; /* eat the "as" */ ms.ReadByte(); stringElement.Parse(ms, state); var paramType = stringElement.Value; Params.Add(new Parameter() { Name = paramName, Type = paramType }); nextByte = Peek(ms); if (nextByte == 3) { /* eat the comma */ ms.ReadByte(); nextByte = Peek(ms); } } /* eat the close paren */ ms.ReadByte(); if (Peek(ms) == 57) { /* has a return value */ /* eat the "Returns" */ ms.ReadByte(); nextByte = Peek(ms); while (nextByte != 21) /* semicolon */ { stringElement.Parse(ms, state); ReturnType += stringElement.Value + " "; nextByte = Peek(ms); } ReturnType = ReturnType.Trim(); } /* eat the semicolon */ ms.ReadByte(); }
public override void Parse(MemoryStream ms, ParseState state) { /* eat the opening Function byte */ ms.ReadByte(); /* function name */ var stringElement = new PureStringElement(); stringElement.Parse(ms, state); MethodName = stringElement.Value; byte nextByte = Peek(ms); if (nextByte == 11) { /* function has parameters */ /* eat open parens */ ms.ReadByte(); nextByte = Peek(ms); while (nextByte != 20) /* close paren */ { stringElement.Parse(ms, state); var paramName = stringElement.Value; /* eat the "as" */ ms.ReadByte(); stringElement.Parse(ms, state); var paramType = stringElement.Value; Params.Add(new Parameter() { Name = paramName, Type = paramType }); nextByte = Peek(ms); if (nextByte == 3) /* comma */ { ms.ReadByte(); nextByte = Peek(ms); } } /* eat close parens */ ms.ReadByte(); } /* eat the newline */ ms.ReadByte(); while (nextByte != 55) /* end function */ { Element nextElement = Element.GetNextElement(ms, state, IndentLevel,true); Body.Add(nextElement); nextByte = Peek(ms); } /* eat end-function */ ms.ReadByte(); /* eat the semicolon */ ms.ReadByte(); }
public override void Parse(MemoryStream ms, ParseState state) { /* eat comment marker */ byte commentType = (byte) ms.ReadByte(); if (commentType == 36) { Type = CommentType.SLASH_STAR; } else if (commentType == 78) { //TODO: make a global string writer to use instead of each element making its own string builder Type = CommentType.SLASH_STAR_SAME_LINE; } else if (commentType == 85) { Type = CommentType.ANGLE_STAR; } else if (commentType == 109) { Type = CommentType.SLASH_PLUS; } if (Type == CommentType.SLASH_PLUS) { ms.Seek(-1, SeekOrigin.Current); PureStringElement commentText = new PureStringElement(); commentText.Parse(ms, state); this.Value = "/+ " + commentText.Value + " +/"; } else { byte[] bShort = new byte[2]; bShort[0] = (byte)ms.ReadByte(); bShort[1] = (byte)ms.ReadByte(); int commentLength = BitConverter.ToInt16(bShort, 0); byte[] commentData = new byte[commentLength]; ms.Read(commentData, 0, commentLength); string s = Encoding.Unicode.GetString(commentData); s = s.Replace("\r\n", "\n"); // CRLF to LF s = s.Replace("\n", "\r\n"); // LF to CRLF this.Value = s; } }
public override void Parse(MemoryStream ms, ParseState state) { /* eat the Property byte */ byte variableType = (byte)ms.ReadByte(); byte nextByte = Peek(ms); Element stringElement = new PureStringElement(); while (nextByte != 10) { stringElement.Parse(ms, state); VariableType += stringElement.Value + " "; nextByte = Peek(ms); } VariableType = VariableType.Trim(); while (nextByte != 21) /* semicolon */ { if (nextByte == 95) { HasGet = true; ms.ReadByte(); } else if (nextByte == 73) { HasSet = true; ms.ReadByte(); } else { Declaration.Add(GetNextElement(ms, state, 0)); } nextByte = Peek(ms); } /* eat the semicolon */ ms.ReadByte(); }
public override void Parse(MemoryStream ms, ParseState state) { /* eat the method byte */ ms.ReadByte(); /* eat the 65 byte ? */ ms.ReadByte(); Element stringElement = new PureStringElement(); stringElement.Parse(ms, state); MethodName = stringElement.Value; if (MethodName == "createObject") { //Debugger.Break(); } /* eat new line */ Element.GetNextElement(ms, state, IndentLevel, false); while (Peek(ms) != 100) { state.AlternateBreak = 100; Element nextElement = Element.GetNextElement(ms, state, IndentLevel,true); Body.Add(nextElement); if (Peek(ms) == 21) { ms.ReadByte(); } } /* eat the end method */ ms.ReadByte(); /* eat the semicolon */ ms.ReadByte(); }
public override void Parse(MemoryStream ms, ParseState state) { Element stringElement = new PureStringElement(); stringElement.Parse(ms, state); Value = "\"" + stringElement.Value.Replace("\"","\"\"") + "\""; }
public override void Parse(MemoryStream ms, ParseState state) { Element stringElement = new PureStringElement(); /* eat the class byte */ ms.ReadByte(); state.InClassDefn = true; stringElement.Parse(ms, state); ClassName = stringElement.Value; byte nextByte = Peek(ms); if (nextByte == 114) /* implements */ { /* eat implements byte */ ms.ReadByte(); do { if (Peek(ms) == 87) { Implements += Element.GetNextElement(ms, state, 0).Value; } Implements += Element.GetNextElement(ms, state, 0).Value; } while (Peek(ms) == 87); } while (nextByte != 91 && nextByte != 97 && nextByte != 115) { Element nextElement = Element.GetNextElement(ms, state,IndentLevel); Public.Add(nextElement); nextByte = Peek(ms); } if (nextByte == 115) /* has protected section */ { /* eat protected byte */ ms.ReadByte(); while (nextByte != 91 && nextByte != 97) { Element nextElement = Element.GetNextElement(ms, state, IndentLevel); Protected.Add(nextElement); nextByte = Peek(ms); } } if (nextByte == 97) /* has private section */ { /* eat private byte */ ms.ReadByte(); while (nextByte != 91) { Element nextElement = Element.GetNextElement(ms, state, IndentLevel); Private.Add(nextElement); nextByte = Peek(ms); } } /* eat the end-class */ ms.ReadByte(); state.InClassDefn = false; /* eat the semicolon */ ms.ReadByte(); /* class defn has been parsed, now for the body */ while (Peek(ms) != 7) { Element nextElement = Element.GetNextElement(ms, state, IndentLevel - 1); Body.Add(nextElement); } nextByte = Peek(ms); /* handle parse options */ if (state.Options.AlphabetizeMethodDeclarations) { List<MethodDeclarationElement> methods = new List<MethodDeclarationElement>(); List<int> indexes = new List<int>(); /* process Public */ for (var x = 0; x < Public.Count; x++) { if (Public[x] is MethodDeclarationElement) { methods.Add((MethodDeclarationElement)Public[x]); indexes.Add(x); } } methods = methods.OrderBy(p => p.MethodName).ToList<MethodDeclarationElement>(); for (var x = 0; x < indexes.Count; x++) { Public[indexes[x]] = methods[x]; } methods.Clear(); indexes.Clear(); /* process Protected */ for (var x = 0; x < Protected.Count; x++) { if (Protected[x] is MethodDeclarationElement) { methods.Add((MethodDeclarationElement)Protected[x]); indexes.Add(x); } } methods = methods.OrderBy(p => p.MethodName).ToList<MethodDeclarationElement>(); for (var x = 0; x < indexes.Count; x++) { Protected[indexes[x]] = methods[x]; } methods.Clear(); indexes.Clear(); /* process Private */ for (var x = 0; x < Private.Count; x++) { if (Private[x] is MethodDeclarationElement) { methods.Add((MethodDeclarationElement)Private[x]); indexes.Add(x); } } methods = methods.OrderBy(p => p.MethodName).ToList<MethodDeclarationElement>(); for (var x = 0; x < indexes.Count; x++) { Private[indexes[x]] = methods[x]; } methods.Clear(); indexes.Clear(); } if (state.Options.MatchMethodDeclarationOrder) { /* get ordered list of all declares */ List<MethodDeclarationElement> declares = new List<MethodDeclarationElement>(); foreach(var e in Public.Concat(Protected).Concat(Private).ToList()) { if (e is MethodDeclarationElement) { declares.Add((MethodDeclarationElement)e); } } /* search body for all methods */ List<MethodElement> methods = new List<MethodElement>(); List<int> methodIndexes = new List<int>(); for (var x = 0; x < Body.Count; x++) { if (Body[x] is MethodElement) { methods.Add((MethodElement)Body[x]); methodIndexes.Add(x); } } for (var x = 0; x < declares.Count; x++) { MethodElement currMethod = methods.Where(m => m.MethodName == declares[x].MethodName).First(); Body[methodIndexes[x]] = currMethod; } } if (state.Options.PairGetSets) { List<GetterElement> getters = new List<GetterElement>(); List<SetterElement> setters = new List<SetterElement>(); List<int> indexes = new List<int>(); for(var x = 0; x < Body.Count; x++) { if (Body[x] is GetterElement) { getters.Add((GetterElement)Body[x]); indexes.Add(x); } if (Body[x] is SetterElement) { setters.Add((SetterElement)Body[x]); indexes.Add(x); } } List<Tuple<GetterElement, SetterElement>> pairs = new List<Tuple<GetterElement, SetterElement>>(); foreach (var g in getters) { var s = setters.Where(p => p.PropertyName == g.PropertyName).FirstOrDefault(); if (s != null) { pairs.Add(new Tuple<GetterElement, SetterElement>(g, s)); } } /* remove paired items from other lists */ foreach (var t in pairs) { getters.Remove(t.Item1); setters.Remove(t.Item2); } var y = 0; for (var x = 0; x < pairs.Count; x+=2) { Body[indexes[x]] = pairs[y].Item1; Body[indexes[x + 1]] = pairs[y++].Item2; } /* add leftover getters */ for (var x = pairs.Count; x < getters.Count; x++) { Body[indexes[x]] = getters[x]; } /* add leftover setters */ for (var x = pairs.Count + getters.Count; x < setters.Count; x++) { Body[indexes[x]] = setters[x]; } } }