private void SendMessage(FoldingStates state, FoldingPositionInfo folding)
        {
            var areaBeforeFolding = new TextRange();
            var areaAfterFolding  = new TextRange();

            if (state == FoldingStates.FOLDED)
            {
                areaBeforeFolding.StartPosition = folding.Position;
                areaBeforeFolding.EndPosition   = foldingPositions.First(pair => Equals(pair.Key, folding)).Value.Position;
                areaAfterFolding.StartPosition  = folding.Position;
                areaAfterFolding.EndPosition    = new TextPosition(column: folding.Position.Column + FoldingAlgorithm.GetCollapsibleRepresentation().Length, line: folding.Position.Line);
            }
            else
            {
                areaAfterFolding.StartPosition  = folding.Position;
                areaAfterFolding.EndPosition    = foldingPositions.First(pair => Equals(pair.Key, folding)).Value.Position;
                areaBeforeFolding.StartPosition = folding.Position;
                areaBeforeFolding.EndPosition   = new TextPosition(column: folding.Position.Column + FoldingAlgorithm.GetCollapsibleRepresentation().Length, line: folding.Position.Line);
            }

            Postbox.Put(new FoldClickedMessage {
                AreaBeforeFolding = areaBeforeFolding,
                AreaAfterFolding  = areaAfterFolding,
                ClosingTag        = FoldingAlgorithm.GetClosingTag(),
                OpeningTag        = FoldingAlgorithm.GetOpeningTag(),
                State             = state
            });
        }
        private void CreateFolds(IDictionary <TextPosition, TextPosition> folds)
        {
            foreach (var kvp in folds)
            {
                var tmpKey = new FoldingPositionInfo {
                    Deleted = false, Position = kvp.Key
                };
                var existingKey = foldingPositions.Keys.FirstOrDefault(k => k.Equals(tmpKey));

                if (existingKey != null)
                {
                    existingKey.Deleted = false;
                }
                else
                {
                    existingKey = tmpKey;
                }

                foldingPositions[existingKey] = new FoldingPositionInfo {
                    Deleted = false, Position = kvp.Value
                };
            }
        }
        private void CreateFolds(IDictionary<TextPosition, TextPosition> folds) {
            foreach (var kvp in folds) {
                var tmpKey = new FoldingPositionInfo { Deleted = false, Position = kvp.Key };
                var existingKey = foldingPositions.Keys.FirstOrDefault(k => k.Equals(tmpKey));

                if (existingKey != null) {
                    existingKey.Deleted = false;
                } else {
                    existingKey = tmpKey;
                }

                foldingPositions[existingKey] = new FoldingPositionInfo { Deleted = false, Position = kvp.Value };
            }
        }
        private void SendMessage(FoldingStates state, FoldingPositionInfo folding) {
            var areaBeforeFolding = new TextRange();
            var areaAfterFolding = new TextRange();

            if (state == FoldingStates.FOLDED) {
                areaBeforeFolding.StartPosition = folding.Position;
                areaBeforeFolding.EndPosition = foldingPositions.First(pair => Equals(pair.Key, folding)).Value.Position;
                areaAfterFolding.StartPosition = folding.Position;
                areaAfterFolding.EndPosition = new TextPosition(column: folding.Position.Column + FoldingAlgorithm.GetCollapsibleRepresentation().Length, line: folding.Position.Line);
            } else {
                areaAfterFolding.StartPosition = folding.Position;
                areaAfterFolding.EndPosition = foldingPositions.First(pair => Equals(pair.Key, folding)).Value.Position;
                areaBeforeFolding.StartPosition = folding.Position;
                areaBeforeFolding.EndPosition = new TextPosition(column: folding.Position.Column + FoldingAlgorithm.GetCollapsibleRepresentation().Length, line: folding.Position.Line);
            }

            Postbox.Put(new FoldClickedMessage {
                AreaBeforeFolding = areaBeforeFolding,
                AreaAfterFolding = areaAfterFolding,
                ClosingTag = FoldingAlgorithm.GetClosingTag(),
                OpeningTag = FoldingAlgorithm.GetOpeningTag(),
                State = state
            });
        }