//
        // Constructors
        //
        public TypeScriptIndentEngine(TypeScriptFormattingPolicy policy, TextStylePolicy textPolicy)
        {
            if (policy == null)
                throw new ArgumentNullException ("policy");

            if (textPolicy == null)
                throw new ArgumentNullException ("textPolicy");

            this.policy = policy;
            this.textPolicy = textPolicy;
            stack = new IndentStack (this);
            linebuf = new StringBuilder ();
            Reset ();
        }
        public override void Initialize()
        {
            base.Initialize ();

            IEnumerable<string> types = MonoDevelop.Ide.DesktopService.GetMimeTypeInheritanceChain (TypeScriptFormatter.MimeType);
            if (Document.Project != null && Document.Project.Policies != null) {
                policy = base.Document.Project.Policies.Get<TypeScriptFormattingPolicy> (types);
                textStylePolicy = base.Document.Project.Policies.Get<TextStylePolicy> (types);
            }

            if (Editor != null) {
                Editor.Options.Changed += (o, args) => {
                    var project = Document.Project;
                    if (project != null) {
                        policy = project.Policies.Get<TypeScriptFormattingPolicy> (types);
                        textStylePolicy = project.Policies.Get<TextStylePolicy> (types);
                    }

                    /*
                    Editor.IndentationTracker = new IndentVirtualSpaceManager (
                        Editor,
                        new DocumentStateTracker<TypeScriptIndentEngine> (new TypeScriptIndentEngine (policy, textStylePolicy), Editor)
                    );
                    */
                };

                /*
                Editor.IndentationTracker = new IndentVirtualSpaceManager (
                    Editor,
                    new DocumentStateTracker<TypeScriptIndentEngine> (new TypeScriptIndentEngine (policy, textStylePolicy), Editor)
                );*/
            }

            InitTracker ();
            Document.Editor.Paste += HandleTextPaste;
        }
 public TypeScriptTextEditorIndentation()
 {
     IEnumerable<string> types = MonoDevelop.Ide.DesktopService.GetMimeTypeInheritanceChain (TypeScriptFormatter.MimeType);
     policy = MonoDevelop.Projects.Policies.PolicyService.GetDefaultPolicy<TypeScriptFormattingPolicy> (types);
     textStylePolicy = MonoDevelop.Projects.Policies.PolicyService.GetDefaultPolicy<TextStylePolicy> (types);
 }
        public string FormatText(TypeScriptFormattingPolicy policy, TextStylePolicy textPolicy, string mimeType, string input, int startOffset, int endOffset)
        {
            return input;

            /*
            var data = new TextEditorData ();
            data.Document.SuppressHighlightUpdate = true;
            data.Document.MimeType = mimeType;
            data.Document.FileName = "toformat.ts";

            if (textPolicy != null) {
                data.Options.TabsToSpaces = textPolicy.TabsToSpaces;
                data.Options.TabSize = textPolicy.TabWidth;
                data.Options.IndentationSize = textPolicy.IndentWidth;
                data.Options.IndentStyle = textPolicy.RemoveTrailingWhitespace ? IndentStyle.Virtual : IndentStyle.Smart;
            }

            data.Text = input;

            var parser = new CSharpParser ();
            var compilationUnit = parser.Parse (data);
            bool hadErrors = parser.HasErrors;

            if (hadErrors) {
                //				foreach (var e in parser.ErrorReportPrinter.Errors)
                //					Console.WriteLine (e.Message);
                return input.Substring (startOffset, Math.Max (0, Math.Min (endOffset, input.Length) - startOffset));
            }

            var originalVersion = data.Document.Version;

            var textEditorOptions = data.CreateNRefactoryTextEditorOptions ();
            var formattingVisitor = new AstFormattingVisitor (
                policy.CreateOptions (),
                data.Document,
                textEditorOptions
            ) {
                HadErrors = hadErrors,
                FormattingMode = FormattingMode.Intrusive
            };
            compilationUnit.AcceptVisitor (formattingVisitor);
            try {
                formattingVisitor.ApplyChanges (startOffset, endOffset - startOffset);
            } catch (Exception e) {
                LoggingService.LogError ("Error in code formatter", e);
                return input.Substring (startOffset, Math.Max (0, Math.Min (endOffset, input.Length) - startOffset));
            }

            // check if the formatter has produced errors
            parser = new CSharpParser ();
            parser.Parse (data);
            if (parser.HasErrors) {
                LoggingService.LogError ("C# formatter produced source code errors. See console for output.");
                return input.Substring (startOffset, Math.Max (0, Math.Min (endOffset, input.Length) - startOffset));
            }

            var currentVersion = data.Document.Version;

            string result = data.GetTextBetween (startOffset, originalVersion.MoveOffsetTo (currentVersion, endOffset, ICSharpCode.NRefactory.Editor.AnchorMovementType.Default));
            data.Dispose ();
            return result;
            */
        }