private AccessibilitySnapshot CalculateSnapshot(Line [] selectedLines = null)
        {
            selection.SelectAll();

            // TODO: calc visible char range

            var lines = selection.GetSelectedLines();

            return(CalculateSnapshot(lines, selectedLines));
        }
        public AccessibilitySnapshot GetSnapshot()
        {
            if (cache == null)
            {
                Line [] selectedLines = null;
                if (activeSelection.Active)
                {
                    selectedLines = activeSelection.GetSelectedLines();
                }

                var result = CalculateSnapshot(selectedLines);
                cache = result;
            }

            return(cache);
        }