/// <summary>
        /// Registers a new SpecialNodesInserter with the output visitor.
        /// Make sure to call Finish() (or Dispose()) on the returned SpecialNodesInserter
        /// when the output is finished.
        /// </summary>
        public static SpecialNodesByMapInserter Install(Hashtable specialsMap, IOutputAstVisitor outputVisitor)
        {
            SpecialNodesByMapInserter sni = new SpecialNodesByMapInserter(specialsMap, new SpecialOutputVisitor(outputVisitor.OutputFormatter));

            outputVisitor.BeforeNodeVisit += sni.AcceptNodeStart;
            outputVisitor.AfterNodeVisit  += sni.AcceptNodeEnd;
            return(sni);
        }
        public String ToCSharp()
        {
            IOutputAstVisitor outputVisitor = new CSharpOutputVisitor();

            SetPrettyPrintOptions(outputVisitor);

            using (SpecialNodesByMapInserter.Install(new Hashtable(), outputVisitor)) {
                unit.AcceptVisitor(outputVisitor, null);
            }
            String code = outputVisitor.Text;

            return(NRefactoryUtil.FixSourceFormatting(code));
        }