public override Node ExitGridReferenceExpression(Production node) { var cr = new CharacterRange(); string sheetName = null; Node refNode = node.GetChildAt(node.GetChildCount() - 1); var creator = (ReferenceCreator)refNode.GetValue(0); cr.First = refNode.StartColumn - 1; cr.Length = refNode.EndColumn - refNode.StartColumn + 1; if (node.GetChildCount() == 2) { var sheetToken = (Token)node.GetChildAt(0); sheetName = sheetToken.Image.Substring(0, sheetToken.Image.Length - 1); cr.First = sheetToken.StartColumn - 1; cr.Length = refNode.EndColumn - sheetToken.StartColumn + 1; } Reference @ref = creator.CreateReference(); var info = new ReferenceParseInfo { Target = @ref, Location = cr, Properties = creator.CreateProperties(node.GetChildCount() == 1), ParseProperties = new ReferenceParseProperties { SheetName = sheetName } }; _referenceInfos.Add(info); node.AddValue(@ref); return(node); }
private void ProcessParseInfos(ReferenceParseInfo[] infos) { int len = infos.Length; _rawReferences = new Reference[len]; _referenceProperties = new ReferenceProperties[len]; for (int i = 0; i < len; i++) { ReferenceParseInfo info = infos[i]; Reference @ref = info.Target; ReferenceParseProperties props = info.ParseProperties; @ref.SetEngine(Engine); @ref.ProcessParseProperties(props, Engine); _rawReferences[i] = @ref; _referenceProperties[i] = info.Properties; } }