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);
        }
Exemple #2
0
        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;
            }
        }