RegexWorker.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / xsp / System / Web / Configuration / RegexWorker.cs / 5 / RegexWorker.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

/* 
 * Base class for browser capabilities object: just a read-only dictionary 
 * holder that supports Init()
 * 
 *


*/ 

using System.Web.UI; 
using System.Collections; 
using System.Collections.Specialized;
using System.ComponentModel; 
using System.Globalization;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions; 
using System.Web.RegularExpressions;
using System.Web.Util; 
 
namespace System.Web.Configuration {
 
    //
    [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)]
    [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)]
    public class RegexWorker { 
        internal static readonly Regex RefPat = new BrowserCapsRefRegex();
        private Hashtable _groups; 
        private HttpBrowserCapabilities _browserCaps; 

        public RegexWorker(HttpBrowserCapabilities browserCaps) { 
            _browserCaps = browserCaps;
        }

        private string Lookup(string from) { 
            MatchCollection matches = RefPat.Matches(from);
 
            // shortcut for no reference case 
            if (matches.Count == 0) {
                return from; 
            }

            StringBuilder sb = new StringBuilder();
            int startIndex = 0; 

            foreach (Match match in matches) { 
                int length = match.Index - startIndex; 
                sb.Append(from.Substring(startIndex, length));
                startIndex = match.Index + match.Length; 

                string groupName = match.Groups["name"].Value;

                string result = null; 
                if (_groups != null) {
                    result = (String)_groups[groupName]; 
                } 

                if (result == null) { 
                    result = _browserCaps[groupName];
                }

                sb.Append(result); 
            }
 
            sb.Append(from, startIndex, from.Length - startIndex); 
            string output = sb.ToString();
 
            // Return null instead of empty string since empty string is used to override values.
            if (output.Length == 0) {
                return null;
            } 

            return output; 
        } 

        public string this[string key] { 
            get {
                return Lookup(key);
            }
        } 

        public bool ProcessRegex(string target, string regexExpression) { 
            if(target == null) { 
                target = String.Empty;
            } 

            Regex regex = new Regex(regexExpression, RegexOptions.ExplicitCapture);
            Match match = regex.Match(target);
            if(match.Success == false) { 
                return false;
            } 
 
            string[] groups = regex.GetGroupNames();
 
            if (groups.Length > 0) {
                if (_groups == null) {
                    _groups = new Hashtable();
                } 

                for (int i = 0; i < groups.Length; i++) { 
                    _groups[groups[i]] = match.Groups[i].Value; 
                }
            } 

            return true;
        }
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

/* 
 * Base class for browser capabilities object: just a read-only dictionary 
 * holder that supports Init()
 * 
 *


*/ 

using System.Web.UI; 
using System.Collections; 
using System.Collections.Specialized;
using System.ComponentModel; 
using System.Globalization;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions; 
using System.Web.RegularExpressions;
using System.Web.Util; 
 
namespace System.Web.Configuration {
 
    //
    [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)]
    [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)]
    public class RegexWorker { 
        internal static readonly Regex RefPat = new BrowserCapsRefRegex();
        private Hashtable _groups; 
        private HttpBrowserCapabilities _browserCaps; 

        public RegexWorker(HttpBrowserCapabilities browserCaps) { 
            _browserCaps = browserCaps;
        }

        private string Lookup(string from) { 
            MatchCollection matches = RefPat.Matches(from);
 
            // shortcut for no reference case 
            if (matches.Count == 0) {
                return from; 
            }

            StringBuilder sb = new StringBuilder();
            int startIndex = 0; 

            foreach (Match match in matches) { 
                int length = match.Index - startIndex; 
                sb.Append(from.Substring(startIndex, length));
                startIndex = match.Index + match.Length; 

                string groupName = match.Groups["name"].Value;

                string result = null; 
                if (_groups != null) {
                    result = (String)_groups[groupName]; 
                } 

                if (result == null) { 
                    result = _browserCaps[groupName];
                }

                sb.Append(result); 
            }
 
            sb.Append(from, startIndex, from.Length - startIndex); 
            string output = sb.ToString();
 
            // Return null instead of empty string since empty string is used to override values.
            if (output.Length == 0) {
                return null;
            } 

            return output; 
        } 

        public string this[string key] { 
            get {
                return Lookup(key);
            }
        } 

        public bool ProcessRegex(string target, string regexExpression) { 
            if(target == null) { 
                target = String.Empty;
            } 

            Regex regex = new Regex(regexExpression, RegexOptions.ExplicitCapture);
            Match match = regex.Match(target);
            if(match.Success == false) { 
                return false;
            } 
 
            string[] groups = regex.GetGroupNames();
 
            if (groups.Length > 0) {
                if (_groups == null) {
                    _groups = new Hashtable();
                } 

                for (int i = 0; i < groups.Length; i++) { 
                    _groups[groups[i]] = match.Groups[i].Value; 
                }
            } 

            return true;
        }
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.

                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK