public SpanReplacementEngine(IEscapeRouteConfiguration config)
 {
     _config          = config;
     _pattern         = GetPattern(config);
     _replacementMap  = CreateReplacementMap(config);
     _unicodeReplacer = _config.UnicodeEscapeHandler
                        .GetReplacement(_config.UnicodeBehavior);
     _unicodeSurrogateReplacer = _config.UnicodeSurrogateEscapeHandler
                                 .GetReplacement(_config.UnicodeSurrogateBehavior);
 }
        private static HashSet <char> GetPattern(IEscapeRouteConfiguration config)
        {
            var pattern = new HashSet <char>()
            {
                config.BackspaceEscapeHandler.GetPattern(),
                config.BackslashEscapeHandler.GetPattern(),
                config.CarriageReturnEscapeHandler.GetPattern(),
                config.DoubleQuoteEscapeHandler.GetPattern(),
                config.FormFeedEscapeHandler.GetPattern(),
                config.NewLineEscapeHandler.GetPattern(),
                config.SingleQuoteEscapeHandler.GetPattern(),
                config.TabEscapeHandler.GetPattern(),
                config.UnicodeNullEscapeHandler.GetPattern()
            };

            return(pattern);
        }
 private static Dictionary <char, ReadOnlyMemory <char> > CreateReplacementMap(IEscapeRouteConfiguration config)
 {
     return(new Dictionary <char, ReadOnlyMemory <char> >()
     {
         {
             config.BackspaceEscapeHandler.GetPattern(),
             config.BackspaceEscapeHandler.GetReplacement(config.BackspaceBehavior)
         },
         {
             config.BackslashEscapeHandler.GetPattern(),
             config.BackslashEscapeHandler.GetReplacement(config.BackslashBehavior)
         },
         {
             config.DoubleQuoteEscapeHandler.GetPattern(),
             config.DoubleQuoteEscapeHandler.GetReplacement(config.DoubleQuoteBehavior)
         },
         {
             config.FormFeedEscapeHandler.GetPattern(),
             config.FormFeedEscapeHandler.GetReplacement(config.FormFeedBehavior)
         },
         {
             config.SingleQuoteEscapeHandler.GetPattern(),
             config.SingleQuoteEscapeHandler.GetReplacement(config.SingleQuoteBehavior)
         },
         {
             config.TabEscapeHandler.GetPattern(),
             config.TabEscapeHandler.GetReplacement(config.TabBehavior)
         },
         {
             config.NewLineEscapeHandler.GetPattern(),
             config.NewLineEscapeHandler.GetReplacement(config.NewLineBehavior)
         },
         {
             config.CarriageReturnEscapeHandler.GetPattern(),
             config.CarriageReturnEscapeHandler.GetReplacement(config.CarriageReturnBehavior)
         },
         {
             config.UnicodeNullEscapeHandler.GetPattern(),
             config.UnicodeNullEscapeHandler.GetReplacement(config.UnicodeNullBehavior)
         }
     });
 }