public override object Parse(MathCell ownerMathCell) { ownerMathCell.ResetReferences(); string formula = ownerMathCell.Formula; if (AddressesHandler.HasAnyAddress(formula)) { List <string> formulaReferences = AddressesHandler.GetAddresses(formula); for (int i = 0; i < formulaReferences.Count; ++i) { string reference = formulaReferences[i]; MathCell refCell = MathCellsProvider.GetInstance.GetMathCell(reference); if (!ownerMathCell.References.Contains(refCell)) { ownerMathCell.InsertReference(refCell); } if (!refCell.Dependents.Contains(ownerMathCell)) { refCell.InsertDependent(ownerMathCell); } } } return(base.Parse(ownerMathCell)); }
private static string RemoveRedundantZeroes(MathCell ownerMathCell) { string formula = ownerMathCell.Formula; List <string> oldAdr = AddressesHandler.GetAddresses(formula); const string pattern = @"0+(?=(0|[1-9]))"; for (int i = 0; i < oldAdr.Count; ++i) { string updStr = Regex.Replace(oldAdr[i], pattern, "", RegexOptions.Compiled); formula = ownerMathCell.Formula.Replace(oldAdr[i], updStr); } return(formula); }
private static bool HasInvalidIndexing(string formula) { List <string> formulaAddresses = AddressesHandler.GetAddresses(formula); GridForm ownerGrid = MathCellsProvider.GetInstance.OwnerGrid; foreach (string address in formulaAddresses) { var(rowIndex, colIndex) = AddressesHandler.GetIndexes(address); if (rowIndex >= ownerGrid.dataGridView.RowCount || colIndex >= ownerGrid.dataGridView.ColumnCount) { return(true); } } return(false); }
public override object Parse(MathCell ownerMathCell) { // Removes spaces for proper parsing string formula = ownerMathCell.Formula = RemoveSpaces(ownerMathCell.Formula); List <string> refAddresses = AddressesHandler.GetAddresses(formula); if (refAddresses.Count != 0 && formula.First() != '=') { ownerMathCell.ResetReferences(); throw new InvalidReferenceFormat(); } if (string.IsNullOrEmpty(formula) || formula.First() != '=') { ownerMathCell.ResetReferences(); return(formula); } return(base.Parse(ownerMathCell)); // Proceed }
public void ShiftReferences() { List <string> updatedReferences = AddressesHandler.GetAddresses(References); List <string> oldReferences = AddressesHandler.GetAddresses(Formula); try { for (int i = 0; i < oldReferences.Count; ++i) { if (oldReferences[i] != "RC" && oldReferences[i] != updatedReferences[i]) { Formula = Formula.Replace(oldReferences[i], updatedReferences[i]); } } } catch (ArgumentException ae) { MessageBox.Show(ae.Message, "Error in references shifting", MessageBoxButtons.OK, MessageBoxIcon.Error); } }