From a2ec43ed3388c8bcea1de50952a3db9aa0ce29a0 Mon Sep 17 00:00:00 2001 From: BlubbFish Date: Mon, 7 May 2018 16:52:24 +0000 Subject: [PATCH] [BF] Fixing Senml [NF] Senml now has a configure option to setup the guid [NF] Zway-Bot now listen on /exit [NF] Implment searchpath for Zway-Bot (/etc/zwaybot and %appdata%/zwaybot) --- litjson/JsonWriter.cs | 874 ++++++++++++++++---------------- litjson/bin/Release/litjson.dll | Bin 50688 -> 50688 bytes 2 files changed, 433 insertions(+), 441 deletions(-) diff --git a/litjson/JsonWriter.cs b/litjson/JsonWriter.cs index 7a410b3..babe9ca 100644 --- a/litjson/JsonWriter.cs +++ b/litjson/JsonWriter.cs @@ -29,445 +29,437 @@ namespace LitJson internal class WriterContext { - public int Count; - public bool InArray; - public bool InObject; - public bool ExpectingValue; - public int Padding; - } - - public class JsonWriter - { - #region Fields - private static readonly NumberFormatInfo number_format; - - private WriterContext context; - private Stack ctx_stack; - private bool has_reached_end; - private char[] hex_seq; - private int indentation; - private int indent_value; - private StringBuilder inst_string_builder; - private bool pretty_print; - private bool validate; - private bool lower_case_properties; - private TextWriter writer; - #endregion - - - #region Properties - public int IndentValue { - get { return indent_value; } - set { - indentation = (indentation / indent_value) * value; - indent_value = value; - } - } - - public bool PrettyPrint { - get { return pretty_print; } - set { pretty_print = value; } - } - - public TextWriter TextWriter { - get { return writer; } - } - - public bool Validate { - get { return validate; } - set { validate = value; } - } - - public bool LowerCaseProperties { - get { return lower_case_properties; } - set { lower_case_properties = value; } - } - #endregion - - - #region Constructors - static JsonWriter () - { - number_format = NumberFormatInfo.InvariantInfo; - } - - public JsonWriter () - { - inst_string_builder = new StringBuilder (); - writer = new StringWriter (inst_string_builder); - - Init (); - } - - public JsonWriter (StringBuilder sb) : - this (new StringWriter (sb)) - { - } - - public JsonWriter (TextWriter writer) - { - if (writer == null) - throw new ArgumentNullException ("writer"); - - this.writer = writer; - - Init (); - } - #endregion - - - #region Private Methods - private void DoValidation (Condition cond) - { - if (! context.ExpectingValue) - context.Count++; - - if (! validate) - return; - - if (has_reached_end) - throw new JsonException ( - "A complete JSON symbol has already been written"); - - switch (cond) { - case Condition.InArray: - if (! context.InArray) - throw new JsonException ( - "Can't close an array here"); - break; - - case Condition.InObject: - if (! context.InObject || context.ExpectingValue) - throw new JsonException ( - "Can't close an object here"); - break; - - case Condition.NotAProperty: - if (context.InObject && ! context.ExpectingValue) - throw new JsonException ( - "Expected a property"); - break; - - case Condition.Property: - if (! context.InObject || context.ExpectingValue) - throw new JsonException ( - "Can't add a property here"); - break; - - case Condition.Value: - if (! context.InArray && - (! context.InObject || ! context.ExpectingValue)) - throw new JsonException ( - "Can't add a value here"); - - break; - } - } - - private void Init () - { - has_reached_end = false; - hex_seq = new char[4]; - indentation = 0; - indent_value = 4; - pretty_print = false; - validate = true; - lower_case_properties = false; - - ctx_stack = new Stack (); - context = new WriterContext (); - ctx_stack.Push (context); - } - - private static void IntToHex (int n, char[] hex) - { - int num; - - for (int i = 0; i < 4; i++) { - num = n % 16; - - if (num < 10) - hex[3 - i] = (char) ('0' + num); - else - hex[3 - i] = (char) ('A' + (num - 10)); - - n >>= 4; - } - } - - private void Indent () - { - if (pretty_print) - indentation += indent_value; - } - - - private void Put (string str) - { - if (pretty_print && ! context.ExpectingValue) - for (int i = 0; i < indentation; i++) - writer.Write (' '); - - writer.Write (str); - } - - private void PutNewline () - { - PutNewline (true); - } - - private void PutNewline (bool add_comma) - { - if (add_comma && ! context.ExpectingValue && - context.Count > 1) - writer.Write (','); - - if (pretty_print && ! context.ExpectingValue) - writer.Write (Environment.NewLine); - } - - private void PutString (string str) - { - Put (String.Empty); - - writer.Write ('"'); - - int n = str.Length; - for (int i = 0; i < n; i++) { - switch (str[i]) { - case '\n': - writer.Write ("\\n"); - continue; - - case '\r': - writer.Write ("\\r"); - continue; - - case '\t': - writer.Write ("\\t"); - continue; - - case '"': - case '\\': - writer.Write ('\\'); - writer.Write (str[i]); - continue; - - case '\f': - writer.Write ("\\f"); - continue; - - case '\b': - writer.Write ("\\b"); - continue; - } - - if ((int) str[i] >= 32 && (int) str[i] <= 126) { - writer.Write (str[i]); - continue; - } - - // Default, turn into a \uXXXX sequence - IntToHex ((int) str[i], hex_seq); - writer.Write ("\\u"); - writer.Write (hex_seq); - } - - writer.Write ('"'); - } - - private void Unindent () - { - if (pretty_print) - indentation -= indent_value; - } - #endregion - - - public override string ToString () - { - if (inst_string_builder == null) - return String.Empty; - - return inst_string_builder.ToString (); - } - - public void Reset () - { - has_reached_end = false; - - ctx_stack.Clear (); - context = new WriterContext (); - ctx_stack.Push (context); - - if (inst_string_builder != null) - inst_string_builder.Remove (0, inst_string_builder.Length); - } - - public void Write (bool boolean) - { - DoValidation (Condition.Value); - PutNewline (); - - Put (boolean ? "true" : "false"); - - context.ExpectingValue = false; - } - - public void Write (decimal number) - { - DoValidation (Condition.Value); - PutNewline (); - - Put (Convert.ToString (number, number_format)); - - context.ExpectingValue = false; - } - - public void Write (double number) - { - DoValidation (Condition.Value); - PutNewline (); - - string str = Convert.ToString (number, number_format); - Put (str); - - if (str.IndexOf ('.') == -1 && - str.IndexOf ('E') == -1) - writer.Write (".0"); - - context.ExpectingValue = false; - } - - public void Write (int number) - { - DoValidation (Condition.Value); - PutNewline (); - - Put (Convert.ToString (number, number_format)); - - context.ExpectingValue = false; - } - - public void Write (long number) - { - DoValidation (Condition.Value); - PutNewline (); - - Put (Convert.ToString (number, number_format)); - - context.ExpectingValue = false; - } - - public void Write (string str) - { - DoValidation (Condition.Value); - PutNewline (); - - if (str == null) - Put ("null"); - else - PutString (str); - - context.ExpectingValue = false; - } - - [CLSCompliant(false)] - public void Write (ulong number) - { - DoValidation (Condition.Value); - PutNewline (); - - Put (Convert.ToString (number, number_format)); - - context.ExpectingValue = false; - } - - public void WriteArrayEnd () - { - DoValidation (Condition.InArray); - PutNewline (false); - - ctx_stack.Pop (); - if (ctx_stack.Count == 1) - has_reached_end = true; - else { - context = ctx_stack.Peek (); - context.ExpectingValue = false; - } - - Unindent (); - Put ("]"); - } - - public void WriteArrayStart () - { - DoValidation (Condition.NotAProperty); - PutNewline (); - - Put ("["); - - context = new WriterContext (); - context.InArray = true; - ctx_stack.Push (context); - - Indent (); - } - - public void WriteObjectEnd () - { - DoValidation (Condition.InObject); - PutNewline (false); - - ctx_stack.Pop (); - if (ctx_stack.Count == 1) - has_reached_end = true; - else { - context = ctx_stack.Peek (); - context.ExpectingValue = false; - } - - Unindent (); - Put ("}"); - } - - public void WriteObjectStart () - { - DoValidation (Condition.NotAProperty); - PutNewline (); - - Put ("{"); - - context = new WriterContext (); - context.InObject = true; - ctx_stack.Push (context); - - Indent (); - } - - public void WritePropertyName (string property_name) - { - DoValidation (Condition.Property); - PutNewline (); - string propertyName = (property_name == null || !lower_case_properties) - ? property_name - : property_name.ToLowerInvariant(); - - PutString (propertyName); - - if (pretty_print) { - if (propertyName.Length > context.Padding) - context.Padding = propertyName.Length; - - for (int i = context.Padding - propertyName.Length; - i >= 0; i--) - writer.Write (' '); - - writer.Write (": "); - } else - writer.Write (':'); - - context.ExpectingValue = true; - } - } + public Int32 Count; + public Boolean InArray; + public Boolean InObject; + public Boolean ExpectingValue; + public Int32 Padding; + } + + public class JsonWriter { + #region Fields + private static readonly NumberFormatInfo number_format; + + private WriterContext context; + private Stack ctx_stack; + private Boolean has_reached_end; + private Char[] hex_seq; + private Int32 indentation; + private Int32 indent_value; + private StringBuilder inst_string_builder; + private Boolean pretty_print; + private Boolean validate; + private Boolean lower_case_properties; + private TextWriter writer; + #endregion + + + #region Properties + public Int32 IndentValue { + get { return this.indent_value; } + set { + this.indentation = (this.indentation / this.indent_value) * value; + this.indent_value = value; + } + } + + public Boolean PrettyPrint { + get { return this.pretty_print; } + set { this.pretty_print = value; } + } + + public TextWriter TextWriter { + get { return this.writer; } + } + + public Boolean Validate { + get { return this.validate; } + set { this.validate = value; } + } + + public Boolean LowerCaseProperties { + get { return this.lower_case_properties; } + set { this.lower_case_properties = value; } + } + #endregion + + + #region Constructors + static JsonWriter() { + number_format = NumberFormatInfo.InvariantInfo; + } + + public JsonWriter() { + this.inst_string_builder = new StringBuilder(); + this.writer = new StringWriter(this.inst_string_builder); + + Init(); + } + + public JsonWriter(StringBuilder sb) : + this(new StringWriter(sb)) { + } + + public JsonWriter(TextWriter writer) { + this.writer = writer ?? throw new ArgumentNullException("writer"); + + Init(); + } + #endregion + + + #region Private Methods + private void DoValidation(Condition cond) { + if (!this.context.ExpectingValue) { + this.context.Count++; + } + + if (!this.validate) { + return; + } + + if (this.has_reached_end) { + throw new JsonException( + "A complete JSON symbol has already been written"); + } + + switch (cond) { + case Condition.InArray: + if (!this.context.InArray) { + throw new JsonException( + "Can't close an array here"); + } + + break; + + case Condition.InObject: + if (!this.context.InObject || this.context.ExpectingValue) { + throw new JsonException( + "Can't close an object here"); + } + + break; + + case Condition.NotAProperty: + if (this.context.InObject && !this.context.ExpectingValue) { + throw new JsonException( + "Expected a property"); + } + + break; + + case Condition.Property: + if (!this.context.InObject || this.context.ExpectingValue) { + throw new JsonException( + "Can't add a property here"); + } + + break; + + case Condition.Value: + if (!this.context.InArray && + (!this.context.InObject || !this.context.ExpectingValue)) { + throw new JsonException( + "Can't add a value here"); + } + + break; + } + } + + private void Init() { + this.has_reached_end = false; + this.hex_seq = new Char[4]; + this.indentation = 0; + this.indent_value = 4; + this.pretty_print = false; + this.validate = true; + this.lower_case_properties = false; + + this.ctx_stack = new Stack(); + this.context = new WriterContext(); + this.ctx_stack.Push(this.context); + } + + private static void IntToHex(Int32 n, Char[] hex) { + Int32 num; + + for (Int32 i = 0; i < 4; i++) { + num = n % 16; + + if (num < 10) { + hex[3 - i] = (Char)('0' + num); + } else { + hex[3 - i] = (Char)('A' + (num - 10)); + } + + n >>= 4; + } + } + + private void Indent() { + if (this.pretty_print) { + this.indentation += this.indent_value; + } + } + + private void Put(String str) { + if (this.pretty_print && !this.context.ExpectingValue) { + for (Int32 i = 0; i < this.indentation; i++) { + this.writer.Write(' '); + } + } + + this.writer.Write(str); + } + + private void PutNewline() { + PutNewline(true); + } + + private void PutNewline(Boolean add_comma) { + if (add_comma && !this.context.ExpectingValue && + this.context.Count > 1) { + this.writer.Write(','); + } + + if (this.pretty_print && !this.context.ExpectingValue) { + this.writer.Write(Environment.NewLine); + } + } + + private void PutString(String str) { + Put(String.Empty); + + this.writer.Write('"'); + + Int32 n = str.Length; + for (Int32 i = 0; i < n; i++) { + switch (str[i]) { + case '\n': + this.writer.Write("\\n"); + continue; + + case '\r': + this.writer.Write("\\r"); + continue; + + case '\t': + this.writer.Write("\\t"); + continue; + + case '"': + case '\\': + this.writer.Write('\\'); + this.writer.Write(str[i]); + continue; + + case '\f': + this.writer.Write("\\f"); + continue; + + case '\b': + this.writer.Write("\\b"); + continue; + } + + if (str[i] >= 32 && str[i] <= 126) { + this.writer.Write(str[i]); + continue; + } + + // Default, turn into a \uXXXX sequence + IntToHex(str[i], this.hex_seq); + this.writer.Write("\\u"); + this.writer.Write(this.hex_seq); + } + + this.writer.Write('"'); + } + + private void Unindent() { + if (this.pretty_print) { + this.indentation -= this.indent_value; + } + } + #endregion + + + public override String ToString() { + if (this.inst_string_builder == null) { + return String.Empty; + } + return this.inst_string_builder.ToString(); + } + + public void Reset() { + this.has_reached_end = false; + + this.ctx_stack.Clear(); + this.context = new WriterContext(); + this.ctx_stack.Push(this.context); + + if (this.inst_string_builder != null) { + this.inst_string_builder.Remove(0, this.inst_string_builder.Length); + } + } + + public void Write(Boolean boolean) { + DoValidation(Condition.Value); + PutNewline(); + + Put(boolean ? "true" : "false"); + + this.context.ExpectingValue = false; + } + + public void Write(Decimal number) { + DoValidation(Condition.Value); + PutNewline(); + + Put(Convert.ToString(number, number_format)); + + this.context.ExpectingValue = false; + } + + public void Write(Double number) { + DoValidation(Condition.Value); + PutNewline(); + + String str = Convert.ToString(number, number_format); + Put(str); + + if (str.IndexOf('.') == -1 && str.IndexOf('E') == -1) { + this.writer.Write(".0"); + } + + this.context.ExpectingValue = false; + } + + public void Write(Int32 number) { + DoValidation(Condition.Value); + PutNewline(); + + Put(Convert.ToString(number, number_format)); + + this.context.ExpectingValue = false; + } + + public void Write(Int64 number) { + DoValidation(Condition.Value); + PutNewline(); + + Put(Convert.ToString(number, number_format)); + + this.context.ExpectingValue = false; + } + + public void Write(String str) { + DoValidation(Condition.Value); + PutNewline(); + + if (str == null) { + Put("null"); + } else { + PutString(str); + } + + this.context.ExpectingValue = false; + } + + // [CLSCompliant(false)] + public void Write(UInt64 number) { + DoValidation(Condition.Value); + PutNewline(); + + Put(Convert.ToString(number, number_format)); + + this.context.ExpectingValue = false; + } + + public void WriteArrayEnd() { + DoValidation(Condition.InArray); + PutNewline(false); + + this.ctx_stack.Pop(); + if (this.ctx_stack.Count == 1) { + this.has_reached_end = true; + } else { + this.context = this.ctx_stack.Peek(); + this.context.ExpectingValue = false; + } + + Unindent(); + Put("]"); + } + + public void WriteArrayStart() { + DoValidation(Condition.NotAProperty); + PutNewline(); + + Put("["); + + this.context = new WriterContext { + InArray = true + }; + this.ctx_stack.Push(this.context); + + Indent(); + } + + public void WriteObjectEnd() { + DoValidation(Condition.InObject); + PutNewline(false); + + this.ctx_stack.Pop(); + if (this.ctx_stack.Count == 1) { + this.has_reached_end = true; + } else { + this.context = this.ctx_stack.Peek(); + this.context.ExpectingValue = false; + } + + Unindent(); + Put("}"); + } + + public void WriteObjectStart() { + DoValidation(Condition.NotAProperty); + PutNewline(); + + Put("{"); + + this.context = new WriterContext { + InObject = true + }; + this.ctx_stack.Push(this.context); + + Indent(); + } + + public void WritePropertyName(String property_name) { + DoValidation(Condition.Property); + PutNewline(); + String propertyName = (property_name == null || !this.lower_case_properties) ? property_name : property_name.ToLowerInvariant(); + + PutString(propertyName); + + if (this.pretty_print) { + if (propertyName.Length > this.context.Padding) { + this.context.Padding = propertyName.Length; + } + + for (Int32 i = this.context.Padding - propertyName.Length; + i >= 0; i--) { + this.writer.Write(' '); + } + + this.writer.Write(": "); + } else { + this.writer.Write(':'); + } + + this.context.ExpectingValue = true; + } + } } diff --git a/litjson/bin/Release/litjson.dll b/litjson/bin/Release/litjson.dll index b47866c2aebfb1eb1884836cb66eb197d46efa84..0d437c1328dcf84d1135979386cea8c3ab7888a4 100644 GIT binary patch delta 17733 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