bool OcType::Parse(Ochre *ochre, int phase) { // parse title name if (phase == pphTitle) { issues.clear(); sections.clear(); vars.Clear(); svars.Clear(); Uncomment(); lines = Split("\r\n;~{}"); if (lines.size()) { ParseTitle(lines.front()); lines.erase(lines.begin()); } else AddIssue("Missing agent type name", itError, 0); } // block off & parse declarations else if (phase == pphDeclarations) ParseUpToExpressions(ochre, lines); // parse expressions else if (phase == pphExpressions) ParseExpressions(ochre); return issues.size() == 0; }
nsresult nsAbQueryStringToExpression::ParseExpression ( const char** index, nsISupports** expression) { nsresult rv; if (**index != '(') return NS_ERROR_FAILURE; const char* indexBracket = *index + 1; while (*indexBracket && *indexBracket != '(' && *indexBracket != ')') indexBracket++; // Case: End of string if (*indexBracket == 0) return NS_ERROR_FAILURE; // Case: "((" or "()" if (indexBracket == *index + 1) { return NS_ERROR_FAILURE; } // Case: "(*(" else if (*indexBracket == '(') { // printf ("Case: (*(: %s\n", *index); nsCString operation; rv = ParseOperationEntry ( *index, indexBracket, getter_Copies (operation)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIAbBooleanExpression> e; rv = CreateBooleanExpression(operation.get(), getter_AddRefs(e)); NS_ENSURE_SUCCESS(rv, rv); // Case: "(*)(*)....(*))" *index = indexBracket; rv = ParseExpressions (index, e); NS_ENSURE_SUCCESS(rv, rv); NS_IF_ADDREF(*expression = e); } // Case" "(*)" else if (*indexBracket == ')') { // printf ("Case: (*): %s\n", *index); nsCOMPtr<nsIAbBooleanConditionString> conditionString; rv = ParseCondition (index, indexBracket, getter_AddRefs(conditionString)); NS_ENSURE_SUCCESS(rv, rv); NS_IF_ADDREF(*expression = conditionString); } if (**index != ')') return NS_ERROR_FAILURE; (*index)++; return NS_OK; }