private static bool ParseJObjectOperationTokenExpression(string query, out IJObjectTokenExpression expression) { expression = null; //only worth checking if string length > 3 (ie 1=1) if (query.Length <= 2) { return(false); } for (var i = 0; i < query.Length - 1; i++) { if (Comparators.Contains(query.Substring(i, 2))) //check current and next char { { expression = new JObjectOperationTokenExpression(query.Substring(0, i), query.Substring(i, 2), query.Substring(i + 2)); return(true); } } if (Comparators.Contains(query.Substring(i, 1))) //check current and next char { { expression = new JObjectOperationTokenExpression(query.Substring(0, i), query.Substring(i, 1), query.Substring(i + 1)); return(true); } } } return(false); }
private static bool ParseJObjectLogicalOperationTokenExpression(string query, out IJObjectTokenExpression expression) { expression = null; //need to on finding a bracket keep going until we find the end bracket then set that as a value logic //the value logic can then be used and evaluated in the same way var bracketCount = 0; var inArrayAction = 0; //split & | operators for (var i = 0; i < query.Length; i++) { var charValue = query[i]; //handle brackets to ignore nested &| bracketCount += charValue == '(' ? 1 : 0; bracketCount -= charValue == ')' ? 1 : 0; inArrayAction += charValue == '[' ? 1 : 0; inArrayAction -= charValue == ']' ? 1 : 0; //if its not a logic operator outside of brackets carry on if (!Operators.Contains(charValue) || bracketCount != 0 || inArrayAction != 0) { continue; } var l = query[new Range(0, i)]; var o = charValue.ToString(); var r = query[new Range(i + 1, query.Length)]; { expression = new JObjectOperationTokenExpression(l, o, r); return(true); } } return(false); }