public void sendContent(Alert alert, eEndDevices devices = eEndDevices.all, ePriority priority = ePriority.def) { var alertID = DBManager.alert.AddAlertProcedure(alert); var nowDate = DateTime.Now; var SendIndex = $"{nowDate.Date.Year}{nowDate.Date.Month}{nowDate.Date.Day}{nowDate.TimeOfDay.Hours}{nowDate.TimeOfDay.Minutes}{nowDate.TimeOfDay.Seconds}{nowDate.TimeOfDay.Milliseconds}{alertID}{alert.CreaterID}"; DBManager.alert.SetSendIndex(alertID, SendIndex, alert.CreaterID); var send = new ContentNode { ID = SendIndex, AlertID = alertID, Priority = priority, Receivers = new BroadcastReceivers { Distribution = eDistributionType.broadcast, Device = devices } }; if (priority != ePriority.def) { var index = contentQueue.FindIndex(el => el.Priority > send.Priority); contentQueue.Insert(index, send); } else { contentQueue.Add(send); } //СacheManager.PutAlert(alertID, alert); }
public void sendContent(Alert alert, IPAddress lower, IPAddress upper, eEndDevices devices = eEndDevices.all, ePriority priority = ePriority.def) { var alertID = DBManager.alert.AddAlertProcedure(alert); var nowDate = DateTime.Now; var SendIndex = $"{nowDate.Date.Year}{nowDate.Date.Month}{nowDate.Date.Day}{nowDate.TimeOfDay.Hours}{nowDate.TimeOfDay.Minutes}{nowDate.TimeOfDay.Seconds}{nowDate.TimeOfDay.Milliseconds}{alertID}{alert.CreaterID}"; DBManager.alert.SetSendIndex(alertID, SendIndex, alert.CreaterID); var send = new ContentNode { ID = SendIndex, AlertID = alertID, Priority = priority, Receivers = new IPRangeReceivers { Distribution = eDistributionType.ip_range, Device = devices, Range = new IPAddressRange(lower, upper) } }; //DBManager.alert.DispatchAlertUser(SendIndex, Users); if (priority != ePriority.def) { var index = contentQueue.FindIndex(el => el.Priority > send.Priority); contentQueue.Insert(index, send); } else { contentQueue.Add(send); } // СacheManager.PutAlert(alertID, alert); }
//Если повторение старого, то надо сделать поиск ИДа алерта public void sendContent(Alert alert, List <int> Users, List <int> Groups, eEndDevices devices = eEndDevices.all, ePriority priority = ePriority.def) { var alertID = DBManager.alert.AddAlertProcedure(alert); var nowDate = DateTime.Now; var SendIndex = $"{nowDate.Date.Year}{nowDate.Date.Month}{nowDate.Date.Day}{nowDate.TimeOfDay.Hours}{nowDate.TimeOfDay.Minutes}{nowDate.TimeOfDay.Seconds}{nowDate.TimeOfDay.Milliseconds}{alertID}{alert.CreaterID}"; DBManager.alert.SetSendIndex(alertID, SendIndex, alert.CreaterID); /// добавть Sender_id var send = new ContentNode { ID = SendIndex, AlertID = alertID, Priority = priority, Receivers = new NormalReceivers { Distribution = eDistributionType.normal, Device = devices, GroupList = Groups, UserList = Users } }; DBManager.alert.DispatchAlertUser(SendIndex, Users); //DBManager.alert.DispatchAlertUser(SendIndex, Groups); if (priority != ePriority.def) { var index = contentQueue.FindIndex(el => el.Priority > send.Priority); contentQueue.Insert(index, send); } else { contentQueue.Add(send); } TMP = alert; shipment(); //СacheManager.PutAlert(alertID, alert); }
/// <summary> /// Gets the (dotless, lower-cased) file extension either from the filename or the mime type, depending on the said priority. /// </summary> /// <param name="fileName"></param> /// <param name="mimeType"></param> /// <param name="priority"></param> /// <returns></returns> public string GetExtension(string fileName, string mimeType, ePriority priority) { return((priority == ePriority.FromFileName) ? (GetExtensionFromFileName(fileName) ?? GetExtensionFromMimeType(mimeType)) : (GetExtensionFromMimeType(mimeType) ?? GetExtensionFromFileName(fileName))); }
private opCode ParseExpr(opCode Acc, ePriority priority) { opCode ValueLeft = null; opCode valueRight = null; do { switch (mTokenizer.type) { case eTokenType.operator_minus: // unary minus operator mTokenizer.NextToken(); ValueLeft = ParseExpr(null, ePriority.unaryminus); ValueLeft = new opCodeUnary(eTokenType.operator_minus, ValueLeft); break; // TODO: might not be correct. Was : Exit Do case eTokenType.operator_plus: // unary minus operator mTokenizer.NextToken(); break; case eTokenType.operator_not: mTokenizer.NextToken(); ValueLeft = ParseExpr(null, ePriority.not); ValueLeft = new opCodeUnary(eTokenType.operator_not, ValueLeft); break; // TODO: might not be correct. Was : Exit Do case eTokenType.value_identifier: ParseIdentifier(ref ValueLeft); break; // TODO: might not be correct. Was : Exit Do case eTokenType.value_true: ValueLeft = new opCodeImmediate(EvalType.Boolean, true); mTokenizer.NextToken(); break; // TODO: might not be correct. Was : Exit Do case eTokenType.value_false: ValueLeft = new opCodeImmediate(EvalType.Boolean, false); mTokenizer.NextToken(); break; // TODO: might not be correct. Was : Exit Do case eTokenType.value_string: ValueLeft = new opCodeImmediate(EvalType.String, mTokenizer.value.ToString()); mTokenizer.NextToken(); break; // TODO: might not be correct. Was : Exit Do case eTokenType.value_number: try { ValueLeft = new opCodeImmediate(EvalType.Number, double.Parse(mTokenizer.value.ToString(), NumberStyles.Float, CultureInfo.InvariantCulture)); } catch (Exception) { mTokenizer.RaiseError(string.Format("Invalid number {0}", mTokenizer.value.ToString())); } mTokenizer.NextToken(); break; // TODO: might not be correct. Was : Exit Do case eTokenType.value_date: try { ValueLeft = new opCodeImmediate(EvalType.Date, mTokenizer.value.ToString()); } catch (Exception) { mTokenizer.RaiseError(string.Format("Invalid date {0}, it should be #DD/MM/YYYY hh:mm:ss#", mTokenizer.value.ToString())); } mTokenizer.NextToken(); break; // TODO: might not be correct. Was : Exit Do case eTokenType.open_parenthesis: mTokenizer.NextToken(); ValueLeft = ParseExpr(null, ePriority.none); if (mTokenizer.type == eTokenType.close_parenthesis) { // good we eat the end parenthesis and continue ... mTokenizer.NextToken(); break; // TODO: might not be correct. Was : Exit Do } else { mTokenizer.RaiseUnexpectedToken("End parenthesis not found"); } break; case eTokenType.operator_if: // first check functions List<object> parameters = new List<object>(); // parameters... mTokenizer.NextToken(); bool brackets = false; parameters = ParseParameters(ref brackets); break; // TODO: might not be correct. Was : Exit Do default: break; // TODO: might not be correct. Was : Exit Do } } while (true); if (ValueLeft == null) { mTokenizer.RaiseUnexpectedToken("No Expression found"); } ParseDot(ref ValueLeft); do { eTokenType tt; tt = mTokenizer.type; switch (tt) { case eTokenType.end_of_formula: // end of line return ValueLeft; case eTokenType.value_number: mTokenizer.RaiseUnexpectedToken("Unexpected number without previous opterator"); break; case eTokenType.operator_plus: if (priority < ePriority.plusminus) { mTokenizer.NextToken(); valueRight = ParseExpr(ValueLeft, ePriority.plusminus); ValueLeft = new opCodeBinary(mTokenizer, ValueLeft, tt, valueRight); } else { break; // TODO: might not be correct. Was : Exit Do } break; case eTokenType.operator_minus: if (priority < ePriority.plusminus) { mTokenizer.NextToken(); valueRight = ParseExpr(ValueLeft, ePriority.plusminus); ValueLeft = new opCodeBinary(mTokenizer, ValueLeft, tt, valueRight); } else { break; // TODO: might not be correct. Was : Exit Do } break; case eTokenType.operator_concat: if (priority < ePriority.concat) { mTokenizer.NextToken(); valueRight = ParseExpr(ValueLeft, ePriority.concat); ValueLeft = new opCodeBinary(mTokenizer, ValueLeft, tt, valueRight); } else { break; // TODO: might not be correct. Was : Exit Do } break; case eTokenType.operator_mul: case eTokenType.operator_div: if (priority < ePriority.muldiv) { mTokenizer.NextToken(); valueRight = ParseExpr(ValueLeft, ePriority.muldiv); ValueLeft = new opCodeBinary(mTokenizer, ValueLeft, tt, valueRight); } else { break; // TODO: might not be correct. Was : Exit Do } break; case eTokenType.operator_percent: if (priority < ePriority.percent) { mTokenizer.NextToken(); ValueLeft = new opCodeBinary(mTokenizer, ValueLeft, tt, Acc); } else { break; // TODO: might not be correct. Was : Exit Do } break; case eTokenType.operator_or: if (priority < ePriority.or) { mTokenizer.NextToken(); valueRight = ParseExpr(ValueLeft, ePriority.or); ValueLeft = new opCodeBinary(mTokenizer, ValueLeft, tt, valueRight); } else { break; // TODO: might not be correct. Was : Exit Do } break; case eTokenType.operator_and: if (priority < ePriority.and) { mTokenizer.NextToken(); valueRight = ParseExpr(ValueLeft, ePriority.and); ValueLeft = new opCodeBinary(mTokenizer, ValueLeft, tt, valueRight); } else { break; // TODO: might not be correct. Was : Exit Do } break; case eTokenType.operator_ne: case eTokenType.operator_gt: case eTokenType.operator_ge: case eTokenType.operator_eq: case eTokenType.operator_le: case eTokenType.operator_lt: if (priority < ePriority.equality) { tt = mTokenizer.type; mTokenizer.NextToken(); valueRight = ParseExpr(ValueLeft, ePriority.equality); ValueLeft = new opCodeBinary(mTokenizer, ValueLeft, tt, valueRight); } else { break; // TODO: might not be correct. Was : Exit Do } break; default: break; // TODO: might not be correct. Was : Exit Do break; } } while (true); return ValueLeft; }
public static void InitLogger() { LoggingConfiguration config = LogManager.Configuration ?? new LoggingConfiguration(); try { FileInfo logFile = new FileInfo(Config.GetFile(Config.Dir.Log, LogFileName)); if (logFile.Exists) { if (File.Exists(Config.GetFile(Config.Dir.Log, OldLogFileName))) { File.Delete(Config.GetFile(Config.Dir.Log, OldLogFileName)); } logFile.CopyTo(Config.GetFile(Config.Dir.Log, OldLogFileName)); logFile.Delete(); } } catch (Exception) { } FileTarget fileTarget = new FileTarget(); fileTarget.FileName = Config.GetFile(Config.Dir.Log, LogFileName); fileTarget.Encoding = "utf-8"; fileTarget.Layout = "${date:format=dd-MMM-yyyy HH\\:mm\\:ss} " + "${level:fixedLength=true:padding=5} " + "[${logger:fixedLength=true:padding=20:shortName=true}]: ${message} " + "${exception:format=tostring}"; config.AddTarget("myvideo-importer", fileTarget); // Get current Log Level from MediaPortal LogLevel logLevel = LogLevel.Debug; string threadPriority = "Normal"; int intLogLevel = 3; using (MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.MPSettings()) { threadPriority = xmlreader.GetValueAsString("general", "ThreadPriority", threadPriority); intLogLevel = xmlreader.GetValueAsInt("general", "loglevel", intLogLevel); } switch (intLogLevel) { case 0: logLevel = LogLevel.Error; break; case 1: logLevel = LogLevel.Warn; break; case 2: logLevel = LogLevel.Info; break; default: logLevel = LogLevel.Debug; break; } #if DEBUG logLevel = LogLevel.Debug; #endif Priority = string.IsNullOrEmpty(threadPriority) || !threadPriority.Equals("Normal", StringComparison.CurrentCulture) ? (string.IsNullOrEmpty(threadPriority) || !threadPriority.Equals("BelowNormal", StringComparison.CurrentCulture) ? ePriority.BelowNormal : ePriority.Lowest) : ePriority.Lowest; LoggingRule rule = new LoggingRule("MyVideoImporter.*", logLevel, fileTarget); config.LoggingRules.Add(rule); LogManager.Configuration = config; }
private object ParseExpr(ePriority ePriority) { object ValueLeft = null, ValueRight; LeftParse: #region LeftParse switch (_Tokenizer.TokenType) { case eTokenType.operator_minus: _Tokenizer.NextToken(); ValueLeft = ParseExpr(ePriority.UnaryMinus); if (ValueLeft.GetType() == typeof(decimal)) { ValueLeft = -(decimal)ValueLeft; } else { throw new ApplicationException("Operator Unary Minus pada nilai non numerik"); } break; case eTokenType.operator_plus: _Tokenizer.NextToken(); goto LeftParse; case eTokenType.operator_not: _Tokenizer.NextToken(); ValueLeft = ParseExpr(ePriority.Not); if (ValueLeft.GetType() == typeof(bool)) { ValueLeft = !(bool)ValueLeft; } else { throw new ApplicationException("Operator NOT pada nilai non boolean"); } break; case eTokenType.value_identifier: ValueLeft = ParseIdentifier(); break; case eTokenType.value_true: ValueLeft = true; _Tokenizer.NextToken(); break; case eTokenType.value_false: ValueLeft = false; _Tokenizer.NextToken(); break; case eTokenType.value_string: ValueLeft = _Tokenizer.Value.ToString(); _Tokenizer.NextToken(); break; case eTokenType.value_number: decimal TmpNum; if (!decimal.TryParse(_Tokenizer.Value.ToString(), NumberStyles.Number, BaseUtility.DefaultCultureInfo, out TmpNum)) { ValueLeft = decimal.Zero; } else { ValueLeft = TmpNum; } _Tokenizer.NextToken(); break; case eTokenType.value_date: DateTime TmpDate; if (!DateTime.TryParse(_Tokenizer.Value.ToString(), BaseUtility.DefaultCultureInfo, DateTimeStyles.None, out TmpDate)) { ValueLeft = DateTime.Today; } else { ValueLeft = TmpDate; } _Tokenizer.NextToken(); break; case eTokenType.open_parenthesis: _Tokenizer.NextToken(); ValueLeft = ParseExpr(ePriority.None); if (_Tokenizer.TokenType == eTokenType.close_parenthesis) { _Tokenizer.NextToken(); } else { throw new ApplicationException("Kurung Tutup tidak ditemukan !"); } break; } #endregion if (ValueLeft == null) { return(null); } RightParse: #region RightParse eTokenType tt = _Tokenizer.TokenType; switch (tt) { case eTokenType.end_of_expr: return(ValueLeft); case eTokenType.value_number: throw new ApplicationException("Bilangan diikuti Bilangan tanpa Operator"); case eTokenType.operator_plus: case eTokenType.operator_minus: if (ePriority < ePriority.PlusMinus) { _Tokenizer.NextToken(); ValueRight = ParseExpr(ePriority.PlusMinus); Type tp = ValueLeft.GetType(); if (tp == typeof(decimal)) { Type tp2 = ValueRight.GetType(); if (tp2 == typeof(decimal)) { if (tt == eTokenType.operator_plus) { ValueLeft = (decimal)ValueLeft + (decimal)ValueRight; } else { ValueLeft = (decimal)ValueLeft - (decimal)ValueRight; } goto RightParse; } else if (tp2 == typeof(DateTime)) { if (tt == eTokenType.operator_plus) { ValueLeft = ((DateTime)ValueRight).AddDays( Convert.ToDouble(ValueLeft)); } goto RightParse; } else { throw new ApplicationException( "Operator Tambah/ Kurang pada Data bukan Bilangan/ DateTime"); } } else if (tp == typeof(DateTime)) { Type tp2 = ValueRight.GetType(); if (tp2 == typeof(decimal)) { if (tt == eTokenType.operator_plus) { ValueLeft = ((DateTime)ValueLeft).AddDays( Convert.ToDouble(ValueRight)); } else { ValueLeft = ((DateTime)ValueLeft).AddDays( -Convert.ToDouble(ValueRight)); } goto RightParse; } else { throw new ApplicationException( "Operator Tambah/ Kurang pada Data bukan Bilangan/ DateTime"); } } else if (tp == typeof(string)) { ValueLeft = ValueLeft + ValueRight.ToString(); goto RightParse; } else { throw new ApplicationException( "Operator Tambah/ Kurang pada Data bukan Bilangan/ DateTime"); } } break; case eTokenType.operator_mul: case eTokenType.operator_div: if (ePriority < ePriority.MulDiv) { _Tokenizer.NextToken(); ValueRight = ParseExpr(ePriority.MulDiv); if (ValueLeft.GetType() == typeof(decimal) && ValueRight.GetType() == typeof(decimal)) { if (tt == eTokenType.operator_mul) { ValueLeft = (decimal)ValueLeft * (decimal)ValueRight; } else { ValueLeft = (decimal)ValueLeft / (decimal)ValueRight; } goto RightParse; } else { throw new ApplicationException("Operator Kali/ Bagi pada Data bukan Bilangan"); } } break; case eTokenType.operator_or: if (ePriority < ePriority.Or) { _Tokenizer.NextToken(); ValueRight = ParseExpr(ePriority.Or); if (ValueLeft.GetType() == typeof(bool) && ValueRight.GetType() == typeof(bool)) { ValueLeft = (bool)ValueLeft || (bool)ValueRight; goto RightParse; } else { throw new ApplicationException("Operator OR pada Data bukan Boolean"); } } break; case eTokenType.operator_and: if (ePriority < ePriority.And) { _Tokenizer.NextToken(); ValueRight = ParseExpr(ePriority.And); if (ValueLeft.GetType() == typeof(bool) && ValueRight.GetType() == typeof(bool)) { ValueLeft = (bool)ValueLeft && (bool)ValueRight; goto RightParse; } else { throw new ApplicationException("Operator AND pada Data bukan Boolean"); } } break; case eTokenType.operator_eq: if (ePriority < ePriority.Equality) { _Tokenizer.NextToken(); ValueRight = ParseExpr(ePriority.Equality); Type tp = ValueLeft.GetType(); if (!object.ReferenceEquals(tp, ValueRight.GetType())) { throw new ApplicationException("Membandingkan dua jenis data yang berbeda"); } if (tp == typeof(decimal)) { ValueLeft = (decimal)ValueLeft == (decimal)ValueRight; } else if (tp == typeof(string)) { ValueLeft = (string)ValueLeft == (string)ValueRight; } else if (tp == typeof(DateTime)) { ValueLeft = (DateTime)ValueLeft == (DateTime)ValueRight; } else if (tp == typeof(bool)) { ValueLeft = (bool)ValueLeft == (bool)ValueRight; } goto RightParse; } break; case eTokenType.operator_ne: if (ePriority < ePriority.Equality) { _Tokenizer.NextToken(); ValueRight = ParseExpr(ePriority.Equality); Type tp = ValueLeft.GetType(); if (!object.ReferenceEquals(tp, ValueRight.GetType())) { throw new ApplicationException("Membandingkan dua jenis data yang berbeda"); } if (tp == typeof(decimal)) { ValueLeft = (decimal)ValueLeft != (decimal)ValueRight; } else if (tp == typeof(string)) { ValueLeft = (string)ValueLeft != (string)ValueRight; } else if (tp == typeof(DateTime)) { ValueLeft = (DateTime)ValueLeft != (DateTime)ValueRight; } else if (tp == typeof(bool)) { ValueLeft = (bool)ValueLeft != (bool)ValueRight; } goto RightParse; } break; case eTokenType.operator_lt: if (ePriority < ePriority.Equality) { _Tokenizer.NextToken(); ValueRight = ParseExpr(ePriority.Equality); Type tp = ValueLeft.GetType(); if (!object.ReferenceEquals(tp, ValueRight.GetType())) { throw new ApplicationException("Membandingkan dua jenis data yang berbeda"); } if (tp == typeof(decimal)) { ValueLeft = (decimal)ValueLeft < (decimal)ValueRight; } else if (tp == typeof(string)) { ValueLeft = string.Compare((string)ValueLeft, (string)ValueRight); } else if (tp == typeof(DateTime)) { ValueLeft = (DateTime)ValueLeft < (DateTime)ValueRight; } else if (tp == typeof(bool)) { ValueLeft = !(bool)ValueLeft && (bool)ValueRight; } goto RightParse; } break; case eTokenType.operator_le: if (ePriority < ePriority.Equality) { _Tokenizer.NextToken(); ValueRight = ParseExpr(ePriority.Equality); Type tp = ValueLeft.GetType(); if (!object.ReferenceEquals(tp, ValueRight.GetType())) { throw new ApplicationException("Membandingkan dua jenis data yang berbeda"); } if (tp == typeof(decimal)) { ValueLeft = (decimal)ValueLeft <= (decimal)ValueRight; } else if (tp == typeof(string)) { ValueLeft = string.Compare((string)ValueLeft, (string)ValueRight); } else if (tp == typeof(DateTime)) { ValueLeft = (DateTime)ValueLeft <= (DateTime)ValueRight; } else if (tp == typeof(bool)) { ValueLeft = !(bool)ValueLeft && (bool)ValueRight || (bool)ValueLeft == (bool)ValueRight; } goto RightParse; } break; case eTokenType.operator_gt: if (ePriority < ePriority.Equality) { _Tokenizer.NextToken(); ValueRight = ParseExpr(ePriority.Equality); Type tp = ValueLeft.GetType(); if (!object.ReferenceEquals(tp, ValueRight.GetType())) { throw new ApplicationException("Membandingkan dua jenis data yang berbeda"); } if (tp == typeof(decimal)) { ValueLeft = (decimal)ValueLeft > (decimal)ValueRight; } else if (tp == typeof(string)) { ValueLeft = string.Compare((string)ValueLeft, (string)ValueRight); } else if (tp == typeof(DateTime)) { ValueLeft = (DateTime)ValueLeft > (DateTime)ValueRight; } else if (tp == typeof(bool)) { ValueLeft = (bool)ValueLeft && !(bool)ValueRight; } goto RightParse; } break; case eTokenType.operator_ge: if (ePriority < ePriority.Equality) { _Tokenizer.NextToken(); ValueRight = ParseExpr(ePriority.Equality); Type tp = ValueLeft.GetType(); if (!object.ReferenceEquals(tp, ValueRight.GetType())) { throw new ApplicationException("Membandingkan dua jenis data yang berbeda"); } if (tp == typeof(decimal)) { ValueLeft = (decimal)ValueLeft >= (decimal)ValueRight; } else if (tp == typeof(string)) { ValueLeft = string.Compare((string)ValueLeft, (string)ValueRight); } else if (tp == typeof(DateTime)) { ValueLeft = (DateTime)ValueLeft >= (DateTime)ValueRight; } else if (tp == typeof(bool)) { ValueLeft = (bool)ValueLeft && !(bool)ValueRight || (bool)ValueLeft == (bool)ValueRight; } goto RightParse; } break; } #endregion return(ValueLeft); }
private opCode ParseExpr(opCode Acc, ePriority priority) { opCode ValueLeft = null, valueRight = null; do { switch (mTokenizer.type) { case eTokenType.operator_minus: { // unary minus operator mTokenizer.NextToken(); ValueLeft = ParseExpr(null /* TODO Change to default(_) if this is not a reference type */, ePriority.unaryminus); ValueLeft = new opCodeUnary(eTokenType.operator_minus, ValueLeft); goto Foo; break; } case eTokenType.operator_plus: { // unary minus operator mTokenizer.NextToken(); break; } case eTokenType.operator_not: { mTokenizer.NextToken(); ValueLeft = ParseExpr(null /* TODO Change to default(_) if this is not a reference type */, ePriority.not); ValueLeft = new opCodeUnary(eTokenType.operator_not, ValueLeft); goto Foo; break; } case eTokenType.value_identifier: { ParseIdentifier(ref ValueLeft); goto Foo; break; } case eTokenType.value_true: { ValueLeft = new opCodeImmediate(EvalType.Boolean, true); mTokenizer.NextToken(); goto Foo; break; } case eTokenType.value_false: { ValueLeft = new opCodeImmediate(EvalType.Boolean, false); mTokenizer.NextToken(); goto Foo; break; } case eTokenType.value_string: { ValueLeft = new opCodeImmediate(EvalType.String, mTokenizer.value.ToString()); mTokenizer.NextToken(); goto Foo; break; } case eTokenType.value_number: { try { ValueLeft = new opCodeImmediate(EvalType.Number, double.Parse(mTokenizer.value.ToString(), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture)); } catch (Exception ex) { mTokenizer.RaiseError(string.Format("Invalid number {0}", mTokenizer.value.ToString())); } mTokenizer.NextToken(); goto Foo; break; } case eTokenType.value_date: { try { ValueLeft = new opCodeImmediate(EvalType.Date, mTokenizer.value.ToString()); } catch (Exception ex) { mTokenizer.RaiseError(string.Format("Invalid date {0}, it should be #DD/MM/YYYY hh:mm:ss#", mTokenizer.value.ToString())); } mTokenizer.NextToken(); goto Foo; break; } case eTokenType.open_parenthesis: { mTokenizer.NextToken(); ValueLeft = ParseExpr(null /* TODO Change to default(_) if this is not a reference type */, ePriority.none); if (mTokenizer.type == eTokenType.close_parenthesis) { // good we eat the end parenthesis and continue ... mTokenizer.NextToken(); goto Foo; } else { mTokenizer.RaiseUnexpectedToken("End parenthesis not found"); } break; } case eTokenType.operator_if: { // first check functions IList <iEvalTypedValue> parameters = new List <iEvalTypedValue>(); mTokenizer.NextToken(); bool p = false; parameters = ParseParameters(ref p); goto Foo; break; } default: { goto Foo; break; } } }while (true)// parameters... ; Foo: if (ValueLeft == null) { mTokenizer.RaiseUnexpectedToken("No Expression found"); } ParseDot(ref ValueLeft); do { eTokenType tt; tt = mTokenizer.type; switch (tt) { case eTokenType.end_of_formula: { // end of line return(ValueLeft); } case eTokenType.value_number: { mTokenizer.RaiseUnexpectedToken("Unexpected number without previous opterator"); break; } case eTokenType.operator_plus: { if (priority < ePriority.plusminus) { mTokenizer.NextToken(); valueRight = ParseExpr(ValueLeft, ePriority.plusminus); ValueLeft = new opCodeBinary(mTokenizer, ValueLeft, tt, valueRight); } else { goto Foo1; } break; } case eTokenType.operator_minus: { if (priority < ePriority.plusminus) { mTokenizer.NextToken(); valueRight = ParseExpr(ValueLeft, ePriority.plusminus); ValueLeft = new opCodeBinary(mTokenizer, ValueLeft, tt, valueRight); } else { goto Foo1; } break; } case eTokenType.operator_concat: { if (priority < ePriority.concat) { mTokenizer.NextToken(); valueRight = ParseExpr(ValueLeft, ePriority.concat); ValueLeft = new opCodeBinary(mTokenizer, ValueLeft, tt, valueRight); } else { goto Foo1; } break; } case eTokenType.operator_mul: case eTokenType.operator_div: { if (priority < ePriority.muldiv) { mTokenizer.NextToken(); valueRight = ParseExpr(ValueLeft, ePriority.muldiv); ValueLeft = new opCodeBinary(mTokenizer, ValueLeft, tt, valueRight); } else { goto Foo1; } break; } case eTokenType.operator_percent: { if (priority < ePriority.percent) { mTokenizer.NextToken(); ValueLeft = new opCodeBinary(mTokenizer, ValueLeft, tt, Acc); } else { goto Foo1; } break; } case eTokenType.operator_or: { if (priority < ePriority.or) { mTokenizer.NextToken(); valueRight = ParseExpr(ValueLeft, ePriority.or); ValueLeft = new opCodeBinary(mTokenizer, ValueLeft, tt, valueRight); } else { goto Foo1; } break; } case eTokenType.operator_and: { if (priority < ePriority.and) { mTokenizer.NextToken(); valueRight = ParseExpr(ValueLeft, ePriority.and); ValueLeft = new opCodeBinary(mTokenizer, ValueLeft, tt, valueRight); } else { goto Foo1; } break; } case eTokenType.operator_ne: case eTokenType.operator_gt: case eTokenType.operator_ge: case eTokenType.operator_eq: case eTokenType.operator_le: case eTokenType.operator_lt: { if (priority < ePriority.equality) { tt = mTokenizer.type; mTokenizer.NextToken(); valueRight = ParseExpr(ValueLeft, ePriority.equality); ValueLeft = new opCodeBinary(mTokenizer, ValueLeft, tt, valueRight); } else { goto Foo1; } break; } default: { goto Foo1; break; } } }while (true); Foo1: return(ValueLeft); }