protected override void WriteProxy(IndentedTextWriter writer) { if (writer == null) throw new ArgumentNullException("writer"); writer.WriteLine("// This JavaScript was automatically generated by"); writer.Write("// "); writer.WriteLine(GetType().AssemblyQualifiedName); writer.Write("// on "); DateTime now = DateTime.Now; TimeZone timeZone = TimeZone.CurrentTimeZone; writer.Write(now.ToLongDateString()); writer.Write(" at "); writer.Write(now.ToLongTimeString()); writer.Write(" ("); writer.Write(timeZone.IsDaylightSavingTime(now) ? timeZone.DaylightName : timeZone.StandardName); writer.WriteLine(")"); writer.WriteLine(); string version = Mask.EmptyString(Request.QueryString["v"], "1").Trim(); Uri url = new Uri(Request.Url.GetLeftPart(UriPartial.Path)); if (version.Equals("2")) Version2(Service.GetClass(), url, writer); else Version1(Service.GetClass(), url, writer); }
private void WriteClass(IndentedTextWriter writer, ServiceClass serviceClass) { writer.Write("class "); writer.Write(serviceClass.Name); writer.WriteLine(":"); writer.Indent++; writer.Write(_docQuotes); writer.Indent--; if (serviceClass.Description.Length > 0) { writer.WriteLine(serviceClass.Description); writer.WriteLine(); } writer.WriteLine("This Python class was automatically generated by"); writer.WriteLine(GetType().AssemblyQualifiedName); DateTime now = DateTime.Now; writer.Write("on "); writer.Write(now.ToLongDateString()); writer.Write(" at "); writer.Write(now.ToLongTimeString()); writer.Write(" ("); TimeZone timeZone = TimeZone.CurrentTimeZone; writer.Write(timeZone.IsDaylightSavingTime(now) ? timeZone.DaylightName : timeZone.StandardName); writer.WriteLine(")"); writer.WriteLine(_docQuotes); writer.Indent++; Uri url = new Uri(Request.Url.GetLeftPart(UriPartial.Path)); writer.WriteLine(@"def __init__(self, url = '" + url + @"'): self.url = url self.__id = 0"); writer.WriteLine(); }
protected override void ProcessRequest() { if (!Modified()) { Response.StatusCode = 304; return; } if (HasLastModifiedTime) { Response.Cache.SetCacheability(HttpCacheability.Public); // // Unfortunately, HttpCachePolicy.SetLastModified fails // if the last modified time passed has a precision higher // than second so we need to crop anything less than a // second before setting it. // long lastModifiedTicks = LastModifiedTime.Ticks; Response.Cache.SetLastModified(new DateTime(lastModifiedTicks - (lastModifiedTicks % TimeSpan.TicksPerSecond))); } IRpcServiceDescriptor service = TargetService.GetDescriptor(); Response.ContentType = "text/javascript"; Response.AppendHeader("Content-Disposition", "attachment; filename=" + service.Name + "Proxy.js"); IndentedTextWriter writer = new IndentedTextWriter(Response.Output); writer.WriteLine("// This JavaScript was automatically generated by"); writer.Write("// "); writer.WriteLine(GetType().AssemblyQualifiedName); writer.Write("// on "); DateTime now = DateTime.Now; TimeZone timeZone = TimeZone.CurrentTimeZone; writer.Write(now.ToLongDateString()); writer.Write(" at "); writer.Write(now.ToLongTimeString()); writer.Write(" ("); writer.Write(timeZone.IsDaylightSavingTime(now) ? timeZone.DaylightName : timeZone.StandardName); writer.WriteLine(")"); writer.WriteLine(); string version = Mask.EmptyString(Request.QueryString["v"], "1").Trim(); if (version.Equals("2")) Version2(service, new Uri(Request.Url.GetLeftPart(UriPartial.Path)), writer); else Version1(service, new Uri(Request.Url.GetLeftPart(UriPartial.Path)), writer); }
protected override void ProcessRequest() { if (!Modified()) { Response.StatusCode = 304; return; } if (HasLastModifiedTime) { Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetLastModified(LastModifiedTime); } JsonRpcServiceClass service = Service.GetClass(); Response.ContentType = "text/javascript"; Response.AppendHeader("Content-Disposition", "attachment; filename=" + service.Name + "Proxy.js"); IndentedTextWriter writer = new IndentedTextWriter(Response.Output); writer.WriteLine("// This JavaScript was automatically generated by"); writer.Write("// "); writer.WriteLine(GetType().AssemblyQualifiedName); writer.Write("// on "); DateTime now = DateTime.Now; TimeZone timeZone = TimeZone.CurrentTimeZone; writer.Write(now.ToLongDateString()); writer.Write(" at "); writer.Write(now.ToLongTimeString()); writer.Write(" ("); writer.Write(timeZone.IsDaylightSavingTime(now) ? timeZone.DaylightName : timeZone.StandardName); writer.WriteLine(")"); writer.WriteLine(); string version = Mask.EmptyString(Request.QueryString["v"], "1").Trim(); if (version.Equals("2")) Version2(service, new Uri(Request.Url.GetLeftPart(UriPartial.Path)), writer); else Version1(service, new Uri(Request.Url.GetLeftPart(UriPartial.Path)), writer); }
private void WriteMethod(IndentedTextWriter writer, Method method) { string clientMethodName = method.Name.Replace(".", "_"); writer.Write("def "); writer.Write(clientMethodName); writer.Write("(self"); Parameter[] parameters = method.GetParameters(); foreach (Parameter parameter in parameters) { writer.Write(", "); writer.Write(parameter.Name); } writer.WriteLine("):"); writer.Indent++; if (method.Description.Length > 0) { // TODO: What to do if /* and */ appear in the summary? writer.Write(_docQuotes); writer.WriteLine(method.Description); writer.WriteLine(_docQuotes); } writer.Write("return self.__call('"); writer.Write(method.Name); writer.Write("', ("); foreach (Parameter parameter in parameters) { writer.Write(parameter.Name); writer.Write(", "); } writer.WriteLine("))"); writer.Indent--; writer.WriteLine(); }
/// <summary> /// Outputs the C++ code for the given node to the <see cref="TextWriter"/> instance. /// </summary> /// <param name="writer">The writer to output to.</param> /// <param name="node">The node to output.</param> /// <param name="logger">The logger.</param> private void WriteNode(IndentedTextWriter writer, BaseNode node, ILogger logger) { Contract.Requires(writer != null); Contract.Requires(node != null); var custom = GetCustomCodeGeneratorForNode(node); if (custom != null) { if (custom.WriteNode(writer, node, WriteNode, logger)) { return; } } node = TransformNode(node); var simpleType = GetTypeDefinition(node, logger); if (simpleType != null) { //$"{type} {node.Name}; //0x{node.Offset.ToInt32():X04} {node.Comment}".Trim(); writer.Write(simpleType); writer.Write(" "); writer.Write(node.Name); writer.Write("; //0x"); writer.Write($"{node.Offset:X04}"); if (!string.IsNullOrEmpty(node.Comment)) { writer.Write(" "); writer.Write(node.Comment); } writer.WriteLine(); } else if (node is BaseWrapperNode) { writer.Write(ResolveWrappedType(node, false, logger)); writer.Write("; //0x"); writer.Write($"{node.Offset:X04}"); if (!string.IsNullOrEmpty(node.Comment)) { writer.Write(" "); writer.Write(node.Comment); } writer.WriteLine(); } else if (node is UnionNode unionNode) { writer.Write("union //0x"); writer.Write($"{node.Offset:X04}"); if (!string.IsNullOrEmpty(node.Comment)) { writer.Write(" "); writer.Write(node.Comment); } writer.WriteLine(); writer.WriteLine("{"); writer.Indent++; WriteNodes(writer, unionNode.Nodes, logger); writer.Indent--; writer.WriteLine("};"); } else { logger.Log(LogLevel.Error, $"Skipping node with unhandled type: {node.GetType()}"); } }
internal override void ToFlashAsm(IndentedTextWriter w) { w.Write(FloatValue); }
protected void Write(char value) { _Writer.Write(value); }
/// <summary> /// The decompiler generates a literal (expression) on an expression. /// </summary> /// <param name="output">The output.</param> /// <param name="expression">The expression.</param> /// <param name="newLine">Indicates whether the expressions of the branch start on a new line.</param> /// <returns>Returns true if code was generated.</returns> private bool GenerateExpression(IndentedTextWriter output, ScriptExpression expression, bool newLine) { ScriptValueType type = _opcodes.GetTypeInfo(expression.ReturnType); ScriptValueType actualType = type; // Check if a typecast is occurring if (expression.Opcode != 0xFFFF) { actualType = _opcodes.GetTypeInfo(expression.Opcode); // Simply write the string for quoted expressions. if (actualType.Quoted) { // Don't quote the keyword none. if (expression.Value.IsNull || expression.StringValue == "none") { output.Write("none"); } else { output.Write("\"{0}\"", ScriptStringHelpers.Escape(expression.StringValue)); } return(false); } } uint value = GetValue(expression, actualType); byte[] val = BitConverter.GetBytes(value); string text; switch (actualType.Name) { case "void": text = ""; break; case "ai_command_script": case "script": short index = BitConverter.ToInt16(val, 0); text = _scripts.Scripts[index].Name; break; case "boolean": text = BitConverter.ToBoolean(val, 0) ? "true" : "false"; break; case "short": text = BitConverter.ToInt16(val, 0).ToString(); break; case "long": // Signed integer int signed = (int)value; text = signed.ToString(); break; case "real": float fl = BitConverter.ToSingle(val, 0); text = fl.ToString("0.0#######", CultureInfo.InvariantCulture); break; case "ai_line": text = expression.StringValue == "" ? "\"\"" : expression.StringValue; break; case "unit_seat_mapping": text = expression.Value.IsNull ? "none" : expression.StringValue; break; default: if (expression.Value.IsNull) { text = "none"; } else if (actualType.IsEnum) { string enumValue = actualType.GetEnumValue(value); if (enumValue != null) { text = enumValue; } else { throw new NotImplementedException("Unknown Enum Value."); } } else { //throw new NotImplementedException($"Unhandled Return Type: \"{actualType.Name}\"."); text = expression.StringValue; } break; } output.Write(text); HandleNewLine(output, newLine); return(false); }
/// <summary> /// The decompiler follows a branch based on a datum index and generates code. Also handles most of the text formatting. /// </summary> /// <param name="output">The output.</param> /// <param name="root">The datumn index to follow.</param> /// <param name="newLine">Indicates whether the expressions of the branch start on a new line.</param> /// <param name="type">The type of the branch.</param> private void FollowRootIndex(IndentedTextWriter output, DatumIndex root, bool newLine, BranchType type) { ScriptExpression exp = _scripts.Expressions.FindExpression(root); int index = 0; // iterate through the branch. while (exp != null) { int startIndent = output.Indent; bool endOfExpression = exp.NextExpression is null; bool endOfInlineMultiline = false; // Remove the last expression in cond calls, which were added by the compiler. if (type == BranchType.Cond && endOfExpression && exp.Type == ScriptExpressionType.Expression && exp.LineNumber == 0) { return; } // if: indent the condition if it is a multiline expression. else if (type == BranchType.If && index == 1 && IsMultilineExpression(exp)) { output.WriteLine(); output.Indent++; } // if: indent after the condition. else if (type == BranchType.If && index == 2) { output.WriteLine(); output.Indent++; } // begin, and, or (multiline): indent after the function name. else if (type == BranchType.Multiline && index == 1) { output.WriteLine(); output.Indent++; } // cond: indent after the condition. else if (type == BranchType.Cond && index == 2) { output.WriteLine(); output.Indent++; } // make begin, or and if calls always start on a new line. else if (type == BranchType.Call && IsMultilineExpression(exp)) { output.WriteLine(); output.Indent++; endOfInlineMultiline = true; } // write code. HandleExpression(output, exp, newLine); // insert space between the parameters of calls and script references. if ((type == BranchType.Call || type == BranchType.If) && !endOfExpression && !newLine) { output.Write(" "); } // handle the line break after inline multiline expressions and reset the indent. if (endOfInlineMultiline && !endOfExpression) { output.WriteLine(); output.Indent = startIndent; } // handle the line break after if statements which end on a multiline expression. else if (type == BranchType.If && IsMultilineExpression(exp) && endOfExpression) { output.WriteLine(); } // If a regular call ends on a multiline call, insert a line break and reset the indent. Mostly applies to sleep_until in combination with or. else if (type == BranchType.Call && IsMultilineExpression(exp) && endOfExpression) { output.WriteLine(); output.Indent = startIndent; } index++; exp = exp.NextExpression; } }
public void Append(string text) { writer.Write(text); }
public SourceBuilder Write(string?value = null) { _indentedWriter.Write(value); return(this); }
public void Dump(IndentedTextWriter w) { w.Write("DefineFont: "); w.WriteLine(); }
public void WriteProxy(ServiceClass service, IndentedTextWriter writer, HttpRequest request) { ValidationUtils.ArgumentNotNull(writer, "writer"); writer.WriteLine("// This JavaScript was automatically generated by"); writer.Write("// "); writer.WriteLine(GetType().AssemblyQualifiedName); writer.Write("// on "); DateTime now = DateTime.Now; TimeZone timeZone = TimeZone.CurrentTimeZone; writer.Write(now.ToLongDateString()); writer.Write(" at "); writer.Write(now.ToLongTimeString()); writer.Write(" ("); writer.Write(timeZone.IsDaylightSavingTime(now) ? timeZone.DaylightName : timeZone.StandardName); writer.WriteLine(")"); writer.WriteLine(); Uri url = request.Url; Debug.Assert(service != null); Debug.Assert(url != null); Debug.Assert(!url.IsFile); Debug.Assert(writer != null); writer.WriteLine("// Default Proxy"); writer.WriteLine(); writer.Write("function "); writer.Write(service.Name); writer.WriteLine("(url)"); writer.WriteLine("{"); writer.Indent++; ICollection methods = service.GetMethods(); string[] methodNames = new string[methods.Count]; int i = 0; foreach (Method method in methods) { methodNames[i++] = method.Name; writer.Write("this[\""); writer.Write(method.Name); writer.Write("\"] = function("); Parameter[] parameters = method.GetParameters(); foreach (Parameter parameter in parameters) { writer.Write(parameter.Name); writer.Write(", "); } writer.WriteLine("callback)"); writer.WriteLine("{"); writer.Indent++; writer.Write("return call(\""); writer.Write(method.Name); writer.Write("\", ["); foreach (Parameter parameter in parameters) { if (parameter.Position > 0) { writer.Write(','); } writer.Write(' '); writer.Write(parameter.Name); } writer.WriteLine(" ], callback);"); writer.Indent--; writer.WriteLine("}"); writer.WriteLine(); } writer.Write("var url = typeof(url) === 'string' ? url : '"); writer.Write(url); writer.WriteLine("';"); writer.WriteLine(@"var self = this; var nextId = 0; var credentials; this['setCredentials'] = function(userid, password) { this.credentials = Base64.encode(userid + ':' + password); } this['clearCredentials'] = function() { var request = { id : nextId++, method : 'clearCredentials', params : [] }; this.credentials = null; callSync('clearCredentials', request); } function call(method, params, callback) { var request = { id : nextId++, method : method, params : params, credentials:self.credentials }; return callback == null ? callSync(method, request) : callAsync(method, request, callback); } function callSync(method, request) { var http = newHTTP(); http.open('POST', url, false, self.httpUserName, self.httpPassword); setupHeaders(http, method); http.send(JSON.stringify(request)); if (http.status != 200) throw { message : http.status + ' ' + http.statusText, toString : function() { return message; } }; var response = JSON.parse(http.responseText); if (response.error != null) throw response.error; return response.result; } function callAsync(method, request, callback) { var http = newHTTP(); http.open('POST', url, true, self.httpUserName, self.httpPassword); setupHeaders(http, method); http.onreadystatechange = function() { http_onreadystatechange(http, callback); } http.send(JSON.stringify(request)); return request.id; } function setupHeaders(http, method) { http.setRequestHeader('Content-Type', 'text/plain; charset=utf-8'); http.setRequestHeader('X-JSON-RPC', method); } function http_onreadystatechange(sender, callback) { if (sender.readyState == /* complete */ 4) { var response = sender.status == 200 ? JSON.parse(sender.responseText) : {}; response.xmlHTTP = sender; callback(response); } } function newHTTP() { if (typeof(window) != 'undefined' && window.XMLHttpRequest) return new XMLHttpRequest(); /* IE7, Safari 1.2, Mozilla 1.0/Firefox, and Netscape 7 */ else return new ActiveXObject('Microsoft.XMLHTTP'); /* WSH and IE 5 to IE 6 */ }"); writer.Indent--; writer.WriteLine("}"); writer.WriteLine(); writer.Write(service.Name); writer.Write(".rpcMethods = "); //JsonTextWriter jsonWriter = new JsonTextWriter(writer); //jsonWriter.WriteStringArray(methodNames); JsonWriter jsonWriter = new JsonWriter(writer); jsonWriter.WriteStringArray(methodNames); writer.WriteLine(";"); }
private void ShowComponents(IndentedTextWriter writer) { Type typeSig; Type typeRes; string kind; if (_kind == null) { // Show commands. typeSig = typeof(SignatureCommand); typeRes = typeof(ICommand); kind = "Command"; writer.WriteLine("Available commands:"); } else { kind = _kind.ToLowerInvariant(); var sigs = _env.ComponentCatalog.GetAllSignatureTypes(); typeSig = sigs.FirstOrDefault(t => ComponentCatalog.SignatureToString(t).ToLowerInvariant() == kind); if (typeSig == null) { typeSig = sigs.FirstOrDefault(t => ComponentCatalog.SignatureToString(t).StartsWithInvariantCultureIgnoreCase(kind)); if (typeSig == null) { writer.WriteLine("Couldn't find kind '{0}'", kind); ListKinds(writer); return; } } typeRes = typeof(object); writer.WriteLine("Available components for kind '{0}':", ComponentCatalog.SignatureToString(typeSig)); } var infos = _env.ComponentCatalog.GetAllDerivedClasses(typeRes, typeSig) .Where(x => !x.IsHidden) .OrderBy(x => x.LoadNames[0].ToLowerInvariant()); using (writer.Nest()) { var components = new List <Component>(); foreach (var info in infos) { _env.Assert(info.LoadNames.Count > 0); writer.Write("{0}", info.LoadNames[0]); if (!string.IsNullOrWhiteSpace(info.UserName)) { writer.Write(": {0}", info.UserName); } writer.WriteLine(); using (writer.Nest()) ShowAliases(writer, info.LoadNames); components.Add(new Component(kind, info, info.CreateArguments())); } if (components.Count > 0) { Serialize(components); } } }
public override void ToString(IndentedTextWriter writer) { writer.Write("fn {0}", Function); }
public override void ToString(IndentedTextWriter writer) { writer.Write("extern {0}", External); }
protected override void WriteProxy(IndentedTextWriter writer) { if (writer == null) throw new ArgumentNullException("writer"); writer.WriteLine("# This PowerShell script was automatically generated by"); writer.Write("# "); writer.WriteLine(GetType().AssemblyQualifiedName); writer.Write("# on "); DateTime now = DateTime.Now; TimeZone timeZone = TimeZone.CurrentTimeZone; writer.Write(now.ToLongDateString()); writer.Write(" at "); writer.Write(now.ToLongTimeString()); writer.Write(" ("); writer.Write(timeZone.IsDaylightSavingTime(now) ? timeZone.DaylightName : timeZone.StandardName); writer.WriteLine(")"); writer.WriteLine(); Uri url = new Uri(Request.Url.GetLeftPart(UriPartial.Path)); ServiceClass service = Service.GetClass(); writer.Write("function "); writer.Write(service.Name); writer.WriteLine(" {"); writer.Indent++; writer.Write("param($url = '"); writer.Write(url.ToString()); writer.WriteLine("')"); writer.WriteLine(); writer.WriteLine("$self = New-Object PSObject"); writer.WriteLine("$self | Add-Member NoteProperty url $url"); writer.WriteLine("$self | Add-Member NoteProperty id 0"); writer.WriteLine(); Method[] methods = service.GetMethods(); string[] methodNames = new string[methods.Length]; for (int i = 0; i < methods.Length; i++) { Method method = methods[i]; methodNames[i] = method.Name; if (method.Description.Length > 0) { writer.Write("# "); writer.WriteLine(Regex.Replace(method.Description, "(\r\n)|\r|\n", "$0 #", RegexOptions.None)); writer.WriteLine(); } writer.Write("$self | Add-Member ScriptMethod "); writer.Write(method.Name.Replace(".", "_")); writer.WriteLine(" {"); writer.Indent++; writer.Write("$this.jayrock_rpc('"); writer.Write(method.Name); writer.Write("', @{"); Parameter[] parameters = method.GetParameters(); foreach (Parameter parameter in parameters) { if (parameter.Position > 0) writer.Write(';'); writer.Write(' '); writer.Write(parameter.Name); writer.Write(" = $args["); writer.Write(parameter.Position.ToString(CultureInfo.InvariantCulture)); writer.Write(']'); } writer.WriteLine(" })"); writer.Indent--; writer.WriteLine("}"); writer.WriteLine(); } writer.WriteLine(); writer.WriteLine(@"$self | Add-Member ScriptMethod jayrock_rpc { $this.id++ $req = [Jayrock.Json.Conversion.JsonConvert]::ExportToString(@{ 'id' = $this.id; 'method' = $args[0]; 'params' = $args[1]}) $form = New-Object Collections.Specialized.NameValueCollection $form.Add('JSON-RPC', $req) $wc = New-Object Net.WebClient $bytes = $wc.UploadValues($this.url, $form) if ($bytes) { # TODO: Get the encoding from the charset in the Content-Type response header $rsp = [Jayrock.Json.Conversion.JsonConvert]::Import([Text.Encoding]::UTF8.GetString($bytes)) if ($rsp.error) { throw $rsp.error.message } else { $rsp.result } } } $self"); writer.Indent--; writer.WriteLine("}"); }
internal override void ToFlashAsm(IndentedTextWriter w) { w.Write("UNDEF"); }
public bool Export(Project _project, SpriteExporter _spriteExporter, SpriteImage _mainMenuBGImage) { bool success = false; try { if (!Directory.Exists(m_exportPath)) { Directory.CreateDirectory(m_exportPath); } //Text Files //Gib den SpriteImages einen unique Key und füge diesen Key beim Export für jede Benutzung einem Dictionary zu //Wenn Das Sprite scho einmal benutzt wurde, wird es trotzdem nurt einmal vermerkt. //ImageImports using (StreamWriter writer = new StreamWriter(Path.Combine(m_exportPath, "ImageImports.txt"), false)) { for (int i = 0; i < _spriteExporter.SpriteCount; ++i) { writer.WriteLine(Path.GetFileName(_spriteExporter.SpritesArray[i].Image)); } writer.Close(); } //(Button)Sprite Imports using (StreamWriter writer = new StreamWriter(Path.Combine(m_exportPath, "SpriteImports.txt"), false)) { for (int i = 0; i < _spriteExporter.ButtonSpriteCount; ++i) { writer.WriteLine(Path.GetFileName(_spriteExporter.ButtonSpritesArray[i].Image)); } writer.Close(); } //Storyboard using (IndentedTextWriter writer = new IndentedTextWriter(new StreamWriter(Path.Combine(m_exportPath, "Storyboard.txt"), false))) { m_textBuilder.ExportStory(writer, _project, _spriteExporter); writer.Close(); } //Options Datei using (StreamWriter writer = new StreamWriter(Path.Combine(m_exportPath, "options.txt"), false)) { SettingsViewModel svm = _project.ProjectSettingsViewModel; FontManagerViewModel fmvm = _project.FontManagerViewModel; writer.WriteLine($"WindowWidth: {svm.WindowWidth};"); writer.WriteLine($"WindowHeight: {svm.WindowHeight};"); writer.WriteLine($"TextBoxRed: {svm.TextBoxRed};"); writer.WriteLine($"TextBoxGreen: {svm.TextBoxGreen};"); writer.WriteLine($"TextBoxBlue: {svm.TextBoxBlue};"); writer.WriteLine($"TextBoxAlpha: {svm.TextBoxAlpha};"); writer.WriteLine($"Font: {fmvm.CurrentUsedFont.Font.Source}.ttf;"); writer.Write($"FontSize: {fmvm.FontSize};"); //Last entry has to not contain new Line or Game loading will fail writer.Close(); } //Menu Files using (IndentedTextWriter writer = new IndentedTextWriter(new StreamWriter(Path.Combine(m_exportPath, "MainMenu.txt"), false))) { m_textBuilder.ExportMainMenu(writer, _mainMenuBGImage, _spriteExporter); writer.Close(); } //SaveMenu using (IndentedTextWriter writer = new IndentedTextWriter(new StreamWriter(Path.Combine(m_exportPath, "SaveMenu.txt"), false))) { var base64EncodedBytes = Convert.FromBase64String("TWVudSB7CgoJTmFtZTogIlNhdmUgTWVudSI7CgoJQkdJbmRleDogMgoKCUl0ZW1zIHsKCQlCdXR0b24gewoJCQlUZXh0OiAiR28gQmFjayI7CgkJCUJ1dHRvbjogNjAwLCA1MDAsIDEwMCwgMjAwLCAwOwoJCQlUeXBlOiAxMTsKCQl9CgkJQnV0dG9uIHsKCQkJVGV4dDogIlRlbXAiOwoJCQlCdXR0b246IDUwLCAxNzAsIDUwLCAxMDAsIDA7CgkJCVR5cGU6IDc7CgkJfQoJCUJ1dHRvbiB7CgkJCVRleHQ6ICJUZW1wIjsKCQkJQnV0dG9uOiA1MCwgMjMwLCA1MCwgMTAwLCAwOwoJCQlUeXBlOiA3OwoJCX0KCQlCdXR0b24gewoJCQlUZXh0OiAiVGVtcCI7CgkJCUJ1dHRvbjogNTAsIDI5MCwgNTAsIDEwMCwgMDsKCQkJVHlwZTogNzsKCQl9CgoJCUJ1dHRvbiB7CgkJCVRleHQ6ICJUZW1wIjsKCQkJQnV0dG9uOiAyMDAsIDE3MCwgNTAsIDEwMCwgMDsKCQkJVHlwZTogNzsKCQl9CgkJQnV0dG9uIHsKCQkJVGV4dDogIlRlbXAiOwoJCQlCdXR0b246IDIwMCwgMjMwLCA1MCwgMTAwLCAwOwoJCQlUeXBlOiA3OwoJCX0KCQlCdXR0b24gewoJCQlUZXh0OiAiVGVtcCI7CgkJCUJ1dHRvbjogMjAwLCAyOTAsIDUwLCAxMDAsIDA7CgkJCVR5cGU6IDc7CgkJfQoJfQp9"); string exportString = Encoding.UTF8.GetString(base64EncodedBytes); writer.Write(exportString); writer.Close(); } //LoadMenu using (IndentedTextWriter writer = new IndentedTextWriter(new StreamWriter(Path.Combine(m_exportPath, "LoadMenu.txt"), false))) { var base64EncodedBytes = Convert.FromBase64String("TWVudSB7CgoJTmFtZTogIkxvYWQgTWVudSI7CgoJQkdJbmRleDogMgoKCUl0ZW1zIHsKCQlCdXR0b24gewoJCQlUZXh0OiAiR28gQmFjayI7CgkJCUJ1dHRvbjogNjAwLCA1MDAsIDEwMCwgMjAwLCAwOwoJCQlUeXBlOiAxMTsKCQl9CgkJQnV0dG9uIHsKCQkJVGV4dDogIlRlbXAiOwoJCQlCdXR0b246IDUwLCAxNzAsIDUwLCAxMDAsIDA7CgkJCVR5cGU6IDEyOwoJCX0KCQlCdXR0b24gewoJCQlUZXh0OiAiVGVtcCI7CgkJCUJ1dHRvbjogNTAsIDIzMCwgNTAsIDEwMCwgMDsKCQkJVHlwZTogMTI7CgkJfQoJCUJ1dHRvbiB7CgkJCVRleHQ6ICJUZW1wIjsKCQkJQnV0dG9uOiA1MCwgMjkwLCA1MCwgMTAwLCAwOwoJCQlUeXBlOiAxMjsKCQl9CgoJCUJ1dHRvbiB7CgkJCVRleHQ6ICJUZW1wIjsKCQkJQnV0dG9uOiAyMDAsIDE3MCwgNTAsIDEwMCwgMDsKCQkJVHlwZTogMTI7CgkJfQoJCUJ1dHRvbiB7CgkJCVRleHQ6ICJUZW1wIjsKCQkJQnV0dG9uOiAyMDAsIDIzMCwgNTAsIDEwMCwgMDsKCQkJVHlwZTogMTI7CgkJfQoJCUJ1dHRvbiB7CgkJCVRleHQ6ICJUZW1wIjsKCQkJQnV0dG9uOiAyMDAsIDI5MCwgNTAsIDEwMCwgMDsKCQkJVHlwZTogMTI7CgkJfQoJfQp9"); string exportString = Encoding.UTF8.GetString(base64EncodedBytes); writer.Write(exportString); writer.Close(); } //PauseMenu using (IndentedTextWriter writer = new IndentedTextWriter(new StreamWriter(Path.Combine(m_exportPath, "PauseMenu.txt"), false))) { var base64EncodedBytes = Convert.FromBase64String("TWVudSB7CgoJTmFtZTogIlBhdXNlIE1lbnUiOwoKCUJHSW5kZXg6IDIKCglJdGVtcyB7CgkJQnV0dG9uIHsKCQkJVGV4dDogIkJhY2sgdG8gR2FtZSI7CgkJCUJ1dHRvbjogNTAsIDUwLCAxMDAsIDIwMCwgMDsKCQkJVHlwZTogMTA7CgkJfQoJCUJ1dHRvbiB7CgkJCVRleHQ6ICJTYXZlIjsKCQkJQnV0dG9uOiA1MCwgMTEwLCA1MCwgMTAwLCAwOwoJCQlUeXBlOiAxNDsKCQl9CgkJQnV0dG9uIHsKCQkJVGV4dDogIkxvYWQiOwoJCQlCdXR0b246IDUwLCAxNzAsIDUwLCAxMDAsIDA7CgkJCVR5cGU6IDE1OwoJCX0KCQlCdXR0b24gewoJCQlUZXh0OiAiQmFjayB0byBNYWluIE1lbnUiOwoJCQlCdXR0b246IDUwLCAyMzAsIDUwLCAxMDAsIDA7CgkJCVR5cGU6IDEzOwoJCX0KCX0KfQ=="); string exportString = Encoding.UTF8.GetString(base64EncodedBytes); writer.Write(exportString); writer.Close(); } //Variables using (IndentedTextWriter writer = new IndentedTextWriter(new StreamWriter(Path.Combine(m_exportPath, "Variables.txt"), false))) { m_textBuilder.ExportVariables(writer, _project.VariableManagerViewModel); writer.Close(); } //Copy Files string filename; string destFile; //Image Files for (int i = 0; i < _spriteExporter.SpriteCount; ++i) { filename = Path.GetFileName(_spriteExporter.SpritesArray[i].Image); destFile = Path.Combine(m_exportPath, filename); File.Copy(_spriteExporter.SpritesArray[i].Image, destFile, true); } //Button Image Files for (int i = 0; i < _spriteExporter.ButtonSpriteCount; ++i) { filename = Path.GetFileName(_spriteExporter.ButtonSpritesArray[i].Image); destFile = Path.Combine(m_exportPath, filename); File.Copy(_spriteExporter.ButtonSpritesArray[i].Image, destFile, true); } //TTF Font Files string path = _project.FontManagerViewModel.CurrentUsedFont.Font.BaseUri.OriginalString; filename = _project.FontManagerViewModel.CurrentUsedFont.Font.Source; destFile = Path.Combine(m_exportPath, filename + ".ttf"); File.Copy(path, destFile, true); //bin Files path = Directory.GetCurrentDirectory() + @"\bin"; DirectoryCopy(path, m_exportPath, false); return(success = true); } catch (Exception ex) { MessageBox.Show("Export failed! " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return(success); } }
/// <summary> /// Writes scripts to the output. /// </summary> /// <param name="output">The outout.</param> /// <param name="showInfo">If set to true, writes additional information to the decompiled text.</param> /// <returns>Returns true if scripts were written to the output.</returns> private bool WriteScripts(IndentedTextWriter output, bool showInfo) { // return if the map doesn't contain scripts. if (_scripts.Scripts is null || _scripts.Scripts.Count == 0) { return(false); } WriteComment(output, "SCRIPTS"); output.WriteLine(); for (int i = 0; i < _scripts.Scripts.Count; i++) { Script scr = _scripts.Scripts[i]; // Filter out branch scripts which were generated by the compiler. var split = scr.Name.Split(new string[] { "_to_" }, StringSplitOptions.RemoveEmptyEntries); if (split.Length == 2) { if (_scripts.Scripts.Exists(s => s.Name == split[0]) && _scripts.Scripts.Exists(s => s.Name == split[split.Length - 1])) { continue; } } else if (split.Length == 3) { string firstTwo = string.Join("_to_", split, 0, 2); string lastTwo = string.Join("_to_", split, 1, 2); if ((_scripts.Scripts.Exists(s => s.Name == firstTwo) && _scripts.Scripts.Exists(s => s.Name == split[2])) || (_scripts.Scripts.Exists(s => s.Name == lastTwo) && _scripts.Scripts.Exists(s => s.Name == split[0]))) { continue; } } else if (split.Length == 4) { string firstHalf = string.Join("_to_", split, 0, 2); string secondHalf = string.Join("_to_", split, 2, 2); if (_scripts.Scripts.Exists(s => s.Name == firstHalf) && _scripts.Scripts.Exists(s => s.Name == secondHalf)) { continue; } } // Write additional information. if (showInfo) { WriteComment(output, $"Index: {i}, Expression Index: {scr.RootExpressionIndex.Index.ToString()}"); } // Write script declaration. output.Write("(script {0} {1} {2}", _opcodes.GetScriptTypeName((ushort)scr.ExecutionType), _opcodes.GetTypeInfo((ushort)scr.ReturnType).Name, scr.Name); // Write script parameter declarations. if (scr.Parameters?.Count > 0) { output.Write(" ("); bool firstParam = true; foreach (ScriptParameter param in scr.Parameters) { if (!firstParam) { output.Write(", "); } output.Write("{1} {0}", param.Name, _opcodes.GetTypeInfo((ushort)param.Type).Name); firstParam = false; } output.WriteLine(")"); } else { output.WriteLine(); } output.Indent++; // Write code. FollowRootIndex(output, scr.RootExpressionIndex, true, BranchType.InitialBegin); // Close parenthesis output.Indent = 0; output.WriteLine(")"); output.WriteLine(); } return(true); }
private static void Version1(ServiceClass service, Uri url, IndentedTextWriter writer) { Debug.Assert(service != null); Debug.Assert(url != null); Debug.Assert(!url.IsFile); Debug.Assert(writer != null); writer.Write("function "); writer.Write(service.Name); writer.WriteLine("(url)"); writer.WriteLine("{"); writer.Indent++; writer.WriteLine("var self = this;"); Method[] methods = service.GetMethods(); string[] methodNames = new string[methods.Length]; bool[] idempotents = new bool[methods.Length]; for (int i = 0; i < methods.Length; i++) { methodNames[i] = methods[i].Name; idempotents[i] = methods[i].Idempotent; } writer.Write("var m = "); JsonConvert.Export(methodNames, writer); writer.WriteLine(';'); writer.Write("var idems = "); JsonConvert.Export(idempotents, writer); writer.WriteLine(';'); writer.WriteLine(); for (int i = 0; i < methods.Length; i++) { Method method = methods[i]; string index = i.ToString(CultureInfo.InvariantCulture); if (method.Description.Length > 0) { // TODO: What to do if summary breaks over several lines? writer.Write("// "); writer.WriteLine(method.Description); writer.WriteLine(); } writer.Write("this[m["); writer.Write(index); writer.Write("]] = function /* "); writer.Write(method.Name); writer.Write(" */ ("); Parameter[] parameters = method.GetParameters(); foreach (Parameter parameter in parameters) { writer.Write(parameter.Name); writer.Write(", "); } writer.WriteLine("callback)"); writer.WriteLine("{"); writer.Indent++; writer.Write("if (self.kwargs) return rpc(new Call("); writer.Write(index); writer.Write(", {"); foreach (Parameter parameter in parameters) { if (parameter.Position > 0) { writer.Write(','); } writer.Write(' '); writer.Write(parameter.Name); writer.Write(": "); writer.Write(parameter.Name); } writer.WriteLine(" }, callback));"); writer.Write("return rpc(new Call("); writer.Write(index); writer.Write(", ["); foreach (Parameter parameter in parameters) { if (parameter.Position > 0) { writer.Write(','); } writer.Write(' '); writer.Write(parameter.Name); } writer.WriteLine(" ], callback));"); writer.Indent--; writer.WriteLine("}"); writer.WriteLine(); } writer.Write("var url = typeof(url) === 'string' ? url : '"); writer.Write(url.AbsolutePath); writer.WriteLine("';"); writer.WriteLine(@"var nextId = 0; function Call(method, params, callback) { this.url = url; this.callback = callback; this.proxy = self; this.idempotent = idems[method]; this.request = { id : ++nextId, method : m[method], params : params }; } function rpc(call) { return self.channel != null && typeof(self.channel.rpc) === 'function' ? self.channel.rpc(call) : call; } this.kwargs = false; this.channel = new JayrockChannel(); function JayrockChannel() { this.rpc = function(call) { var async = typeof(call.callback) === 'function'; var xhr = newXHR(); xhr.open('POST', call.url, async, this.httpUserName, this.httpPassword); xhr.setRequestHeader('Content-Type', this.contentType || 'application/json; charset=utf-8'); xhr.setRequestHeader('X-JSON-RPC', call.request.method); if (async) xhr.onreadystatechange = function() { xhr_onreadystatechange(xhr, call.callback); } xhr.send(JSON.stringify(call.request)); call.handler = xhr; if (async) return call; if (xhr.status != 200) throw new Error(xhr.status + ' ' + xhr.statusText); var response = JSON.parse(xhr.responseText); if (response.error != null) throw response.error; return response.result; } function xhr_onreadystatechange(sender, callback) { if (sender.readyState == /* complete */ 4) { try { sender.onreadystatechange = null; // Avoid IE7 leak (bug #12964) } catch (e) { /* IE 6/Mobile throws for onreadystatechange = null */ } var response = sender.status == 200 ? JSON.parse(sender.responseText) : {}; callback(response, sender); } } function newXHR() { if (typeof(window) !== 'undefined' && window.XMLHttpRequest) return new XMLHttpRequest(); /* IE7, Safari 1.2, Mozilla 1.0/Firefox, and Netscape 7 */ else return new ActiveXObject('Microsoft.XMLHTTP'); /* WSH and IE 5 to IE 6 */ } }"); writer.Indent--; writer.WriteLine("}"); writer.WriteLine(); writer.Write(service.Name); writer.Write(".rpcMethods = "); JsonConvert.Export(methodNames, writer); writer.WriteLine(";"); }
/// <summary> /// The decompiler generates a script parameter reference based on an expression. /// </summary> /// <param name="output">The output.</param> /// <param name="expression">The parameter reference expression.</param> /// <param name="newLine">Indicates whether the expressions of the branch start on a new line.</param> /// <returns>Returns true if code was generated.</returns> private bool GenerateParameterReference(IndentedTextWriter output, ScriptExpression expression, bool newLine) { output.Write(expression.StringValue); HandleNewLine(output, newLine); return(true); }
private void Version2(ServiceClass service, Uri url, IndentedTextWriter writer) { Debug.Assert(service != null); Debug.Assert(url != null); Debug.Assert(!url.IsFile); Debug.Assert(writer != null); if (JsonRpcTrace.TraceWarning) { writer.WriteLine(@"// *** O B S O L E T E *** // // You are using version 2 of the JavaScript proxy that MAY // be obsoleted and removed in the next release. The functionality has // been integrated into the original proxy version via the channel // property on the JavaScript proxy. "); } writer.WriteLine("// Proxy version 2.0"); writer.WriteLine(); writer.Write("var "); writer.Write(service.Name); writer.Write(@" = function() { var nextId = 0; var proxy = { url : """); writer.Write(url.AbsolutePath); writer.Write(@""", rpc : {"); writer.WriteLine(); writer.Indent += 3; Method[] methods = service.GetMethods(); string[] methodNames = new string[methods.Length]; for (int i = 0; i < methods.Length; i++) { methodNames[i] = methods[i].Name; } Array.Sort(methodNames, methods); for (int i = 0; i < methods.Length; i++) { Method method = methods[i]; writer.WriteLine(); if (method.Description.Length > 0) { // TODO: What to do if /* and */ appear in the summary? writer.Write("/* "); writer.Write(method.Description); writer.WriteLine(" */"); writer.WriteLine(); } writer.Write('\"'); writer.Write(method.Name); writer.Write("\" : function("); Parameter[] parameters = method.GetParameters(); foreach (Parameter parameter in parameters) { writer.Write(parameter.Name); writer.Write(", "); } writer.WriteLine("callback) {"); writer.Indent++; writer.Write("return new Call(\""); writer.Write(method.Name); writer.Write("\", ["); foreach (Parameter parameter in parameters) { if (parameter.Position > 0) { writer.Write(','); } writer.Write(' '); writer.Write(parameter.Name); } writer.WriteLine(" ], callback);"); writer.Indent--; writer.Write("}"); if (i < (methods.Length - 1)) { writer.Write(','); } writer.WriteLine(); } writer.Indent--; writer.WriteLine(@"} } function Call(method, params, callback) { this.url = proxy.url; this.callback = callback; this.request = { id : ++nextId, method : method, params : params }; } Call.prototype.call = function(channel) { return channel(this); } return proxy; }();"); writer.Indent--; }
protected override void WriteCreateTable(CreateTableOperation createTableOperation, IndentedTextWriter writer) { NotNull(createTableOperation, "createTableOperation"); NotNull(writer, "writer"); var tableName = ParseDatabaseName(createTableOperation.Name); writer.Write("IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'"); writer.Write(tableName.Item2); writer.Write("' AND TABLE_SCHEMA = N'"); writer.Write(tableName.Item1); writer.WriteLine("')"); writer.WriteLine("BEGIN"); writer.Indent++; writer.WriteLine("CREATE TABLE " + Name(createTableOperation.Name) + " ("); writer.Indent++; var i = 0; foreach (var columnModel in createTableOperation.Columns) { Generate(columnModel, writer); if (i < createTableOperation.Columns.Count - 1) { writer.WriteLine(","); } i++; } if (createTableOperation.PrimaryKey != null) { writer.WriteLine(","); writer.Write("CONSTRAINT "); writer.Write(Quote(createTableOperation.PrimaryKey.Name)); writer.Write(" PRIMARY KEY "); if (!createTableOperation.PrimaryKey.IsClustered) { writer.Write("NONCLUSTERED "); } writer.Write("("); writer.Write(Join(createTableOperation.PrimaryKey.Columns.Select(Quote))); writer.WriteLine(")"); } else { writer.WriteLine(); } writer.Indent--; writer.WriteLine(")"); writer.Indent--; writer.WriteLine("END"); writer.WriteLine("ELSE"); writer.WriteLine("BEGIN"); writer.Indent++; foreach (var columnModel in createTableOperation.Columns) { var alterColumn = new AddColumnOperation(createTableOperation.Name, columnModel); WriteCreateColumn(alterColumn, writer); } writer.Indent--; writer.WriteLine("END"); }
// 4.2 int IExpressionVisitor <int> .VisitThis() { _Writer.Write("this"); return(0); }
public void Dump(IndentedTextWriter w) { w.Write("CSMTextSettings: "); w.WriteLine(); }
/// <exception cref="ArgumentException">ターゲット型に同じ名前のデータメンバーが 2 つ以上存在します。</exception> public void AssertIs(AssertNode node) { var targetType = node.TargetType; var actual = node.Actual; var expected = node.Expected; _logger?.Write($"{node.MemberName}: {node.TargetType?.GetFriendlyName() ?? "(null)"} = "); try { if (TryPredicateAssertIs(targetType, actual, expected, node)) { return; } // null 比較 if (targetType is null) { if (!(actual is null)) { throw new PrimitiveAssertFailedException(node, "ターゲット型は null ですが、actual は非 null です。", _message); } if (!(expected is null)) { throw new PrimitiveAssertFailedException(node, "actual は null ですが、expected は非 null です。", _message); } WriteLog(node, "actual と expected はどちらも null です。"); return; } if (targetType.IsValueType && !targetType.IsNullable()) { if (actual is null) { throw new PrimitiveAssertFailedException(node, "ターゲット型は null 非許容型ですが、actual は null です。", _message); } } if (actual is null) { if (expected is null) { WriteLog(node, "actual と expected はどちらも null です。"); return; } else { throw new PrimitiveAssertFailedException(node, "actual は null ですが、expected が非 null です。", _message); } } else { if (expected is null) { throw new PrimitiveAssertFailedException(node, "actual は非 null ですが、expected が null です。", _message); } } if (TryNumericAssertIs(targetType, actual, expected, node)) { return; } if (TryPrimitiveAssertIs(targetType, actual, expected, node)) { return; } if (TryReferenceAssertIs(targetType, actual, expected, node)) { return; } if (TryCircularReferenceAssertIs(targetType, actual, expected, node)) { return; } } catch (PrimitiveAssertFailedException) { _logger?.WriteLine(); throw; } if (_logger != null) { _logger.WriteLine("{"); _logger.Indent++; } if (TryCollectionAssertIs(targetType, actual, expected, node)) { goto EndBlock; } if (TryCompositeAssertIs(targetType, actual, expected, node)) { goto EndBlock; } EndBlock: if (_logger != null) { _logger.Indent--; _logger.WriteLine("}"); } return; }
/// <summary> /// Generate column definition. Returns <c>true</c> if the column was the primary key. /// </summary> private bool Generate(ColumnModel column, IndentedTextWriter tw, PrimaryKeyOperation primaryKeyOp) { bool isIdPk = false; tw.Write(Format.ReservedWord(column.Name)); tw.Write(" "); bool isPrimaryKey = false; if (primaryKeyOp != null) { isPrimaryKey = primaryKeyOp.Columns.Contains(column.Name); } if (isPrimaryKey) { if ((column.Type == PrimitiveTypeKind.Int16) || (column.Type == PrimitiveTypeKind.Int32)) { tw.Write("INTEGER"); } else { tw.Write(Format.BuildColumnType(_providerManifest, column)); } if (column.IsIdentity || column.Annotations.ContainsKey("Autoincrement")) { tw.Write(" PRIMARY KEY"); isIdPk = true; if (column.Annotations.ContainsKey("Autoincrement")) { tw.Write(" AUTOINCREMENT"); } } } else { tw.Write(Format.BuildColumnType(_providerManifest, column)); if ((column.IsNullable != null) && !column.IsNullable.Value) { tw.Write(" NOT NULL"); } if (column.DefaultValue != null) { tw.Write(" DEFAULT "); tw.Write(Generate((dynamic)column.DefaultValue)); } else if (!string.IsNullOrWhiteSpace(column.DefaultValueSql)) { tw.Write(" DEFAULT "); tw.Write("(" + column.DefaultValueSql + ")"); } AnnotationValues uniqueAnnotation; if (column.Annotations.TryGetValue("Unique", out uniqueAnnotation)) { tw.Write(" UNIQUE" + Format.UniqueConflictText(uniqueAnnotation)); } AnnotationValues collateAnnotation; if (column.Annotations.TryGetValue("Collate", out collateAnnotation)) { tw.Write(Format.CollateFunctionText(collateAnnotation)); } } return(isIdPk); }
/// <summary> /// Outputs the C++ code for the given class to the <see cref="TextWriter"/> instance. /// </summary> /// <param name="writer">The writer to output to.</param> /// <param name="class">The class to output.</param> /// <param name="classes">The list of all available classes.</param> /// <param name="logger">The logger.</param> private void WriteClass(IndentedTextWriter writer, ClassNode @class, IEnumerable <ClassNode> classes, ILogger logger) { Contract.Requires(writer != null); Contract.Requires(@class != null); Contract.Requires(classes != null); writer.Write("class "); writer.Write(@class.Name); var skipFirstMember = false; if (@class.Nodes.FirstOrDefault() is ClassInstanceNode inheritedFromNode) { skipFirstMember = true; writer.Write(" : public "); writer.Write(inheritedFromNode.InnerNode.Name); } if (!string.IsNullOrEmpty(@class.Comment)) { writer.Write(" // "); writer.Write(@class.Comment); } writer.WriteLine(); writer.WriteLine("{"); writer.WriteLine("public:"); writer.Indent++; var nodes = @class.Nodes .Skip(skipFirstMember ? 1 : 0) .WhereNot(n => n is FunctionNode); WriteNodes(writer, nodes, logger); var vTableNodes = @class.Nodes.OfType <VirtualMethodTableNode>().ToList(); if (vTableNodes.Any()) { writer.WriteLine(); var virtualMethodNodes = vTableNodes .SelectMany(vt => vt.Nodes) .OfType <VirtualMethodNode>(); foreach (var node in virtualMethodNodes) { writer.Write("virtual void "); writer.Write(node.MethodName); writer.WriteLine("();"); } } var functionNodes = classes .SelectMany(c2 => c2.Nodes) .OfType <FunctionNode>() .Where(f => f.BelongsToClass == @class) .ToList(); if (functionNodes.Any()) { writer.WriteLine(); foreach (var node in functionNodes) { writer.Write(node.Signature); writer.WriteLine("{ }"); } } writer.Indent--; writer.Write("}; //Size: 0x"); writer.WriteLine($"{@class.MemorySize:X04}"); }
private void Version2(JsonRpcServiceClass service, Uri url, IndentedTextWriter writer) { Debug.Assert(service != null); Debug.Assert(url!= null); Debug.Assert(!url.IsFile); Debug.Assert(writer != null); writer.WriteLine("// Proxy version 2.0"); writer.WriteLine(); writer.Write("var "); writer.Write(service.Name); writer.Write(@" = function() { var nextId = 0; var proxy = { url : """); writer.Write(url); writer.Write(@""", rpc : {"); writer.WriteLine(); writer.Indent += 3; JsonRpcMethod[] methods = service.GetMethods(); string[] methodNames = new string[methods.Length]; for (int i = 0; i < methods.Length; i++) methodNames[i] = methods[i].Name; Array.Sort(methodNames, methods); for (int i = 0; i < methods.Length; i++) { JsonRpcMethod method = methods[i]; writer.WriteLine(); if (method.Description.Length > 0) { // TODO: What to do if /* and */ appear in the summary? writer.Write("/* "); writer.Write(method.Description); writer.WriteLine(" */"); writer.WriteLine(); } writer.Write('\"'); writer.Write(method.Name); writer.Write("\" : function("); JsonRpcParameter[] parameters = method.GetParameters(); foreach (JsonRpcParameter parameter in parameters) { writer.Write(parameter.Name); writer.Write(", "); } writer.WriteLine("callback) {"); writer.Indent++; writer.Write("return new Call(\""); writer.Write(method.Name); writer.Write("\", ["); foreach (JsonRpcParameter parameter in parameters) { if (parameter.Position > 0) writer.Write(','); writer.Write(' '); writer.Write(parameter.Name); } writer.WriteLine(" ], callback);"); writer.Indent--; writer.Write("}"); if (i < (methods.Length - 1)) writer.Write(','); writer.WriteLine(); } writer.Indent--; writer.WriteLine(@"} } function Call(method, params, callback) { this.url = proxy.url; this.callback = callback; this.request = { id : ++nextId, method : method, params : params }; } Call.prototype.call = function(channel) { return channel(this); } return proxy; }();"); writer.Indent--; }
public override void HandleMcpeStartGame(McpeStartGame message) { Client.EntityId = message.runtimeEntityId; Client.NetworkEntityId = message.entityIdSelf; Client.SpawnPoint = message.spawn; Client.CurrentLocation = new PlayerLocation(Client.SpawnPoint, message.rotation.X, message.rotation.X, message.rotation.Y); BlockPalette blockPalette = message.blockPalette; Client.BlockPalette = message.blockPalette; //var blockPalette = BlockFactory.BlockStates; Log.Warn($"Got position from startgame packet: {Client.CurrentLocation}"); var settings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Arrays, TypeNameHandling = TypeNameHandling.Auto, Formatting = Formatting.Indented, DefaultValueHandling = DefaultValueHandling.Include }; var fileNameItemstates = Path.GetTempPath() + "itemstates_" + Guid.NewGuid() + ".json"; File.WriteAllText(fileNameItemstates, JsonConvert.SerializeObject(message.itemstates, settings)); string fileName = Path.GetTempPath() + "MissingBlocks_" + Guid.NewGuid() + ".txt"; using (FileStream file = File.OpenWrite(fileName)) { var writer = new IndentedTextWriter(new StreamWriter(file)); Log.Warn($"BlockPalette ({blockPalette.Count}) Filename:\n{fileName}"); writer.WriteLine($"namespace MiNET.Blocks"); writer.WriteLine($"{{"); writer.Indent++; var blocks = new List <(int, string)>(); foreach (IGrouping <string, BlockStateContainer> blockstateGrouping in blockPalette.OrderBy(record => record.Name).ThenBy(record => record.Data).ThenBy(record => record.RuntimeId).GroupBy(record => record.Name)) { BlockStateContainer currentBlockState = blockstateGrouping.First(); Log.Debug($"{currentBlockState.Name}, Id={currentBlockState.Id}"); BlockStateContainer defaultBlockState = BlockFactory.GetBlockById(currentBlockState.Id, 0)?.GetGlobalState(); if (defaultBlockState == null) { defaultBlockState = blockstateGrouping.FirstOrDefault(bs => bs.Data == 0); } Log.Debug($"{currentBlockState.RuntimeId}, {currentBlockState.Name}, {currentBlockState.Data}"); Block blockById = BlockFactory.GetBlockById(currentBlockState.Id); bool existingBlock = blockById.GetType() != typeof(Block) && !blockById.IsGenerated; int id = existingBlock ? currentBlockState.Id : -1; string blockClassName = CodeName(currentBlockState.Name.Replace("minecraft:", ""), true); blocks.Add((blockById.Id, blockClassName)); writer.WriteLineNoTabs($""); writer.WriteLine($"public partial class {blockClassName} // {blockById.Id} typeof={blockById.GetType().Name}"); writer.WriteLine($"{{"); writer.Indent++; writer.WriteLine($"public override string Name => \"{currentBlockState.Name}\";"); writer.WriteLineNoTabs(""); var bits = new List <BlockStateByte>(); foreach (var state in blockstateGrouping.First().States) { var q = blockstateGrouping.SelectMany(c => c.States); // If this is on base, skip this property. We need this to implement common functionality. Type baseType = blockById.GetType().BaseType; bool propOverride = baseType != null && ("Block" != baseType.Name && baseType.GetProperty(CodeName(state.Name, true)) != null); switch (state) { case BlockStateByte blockStateByte: { var values = q.Where(s => s.Name == state.Name).Select(d => ((BlockStateByte)d).Value).Distinct().OrderBy(s => s).ToList(); byte defaultVal = ((BlockStateByte)defaultBlockState?.States.FirstOrDefault(s => s.Name.Equals(state.Name, StringComparison.OrdinalIgnoreCase)))?.Value ?? 0; if (values.Min() == 0 && values.Max() == 1) { bits.Add(blockStateByte); writer.Write($"[StateBit] "); writer.WriteLine($"public{(propOverride ? " override" : "")} bool {CodeName(state.Name, true)} {{ get; set; }} = {(defaultVal == 1 ? "true" : "false")};"); } else { writer.Write($"[StateRange({values.Min()}, {values.Max()})] "); writer.WriteLine($"public{(propOverride ? " override" : "")} byte {CodeName(state.Name, true)} {{ get; set; }} = {defaultVal};"); } break; } case BlockStateInt blockStateInt: { var values = q.Where(s => s.Name == state.Name).Select(d => ((BlockStateInt)d).Value).Distinct().OrderBy(s => s).ToList(); int defaultVal = ((BlockStateInt)defaultBlockState?.States.FirstOrDefault(s => s.Name.Equals(state.Name, StringComparison.OrdinalIgnoreCase)))?.Value ?? 0; writer.Write($"[StateRange({values.Min()}, {values.Max()})] "); writer.WriteLine($"public{(propOverride ? " override" : "")} int {CodeName(state.Name, true)} {{ get; set; }} = {defaultVal};"); break; } case BlockStateString blockStateString: { var values = q.Where(s => s.Name == state.Name).Select(d => ((BlockStateString)d).Value).Distinct().ToList(); string defaultVal = ((BlockStateString)defaultBlockState?.States.FirstOrDefault(s => s.Name.Equals(state.Name, StringComparison.OrdinalIgnoreCase)))?.Value ?? ""; if (values.Count > 1) { writer.WriteLine($"[StateEnum({string.Join(',', values.Select(v => $"\"{v}\""))})]"); } writer.WriteLine($"public{(propOverride ? " override" : "")} string {CodeName(state.Name, true)} {{ get; set; }} = \"{defaultVal}\";"); break; } default: throw new ArgumentOutOfRangeException(nameof(state)); } } // Constructor //if (id == -1 || blockById.IsGenerated) //{ // writer.WriteLine($""); // writer.WriteLine($"public {blockClassName}() : base({currentBlockState.Id})"); // writer.WriteLine($"{{"); // writer.Indent++; // writer.WriteLine($"IsGenerated = true;"); // writer.WriteLine($"SetGenerated();"); // writer.Indent--; // writer.WriteLine($"}}"); //} writer.WriteLineNoTabs($""); writer.WriteLine($"public override void SetState(List<IBlockState> states)"); writer.WriteLine($"{{"); writer.Indent++; writer.WriteLine($"foreach (var state in states)"); writer.WriteLine($"{{"); writer.Indent++; writer.WriteLine($"switch(state)"); writer.WriteLine($"{{"); writer.Indent++; foreach (var state in blockstateGrouping.First().States) { writer.WriteLine($"case {state.GetType().Name} s when s.Name == \"{state.Name}\":"); writer.Indent++; writer.WriteLine($"{CodeName(state.Name, true)} = {(bits.Contains(state) ? "Convert.ToBoolean(s.Value)" : "s.Value")};"); writer.WriteLine($"break;"); writer.Indent--; } writer.Indent--; writer.WriteLine($"}} // switch"); writer.Indent--; writer.WriteLine($"}} // foreach"); writer.Indent--; writer.WriteLine($"}} // method"); writer.WriteLineNoTabs($""); writer.WriteLine($"public override BlockStateContainer GetState()"); writer.WriteLine($"{{"); writer.Indent++; writer.WriteLine($"var record = new BlockStateContainer();"); writer.WriteLine($"record.Name = \"{blockstateGrouping.First().Name}\";"); writer.WriteLine($"record.Id = {blockstateGrouping.First().Id};"); foreach (var state in blockstateGrouping.First().States) { string propName = CodeName(state.Name, true); writer.WriteLine($"record.States.Add(new {state.GetType().Name} {{Name = \"{state.Name}\", Value = {(bits.Contains(state) ? $"Convert.ToByte({propName})" : propName)}}});"); } writer.WriteLine($"return record;"); writer.Indent--; writer.WriteLine($"}} // method"); writer.Indent--; writer.WriteLine($"}} // class"); } writer.WriteLine(); foreach (var block in blocks.OrderBy(tuple => tuple.Item1)) { int clazzId = block.Item1; Block blockById = BlockFactory.GetBlockById(clazzId); bool existingBlock = blockById.GetType() != typeof(Block) && !blockById.IsGenerated; if (existingBlock) { continue; } string clazzName = block.Item2; string baseClazz = clazzName.EndsWith("Stairs") ? "BlockStairs" : "Block"; baseClazz = clazzName.EndsWith("Slab") && !clazzName.EndsWith("DoubleSlab")? "SlabBase" : baseClazz; writer.WriteLine($"public partial class {clazzName} : {baseClazz} {{ " + $"public {clazzName}() : base({clazzId}) {{ IsGenerated = true; }} " + $"}}"); } writer.Indent--; writer.WriteLine($"}}"); // namespace //foreach (var block in blocks.OrderBy(tuple => tuple.Item1)) //{ // // 495 => new StrippedCrimsonStem(), // writer.WriteLine($"\t\t\t\t{block.Item1} => new {block.Item2}(),"); //} writer.Flush(); } LogGamerules(message.gamerules); Client.LevelInfo.LevelName = "Default"; Client.LevelInfo.Version = 19133; Client.LevelInfo.GameType = message.gamemode; //ClientUtils.SaveLevel(_level); { var packet = McpeRequestChunkRadius.CreateObject(); Client.ChunkRadius = 5; packet.chunkRadius = Client.ChunkRadius; Client.SendPacket(packet); } }
private static void Version1(JsonRpcServiceClass service, Uri url, IndentedTextWriter writer) { Debug.Assert(service != null); Debug.Assert(url!= null); Debug.Assert(!url.IsFile); Debug.Assert(writer != null); writer.WriteLine("// Proxy version 1.0"); writer.WriteLine(); writer.Write("function "); writer.Write(service.Name); writer.WriteLine("(url)"); writer.WriteLine("{"); writer.Indent++; JsonRpcMethod[] methods = service.GetMethods(); string[] methodNames = new string[methods.Length]; for (int i = 0; i < methods.Length; i++) { JsonRpcMethod method = methods[i]; methodNames[i] = method.Name; if (method.Description.Length > 0) { // TODO: What to do if /* and */ appear in the summary? writer.Write("/* "); writer.Write(method.Description); writer.WriteLine(" */"); writer.WriteLine(); } writer.Write("this[\""); writer.Write(method.Name); writer.Write("\"] = function("); JsonRpcParameter[] parameters = method.GetParameters(); foreach (JsonRpcParameter parameter in parameters) { writer.Write(parameter.Name); writer.Write(", "); } writer.WriteLine("callback)"); writer.WriteLine("{"); writer.Indent++; writer.Write("return call(\""); writer.Write(method.Name); writer.Write("\", ["); foreach (JsonRpcParameter parameter in parameters) { if (parameter.Position > 0) writer.Write(','); writer.Write(' '); writer.Write(parameter.Name); } writer.WriteLine(" ], callback);"); writer.Indent--; writer.WriteLine("}"); writer.WriteLine(); } writer.Write("var url = typeof(url) === 'string' ? url : '"); writer.Write(url); writer.WriteLine("';"); writer.WriteLine(@"var self = this; var nextId = 0; function call(method, params, callback) { var request = { id : nextId++, method : method, params : params }; return callback == null ? callSync(method, request) : callAsync(method, request, callback); } function callSync(method, request) { var http = newHTTP(); http.open('POST', url, false, self.httpUserName, self.httpPassword); setupHeaders(http, method); http.send(JSON.stringify(request)); if (http.status != 200) throw { message : http.status + ' ' + http.statusText, toString : function() { return message; } }; var response = JSON.eval(http.responseText); if (response.error != null) throw response.error; return response.result; } function callAsync(method, request, callback) { var http = newHTTP(); http.open('POST', url, true, self.httpUserName, self.httpPassword); setupHeaders(http, method); http.onreadystatechange = function() { http_onreadystatechange(http, callback); } http.send(JSON.stringify(request)); return request.id; } function setupHeaders(http, method) { http.setRequestHeader('Content-Type', 'text/plain; charset=utf-8'); http.setRequestHeader('X-JSON-RPC', method); } function http_onreadystatechange(sender, callback) { if (sender.readyState == /* complete */ 4) { var response = sender.status == 200 ? JSON.eval(sender.responseText) : {}; response.xmlHTTP = sender; callback(response); } } function newHTTP() { return typeof(ActiveXObject) === 'function' ? new ActiveXObject('Microsoft.XMLHTTP') : /* IE 5 */ new XMLHttpRequest(); /* Safari 1.2, Mozilla 1.0/Firefox, and Netscape 7 */ }"); writer.Indent--; writer.WriteLine("}"); writer.WriteLine(); writer.Write(service.Name); writer.Write(".rpcMethods = "); JsonTextWriter jsonWriter = new JsonTextWriter(writer); jsonWriter.WriteArray(methodNames); writer.WriteLine(";"); }
private void DecompileScripts(object streamManager) { DateTime startTime = DateTime.Now; ScriptTable scripts; using (IReader reader = ((IStreamManager)streamManager).OpenRead()) { scripts = _scriptFile.LoadScripts(reader); if (scripts == null) { return; } } OpcodeLookup opcodes = _buildInfo.ScriptInfo; var generator = new BlamScriptGenerator(scripts, opcodes, _endian); var code = new IndentedTextWriter(new StringWriter()); generator.WriteComment("Decompiled with Assembly", code); generator.WriteComment("", code); generator.WriteComment("Source file: " + _scriptFile.Name, code); generator.WriteComment("Start time: " + startTime, code); generator.WriteComment("", code); generator.WriteComment("Remember that all script code is property of Bungie/343 Industries.", code); generator.WriteComment("You have no rights. Play nice.", code); code.WriteLine(); int counter = 0; if (scripts.Variables != null) { generator.WriteComment("VARIABLES", code); foreach (ScriptGlobal variable in scripts.Variables) { code.Write("(variable {0} {1} ", opcodes.GetTypeInfo((ushort)variable.Type).Name, variable.Name); generator.WriteExpression(variable.ExpressionIndex, code); if (_showInfo) { code.WriteLine(")\t\t; Index: {0}, Expression Index: {1}", counter.ToString(), variable.ExpressionIndex.Index.ToString()); } else { code.WriteLine(")"); } counter++; } code.WriteLine(); counter = 0; } generator.WriteComment("GLOBALS", code); foreach (ScriptGlobal global in scripts.Globals) { code.Write("(global {0} {1} ", opcodes.GetTypeInfo((ushort)global.Type).Name, global.Name); generator.WriteExpression(global.ExpressionIndex, code); if (_showInfo) { code.WriteLine(")\t\t; Index: {0}, Expression Index: {1}", counter.ToString(), global.ExpressionIndex.Index.ToString()); } else { code.WriteLine(")"); } counter++; } code.WriteLine(); counter = 0; generator.WriteComment("SCRIPTS", code); foreach (Script script in scripts.Scripts) { if (_showInfo) { generator.WriteComment(string.Format("Index: {0}, Expression Index: {1}", counter.ToString(), script.RootExpressionIndex.Index.ToString()), code); } code.Write("(script {0} {1} ", opcodes.GetScriptTypeName((ushort)script.ExecutionType), opcodes.GetTypeInfo((ushort)script.ReturnType).Name); if (script.Parameters.Count > 0) { code.Write("({0} (", script.Name); bool firstParam = true; foreach (ScriptParameter param in script.Parameters) { if (!firstParam) { code.Write(", "); } code.Write("{1} {0}", param.Name, opcodes.GetTypeInfo((ushort)param.Type).Name); firstParam = false; } code.Write("))"); } else { code.Write(script.Name); } code.Indent++; code.WriteLine(); generator.WriteExpression(script.RootExpressionIndex, code, _buildInfo.HeaderSize == 0x1E000); code.Indent--; code.WriteLine(); code.WriteLine(")"); code.WriteLine(); counter++; } DateTime endTime = DateTime.Now; TimeSpan duration = endTime.Subtract(startTime); generator.WriteComment("Decompilation finished in ~" + duration.TotalSeconds + "s", code); Dispatcher.Invoke(new Action(delegate { txtScript.Text = code.InnerWriter.ToString(); })); }
public override void ToString(IndentedTextWriter writer) { Operand.ToString(writer); writer.Write("[{0} ...]", Start); }
//=========================================================================================== protected static void WriteType(IndentedTextWriter writer, Type type) { writer.Write(GraphicsMagickNET.GetTypeName(type)); }
private void Version2(ServiceClass service, Uri url, IndentedTextWriter writer) { Debug.Assert(service != null); Debug.Assert(url!= null); Debug.Assert(!url.IsFile); Debug.Assert(writer != null); if (JsonRpcTrace.TraceWarning) { writer.WriteLine(@"// *** O B S O L E T E *** // // You are using version 2 of the JavaScript proxy that MAY // be obsoleted and removed in the next release. The functionality has // been integrated into the original proxy version via the channel // property on the JavaScript proxy. "); } writer.WriteLine("// Proxy version 2.0"); writer.WriteLine(); writer.Write("var "); writer.Write(service.Name); writer.Write(@" = function() { var nextId = 0; var proxy = { url : """); writer.Write(url); writer.Write(@""", rpc : {"); writer.WriteLine(); writer.Indent += 3; Method[] methods = service.GetMethods(); string[] methodNames = new string[methods.Length]; for (int i = 0; i < methods.Length; i++) methodNames[i] = methods[i].Name; Array.Sort(methodNames, methods); for (int i = 0; i < methods.Length; i++) { Method method = methods[i]; writer.WriteLine(); if (method.Description.Length > 0) { // TODO: What to do if /* and */ appear in the summary? writer.Write("/* "); writer.Write(method.Description); writer.WriteLine(" */"); writer.WriteLine(); } writer.Write('\"'); writer.Write(method.Name); writer.Write("\" : function("); Parameter[] parameters = method.GetParameters(); foreach (Parameter parameter in parameters) { writer.Write(parameter.Name); writer.Write(", "); } writer.WriteLine("callback) {"); writer.Indent++; writer.Write("return new Call(\""); writer.Write(method.Name); writer.Write("\", ["); foreach (Parameter parameter in parameters) { if (parameter.Position > 0) writer.Write(','); writer.Write(' '); writer.Write(parameter.Name); } writer.WriteLine(" ], callback);"); writer.Indent--; writer.Write("}"); if (i < (methods.Length - 1)) writer.Write(','); writer.WriteLine(); } writer.Indent--; writer.WriteLine(@"} } function Call(method, params, callback) { this.url = proxy.url; this.callback = callback; this.request = { id : ++nextId, method : method, params : params }; } Call.prototype.call = function(channel) { return channel(this); } return proxy; }();"); writer.Indent--; }
public override void HandleMcpeStartGame(McpeStartGame message) { Client.EntityId = message.runtimeEntityId; Client.NetworkEntityId = message.entityIdSelf; Client.SpawnPoint = message.spawn; Client.CurrentLocation = new PlayerLocation(Client.SpawnPoint, message.rotation.X, message.rotation.X, message.rotation.Y); BlockPalette blockPalette = message.blockPalette; Client.BlockPalette = blockPalette; Log.Warn($"Got position from startgame packet: {Client.CurrentLocation}"); //var fileNameBlockstates = Path.GetTempPath() + "blockstates_" + Guid.NewGuid() + ".json"; var fileNameItemstates = Path.GetTempPath() + "itemstates_" + Guid.NewGuid() + ".json"; File.WriteAllText(fileNameItemstates, JsonConvert.SerializeObject(message.itemstates)); string fileName = Path.GetTempPath() + "MissingBlocks_" + Guid.NewGuid() + ".txt"; using (FileStream file = File.OpenWrite(fileName)) { var writer = new IndentedTextWriter(new StreamWriter(file)); Log.Warn($"Directory:\n{Path.GetTempPath()}"); Log.Warn($"Filename:\n{fileName}"); writer.WriteLine($"namespace MiNET.Blocks"); writer.WriteLine($"{{"); writer.Indent++; var blocks = new List <(int, string)>(); foreach (IGrouping <string, BlockStateContainer> blockstateGrouping in blockPalette.OrderBy(record => record.Name).ThenBy(record => record.Data).GroupBy(record => record.Name)) { var currentBlockState = blockstateGrouping.First(); var defaultBlockState = blockstateGrouping.FirstOrDefault(bs => bs.Data == 0); Log.Debug($"{currentBlockState.RuntimeId}, {currentBlockState.Name}, {currentBlockState.Data}"); Block blockById = BlockFactory.GetBlockById(currentBlockState.Id); bool existingBlock = blockById.GetType() != typeof(Block) && !blockById.IsGenerated; int id = existingBlock ? currentBlockState.Id : -1; string blockClassName = CodeName(currentBlockState.Name.Replace("minecraft:", ""), true); blocks.Add((blockById.Id, blockClassName)); writer.WriteLineNoTabs($""); writer.WriteLine($"public partial class {blockClassName} {(existingBlock ? "" : ": Block")} // {blockById.Id} typeof={blockById.GetType().Name}"); writer.WriteLine($"{{"); writer.Indent++; var bits = new List <BlockStateByte>(); foreach (var state in blockstateGrouping.First().States) { var q = blockstateGrouping.SelectMany(c => c.States); // If this is on base, skip this property. We need this to implement common functionality. Type baseType = blockById.GetType().BaseType; bool propOverride = baseType != null && ("Block" != baseType.Name && baseType.GetProperty(CodeName(state.Name, true)) != null); switch (state) { case BlockStateByte blockStateByte: { var values = q.Where(s => s.Name == state.Name).Select(d => ((BlockStateByte)d).Value).Distinct().OrderBy(s => s).ToList(); byte defaultVal = ((BlockStateByte)defaultBlockState?.States.First(s => s.Name == state.Name))?.Value ?? 0; if (values.Min() == 0 && values.Max() == 1) { bits.Add(blockStateByte); writer.Write($"[StateBit] "); writer.WriteLine($"public {(propOverride ? "override" : "")} bool {CodeName(state.Name, true)} {{ get; set; }} = {(defaultVal == 1 ? "true" : "false")};"); } else { writer.Write($"[StateRange({values.Min()}, {values.Max()})] "); writer.WriteLine($"public {(propOverride ? "override" : "")} byte {CodeName(state.Name, true)} {{ get; set; }} = {defaultVal};"); } break; } case BlockStateInt blockStateInt: { var values = q.Where(s => s.Name == state.Name).Select(d => ((BlockStateInt)d).Value).Distinct().OrderBy(s => s).ToList(); int defaultVal = ((BlockStateInt)defaultBlockState?.States.First(s => s.Name == state.Name))?.Value ?? 0; writer.Write($"[StateRange({values.Min()}, {values.Max()})] "); writer.WriteLine($"public {(propOverride ? "override" : "")} int {CodeName(state.Name, true)} {{ get; set; }} = {defaultVal};"); break; } case BlockStateString blockStateString: { var values = q.Where(s => s.Name == state.Name).Select(d => ((BlockStateString)d).Value).Distinct().ToList(); string defaultVal = ((BlockStateString)defaultBlockState?.States.First(s => s.Name == state.Name))?.Value ?? ""; if (values.Count > 1) { writer.WriteLine($"[StateEnum({string.Join(',', values.Select(v => $"\"{v}\""))})]"); } writer.WriteLine($"public {(propOverride ? "override" : "")} string {CodeName(state.Name, true)} {{ get; set; }} = \"{defaultVal}\";"); break; } default: throw new ArgumentOutOfRangeException(nameof(state)); } } if (id == -1 || blockById.IsGenerated) { writer.WriteLine($""); writer.WriteLine($"public {blockClassName}() : base({currentBlockState.Id})"); writer.WriteLine($"{{"); writer.Indent++; writer.WriteLine($"IsGenerated = true;"); writer.Indent--; writer.WriteLine($"}}"); } writer.WriteLineNoTabs($""); writer.WriteLine($"public override void SetState(List<IBlockState> states)"); writer.WriteLine($"{{"); writer.Indent++; writer.WriteLine($"foreach (var state in states)"); writer.WriteLine($"{{"); writer.Indent++; writer.WriteLine($"switch(state)"); writer.WriteLine($"{{"); writer.Indent++; foreach (var state in blockstateGrouping.First().States) { writer.WriteLine($"case {state.GetType().Name} s when s.Name == \"{state.Name}\":"); writer.Indent++; writer.WriteLine($"{CodeName(state.Name, true)} = {(bits.Contains(state) ? "Convert.ToBoolean(s.Value)" : "s.Value")};"); writer.WriteLine($"break;"); writer.Indent--; } writer.Indent--; writer.WriteLine($"}} // switch"); writer.Indent--; writer.WriteLine($"}} // foreach"); writer.Indent--; writer.WriteLine($"}} // method"); writer.WriteLineNoTabs($""); writer.WriteLine($"public override BlockStateContainer GetState()"); writer.WriteLine($"{{"); writer.Indent++; writer.WriteLine($"var record = new BlockStateContainer();"); writer.WriteLine($"record.Name = \"{blockstateGrouping.First().Name}\";"); writer.WriteLine($"record.Id = {blockstateGrouping.First().Id};"); foreach (var state in blockstateGrouping.First().States) { string propName = CodeName(state.Name, true); writer.WriteLine($"record.States.Add(new {state.GetType().Name} {{Name = \"{state.Name}\", Value = {(bits.Contains(state) ? $"Convert.ToByte({propName})" : propName)}}});"); } writer.WriteLine($"return record;"); writer.Indent--; writer.WriteLine($"}} // method"); //writer.WriteLine($""); //writer.WriteLine($"public byte GetMetadataFromState()"); //writer.WriteLine($"{{"); //writer.Indent++; //writer.WriteLine($"switch(this)"); //writer.WriteLine($"{{"); //writer.Indent++; //i = 0; //foreach (var record in message.BlockPalette.Where(b => b.Id == enumerator.Current.Id).OrderBy(b => b.Data)) //{ // //case { } b when b.ButtonPressedBit == 0 && b.FacingDirection == 0: // // return 0; // writer.Write($"case {{ }} b when true"); // string retVal = ""; // foreach (var state in record.States.OrderBy(s => s.Name).ThenBy(s => s.Value)) // { // if (state.Type == (byte) NbtTagType.Byte) // { // writer.Write($" && b.{Client.CodeName(state.Name, true)} == {state.Value}"); // } // else if (state.Type == (byte) NbtTagType.Int) // { // writer.Write($" && b.{Client.CodeName(state.Name, true)} == {state.Value}"); // } // else if (state.Type == (byte) NbtTagType.String) // { // writer.Write($" && b.{Client.CodeName(state.Name, true)} == \"{state.Value}\""); // } // } // writer.WriteLine($":"); // writer.Indent++; // writer.WriteLine($"return { i++ };"); // writer.Indent--; //} //writer.Indent--; //writer.WriteLine($"}} // switch"); //writer.WriteLine($"throw new ArithmeticException(\"Invalid state. Unable to convert state to valid metadata\");"); //writer.Indent--; //writer.WriteLine($"}} // method"); writer.Indent--; writer.WriteLine($"}} // class"); } writer.Indent--; writer.WriteLine($"}}"); foreach (var block in blocks.OrderBy(tuple => tuple.Item1)) { writer.WriteLine($"else if (blockId == {block.Item1}) block = new {block.Item2}();"); } writer.Flush(); } // Log.Debug($@" //StartGame: // entityId: {message.entityIdSelf} // runtimeEntityId: {message.runtimeEntityId} // spawn: {message.spawn} // unknown1: {message.unknown1} // dimension: {message.dimension} // generator: {message.generator} // gamemode: {message.gamemode} // difficulty: {message.difficulty} // hasAchievementsDisabled: {message.hasAchievementsDisabled} // dayCycleStopTime: {message.dayCycleStopTime} // eduMode: {message.eduMode} // rainLevel: {message.rainLevel} // lightnigLevel: {message.lightnigLevel} // enableCommands: {message.enableCommands} // isTexturepacksRequired: {message.isTexturepacksRequired} // secret: {message.levelId} // worldName: {message.worldName} //"); LogGamerules(message.gamerules); Client.LevelInfo.LevelName = "Default"; Client.LevelInfo.Version = 19133; Client.LevelInfo.GameType = message.gamemode; //ClientUtils.SaveLevel(_level); { var packet = McpeRequestChunkRadius.CreateObject(); Client.ChunkRadius = 5; packet.chunkRadius = Client.ChunkRadius; Client.SendPacket(packet); } }
private static void Version1(ServiceClass service, Uri url, IndentedTextWriter writer) { Debug.Assert(service != null); Debug.Assert(url!= null); Debug.Assert(!url.IsFile); Debug.Assert(writer != null); writer.Write("function "); writer.Write(service.Name); writer.WriteLine("(url)"); writer.WriteLine("{"); writer.Indent++; writer.WriteLine("var self = this;"); Method[] methods = service.GetMethods(); string[] methodNames = new string[methods.Length]; bool[] idempotents = new bool[methods.Length]; for (int i = 0; i < methods.Length; i++) { methodNames[i] = methods[i].Name; idempotents[i] = methods[i].Idempotent; } writer.Write("var m = "); JsonConvert.Export(methodNames, writer); writer.WriteLine(';'); writer.Write("var idems = "); JsonConvert.Export(idempotents, writer); writer.WriteLine(';'); writer.WriteLine(); for (int i = 0; i < methods.Length; i++) { Method method = methods[i]; string index = i.ToString(CultureInfo.InvariantCulture); if (method.Description.Length > 0) { // TODO: What to do if summary breaks over several lines? writer.Write("// "); writer.WriteLine(method.Description); writer.WriteLine(); } writer.Write("this[m["); writer.Write(index); writer.Write("]] = function /* "); writer.Write(method.Name); writer.Write(" */ ("); Parameter[] parameters = method.GetParameters(); foreach (Parameter parameter in parameters) { writer.Write(parameter.Name); writer.Write(", "); } writer.WriteLine("callback)"); writer.WriteLine("{"); writer.Indent++; writer.Write("if (self.kwargs) return rpc(new Call("); writer.Write(index); writer.Write(", {"); foreach (Parameter parameter in parameters) { if (parameter.Position > 0) writer.Write(','); writer.Write(' '); writer.Write(parameter.Name); writer.Write(": "); writer.Write(parameter.Name); } writer.WriteLine(" }, callback));"); writer.Write("return rpc(new Call("); writer.Write(index); writer.Write(", ["); foreach (Parameter parameter in parameters) { if (parameter.Position > 0) writer.Write(','); writer.Write(' '); writer.Write(parameter.Name); } writer.WriteLine(" ], callback));"); writer.Indent--; writer.WriteLine("}"); writer.WriteLine(); } writer.Write("var url = typeof(url) === 'string' ? url : '"); writer.Write(url); writer.WriteLine("';"); writer.WriteLine(@"var nextId = 0; function Call(method, params, callback) { this.url = url; this.callback = callback; this.proxy = self; this.idempotent = idems[method]; this.request = { id : ++nextId, method : m[method], params : params }; } function rpc(call) { return self.channel != null && typeof(self.channel.rpc) === 'function' ? self.channel.rpc(call) : call; } this.kwargs = false; this.channel = new JayrockChannel(); function JayrockChannel() { this.rpc = function(call) { var async = typeof(call.callback) === 'function'; var xhr = newXHR(); xhr.open('POST', call.url, async, this.httpUserName, this.httpPassword); xhr.setRequestHeader('Content-Type', this.contentType || 'application/json; charset=utf-8'); xhr.setRequestHeader('X-JSON-RPC', call.request.method); if (async) xhr.onreadystatechange = function() { xhr_onreadystatechange(xhr, call.callback); } xhr.send(JSON.stringify(call.request)); call.handler = xhr; if (async) return call; if (xhr.status != 200) throw new Error(xhr.status + ' ' + xhr.statusText); var response = JSON.parse(xhr.responseText); if (response.error != null) throw response.error; return response.result; } function xhr_onreadystatechange(sender, callback) { if (sender.readyState == /* complete */ 4) { try { sender.onreadystatechange = null; // Avoid IE7 leak (bug #12964) } catch (e) { /* IE 6/Mobile throws for onreadystatechange = null */ } var response = sender.status == 200 ? JSON.parse(sender.responseText) : {}; callback(response, sender); } } function newXHR() { if (typeof(window) !== 'undefined' && window.XMLHttpRequest) return new XMLHttpRequest(); /* IE7, Safari 1.2, Mozilla 1.0/Firefox, and Netscape 7 */ else return new ActiveXObject('Microsoft.XMLHTTP'); /* WSH and IE 5 to IE 6 */ } }"); writer.Indent--; writer.WriteLine("}"); writer.WriteLine(); writer.Write(service.Name); writer.Write(".rpcMethods = "); JsonConvert.Export(methodNames, writer); writer.WriteLine(";"); }
public void Dump(IndentedTextWriter w) { w.Write("LS1 "); Color.Dump(w); w.Write(" w: " + this.Width); }