In .:
[mono.git] / mcs / class / System / System.Text.RegularExpressions / regex.cs
diff --git a/mcs/class/System/System.Text.RegularExpressions/regex.cs b/mcs/class/System/System.Text.RegularExpressions/regex.cs
deleted file mode 100644 (file)
index 3cfe759..0000000
+++ /dev/null
@@ -1,579 +0,0 @@
-//\r
-// assembly:   System\r
-// namespace:  System.Text.RegularExpressions\r
-// file:       regex.cs\r
-//\r
-// author:     Dan Lewis (dlewis@gmx.co.uk)\r
-//             (c) 2002\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-//\r
-\r
-using System;\r
-using System.Text;\r
-using System.Collections;\r
-using System.Reflection;\r
-using System.Reflection.Emit;\r
-using System.Runtime.Serialization;\r
-\r
-using RegularExpression = System.Text.RegularExpressions.Syntax.RegularExpression;\r
-using Parser = System.Text.RegularExpressions.Syntax.Parser;\r
-\r
-using System.Diagnostics;\r
-\r
-\r
-namespace System.Text.RegularExpressions {\r
-       \r
-       public delegate string MatchEvaluator (Match match);\r
-\r
-       delegate void MatchAppendEvaluator (Match match, StringBuilder sb);\r
-\r
-       [Flags]\r
-       public enum RegexOptions {\r
-               None                            = 0x000,\r
-               IgnoreCase                      = 0x001,\r
-               Multiline                       = 0x002,\r
-               ExplicitCapture                 = 0x004,\r
-               Compiled                        = 0x008,\r
-               Singleline                      = 0x010,\r
-               IgnorePatternWhitespace         = 0x020,\r
-               RightToLeft                     = 0x040,\r
-               ECMAScript                      = 0x100,\r
-               CultureInvariant                = 0x200 \r
-       }\r
-       \r
-       [Serializable]\r
-       public class Regex : ISerializable {\r
-               public static void CompileToAssembly\r
-                       (RegexCompilationInfo[] regexes, AssemblyName aname)\r
-               {\r
-                               Regex.CompileToAssembly(regexes, aname, new CustomAttributeBuilder[] {}, null);\r
-               }\r
-\r
-               public static void CompileToAssembly\r
-                       (RegexCompilationInfo[] regexes, AssemblyName aname,\r
-                        CustomAttributeBuilder[] attribs)\r
-               {\r
-                       Regex.CompileToAssembly(regexes, aname, attribs, null);\r
-               }\r
-\r
-               [MonoTODO]\r
-               public static void CompileToAssembly\r
-                       (RegexCompilationInfo[] regexes, AssemblyName aname,\r
-                        CustomAttributeBuilder[] attribs, string resourceFile)\r
-               {\r
-                       throw new NotImplementedException ();\r
-                       // TODO : Make use of attribs and resourceFile parameters\r
-                       /*\r
-                       AssemblyBuilder asmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly (aname, AssemblyBuilderAccess.RunAndSave);\r
-                       ModuleBuilder modBuilder = asmBuilder.DefineDynamicModule("InnerRegexModule",aname.Name);\r
-                       Parser psr = new Parser ();     \r
-                       \r
-                       System.Console.WriteLine("CompileToAssembly");\r
-                              \r
-                       for(int i=0; i < regexes.Length; i++)\r
-                               {\r
-                                       System.Console.WriteLine("Compiling expression :" + regexes[i].Pattern);\r
-                                       RegularExpression re = psr.ParseRegularExpression (regexes[i].Pattern, regexes[i].Options);\r
-                                       \r
-                                       // compile\r
-                                                                               \r
-                                       CILCompiler cmp = new CILCompiler (modBuilder, i);\r
-                                       bool reverse = (regexes[i].Options & RegexOptions.RightToLeft) !=0;\r
-                                       re.Compile (cmp, reverse);\r
-                                       cmp.Close();\r
-                                       \r
-                               }\r
-                      \r
-\r
-                       // Define a runtime class with specified name and attributes.\r
-                       TypeBuilder builder = modBuilder.DefineType("ITest");\r
-                       builder.CreateType();\r
-                       asmBuilder.Save(aname.Name);\r
-                       */\r
-               }\r
-               \r
-               public static string Escape (string str) {\r
-                       return Parser.Escape (str);\r
-               }\r
-\r
-               public static string Unescape (string str) {\r
-                       return Parser.Unescape (str);\r
-               }\r
-\r
-               public static bool IsMatch (string input, string pattern) {\r
-                       return IsMatch (input, pattern, RegexOptions.None);\r
-               }\r
-\r
-               public static bool IsMatch (string input, string pattern, RegexOptions options) {\r
-                       Regex re = new Regex (pattern, options);\r
-                       return re.IsMatch (input);\r
-               }\r
-\r
-               public static Match Match (string input, string pattern) {\r
-                       return Regex.Match (input, pattern, RegexOptions.None);\r
-               }\r
-\r
-               public static Match Match (string input, string pattern, RegexOptions options) {\r
-                       Regex re = new Regex (pattern, options);\r
-                       return re.Match (input);\r
-               }\r
-\r
-               public static MatchCollection Matches (string input, string pattern) {\r
-                       return Matches (input, pattern, RegexOptions.None);\r
-               }\r
-\r
-               public static MatchCollection Matches (string input, string pattern, RegexOptions options) {\r
-                       Regex re = new Regex (pattern, options);\r
-                       return re.Matches (input);\r
-               }\r
-\r
-               public static string Replace\r
-                       (string input, string pattern, MatchEvaluator evaluator)\r
-               {\r
-                       return Regex.Replace (input, pattern, evaluator, RegexOptions.None);\r
-               }\r
-\r
-               public static string Replace\r
-                       (string input, string pattern, MatchEvaluator evaluator,\r
-                        RegexOptions options)\r
-               {\r
-                       Regex re = new Regex (pattern, options);\r
-                       return re.Replace (input, evaluator);\r
-               }\r
-\r
-               public static string Replace\r
-                       (string input, string pattern, string replacement)\r
-               {\r
-                       return Regex.Replace (input, pattern, replacement, RegexOptions.None);\r
-               }\r
-\r
-               public static string Replace\r
-                       (string input, string pattern, string replacement,\r
-                        RegexOptions options)\r
-               {\r
-                       Regex re = new Regex (pattern, options);\r
-                       return re.Replace (input, replacement);\r
-               }\r
-\r
-               public static string[] Split (string input, string pattern) {\r
-                       return Regex.Split (input, pattern, RegexOptions.None);\r
-               }\r
-\r
-               public static string[] Split (string input, string pattern, RegexOptions options) {\r
-                       Regex re = new Regex (pattern, options);\r
-                       return re.Split (input);\r
-               }\r
-\r
-               // private\r
-\r
-               private static FactoryCache cache = new FactoryCache (200);     // TODO put some meaningful number here\r
-\r
-               // constructors\r
-\r
-               protected Regex () {\r
-                       // XXX what's this constructor for?\r
-                       // : Used to compile to assembly (Custum regex inherit from Regex and use this constructor)\r
-               }\r
-\r
-               public Regex (string pattern) : this (pattern, RegexOptions.None) {\r
-               }\r
-\r
-               public Regex (string pattern, RegexOptions options) {\r
-                       this.pattern = pattern;\r
-                       this.roptions = options;\r
-               \r
-                       this.machineFactory = cache.Lookup (pattern, options);\r
-\r
-                       if (this.machineFactory == null) {\r
-                               // parse and install group mapping\r
-\r
-                               Parser psr = new Parser ();\r
-                               RegularExpression re = psr.ParseRegularExpression (pattern, options);\r
-                               this.group_count = re.GroupCount;\r
-                               this.mapping = psr.GetMapping ();\r
-\r
-                               // compile\r
-                               \r
-                               ICompiler cmp;\r
-                               //if ((options & RegexOptions.Compiled) != 0)\r
-                               //      //throw new Exception ("Not implemented.");\r
-                               //      cmp = new CILCompiler ();\r
-                               //else\r
-                                       cmp = new PatternCompiler ();\r
-\r
-                               re.Compile (cmp, RightToLeft);\r
-\r
-                               // install machine factory and add to pattern cache\r
-\r
-                               this.machineFactory = cmp.GetMachineFactory ();\r
-                               this.machineFactory.Mapping = mapping;\r
-                               cache.Add (pattern, options, this.machineFactory);\r
-                       } else {\r
-                               this.group_count = this.machineFactory.GroupCount;\r
-                               this.mapping = this.machineFactory.Mapping;\r
-                       }\r
-               }\r
-\r
-               private Regex (SerializationInfo info, StreamingContext context) :\r
-                       this (info.GetString ("pattern"), \r
-                             (RegexOptions) info.GetValue ("options", typeof (RegexOptions))) {\r
-               }\r
-\r
-               // fixes public API signature\r
-               ~Regex ()\r
-               {\r
-               }\r
-\r
-               // public instance properties\r
-               \r
-               public RegexOptions Options {\r
-                       get { return roptions; }\r
-               }\r
-\r
-               public bool RightToLeft {\r
-                       get { return (roptions & RegexOptions.RightToLeft) != 0; }\r
-               }\r
-\r
-               // public instance methods\r
-               \r
-               public string[] GetGroupNames () {\r
-                       string[] names = new string[mapping.Count];\r
-                       mapping.Keys.CopyTo (names, 0);\r
-\r
-                       return names;\r
-               }\r
-\r
-               public int[] GetGroupNumbers () {\r
-                       int[] numbers = new int[mapping.Count];\r
-                       mapping.Values.CopyTo (numbers, 0);\r
-\r
-                       return numbers;\r
-               }\r
-\r
-               public string GroupNameFromNumber (int i) {\r
-                       if (i > group_count)\r
-                               return "";\r
-               \r
-                       foreach (string name in mapping.Keys) {\r
-                               if ((int)mapping[name] == i)\r
-                                       return name;\r
-                       }\r
-\r
-                       return "";\r
-               }\r
-\r
-               public int GroupNumberFromName (string name) {\r
-                       if (mapping.Contains (name))\r
-                               return (int)mapping[name];\r
-\r
-                       return -1;\r
-               }\r
-\r
-               // match methods\r
-               \r
-               public bool IsMatch (string input) {\r
-                       if (RightToLeft)\r
-                               return IsMatch (input, input.Length);\r
-                       else\r
-                               return IsMatch (input, 0);\r
-               }\r
-\r
-               public bool IsMatch (string input, int startat) {\r
-                       return Match (input, startat).Success;\r
-               }\r
-\r
-               public Match Match (string input) {\r
-                       if (RightToLeft)\r
-                               return Match (input, input.Length);\r
-                       else\r
-                               return Match (input, 0);\r
-               }\r
-\r
-               public Match Match (string input, int startat) {\r
-       \r
-                       return CreateMachine ().Scan (this, input, startat, input.Length);\r
-               }\r
-\r
-               public Match Match (string input, int startat, int length) {\r
-       \r
-                       return CreateMachine ().Scan (this, input, startat, startat + length);\r
-               }\r
-\r
-               public MatchCollection Matches (string input) {\r
-                       if (RightToLeft)\r
-                               return Matches (input, input.Length);\r
-                       else\r
-                               return Matches (input, 0);\r
-               }\r
-\r
-               public MatchCollection Matches (string input, int startat) {\r
-                       Match m = Match (input, startat);\r
-                       return new MatchCollection (m);\r
-               }\r
-\r
-               // replace methods\r
-\r
-               public string Replace (string input, MatchEvaluator evaluator) {\r
-                       if (RightToLeft)                        \r
-                               return Replace (input, evaluator, Int32.MaxValue, input.Length);\r
-                       else\r
-                               return Replace (input, evaluator, Int32.MaxValue, 0);\r
-               }\r
-\r
-               public string Replace (string input, MatchEvaluator evaluator, int count) {\r
-                       if (RightToLeft)\r
-                               return Replace (input, evaluator, count, input.Length);\r
-                       else\r
-                               return Replace (input, evaluator, count, 0);\r
-               }\r
-\r
-               class Adapter\r
-               {\r
-                       MatchEvaluator ev;\r
-                       public Adapter (MatchEvaluator ev) { this.ev = ev; }\r
-                       public void Evaluate (Match m, StringBuilder sb) { sb.Append (ev (m)); }\r
-               }\r
-\r
-               public string Replace (string input, MatchEvaluator evaluator, int count, int startat)\r
-               {\r
-                       Adapter a = new Adapter (evaluator);\r
-                       return Replace (input, new MatchAppendEvaluator (a.Evaluate), count, startat);\r
-               }\r
-\r
-               string Replace (string input, MatchAppendEvaluator evaluator, int count, int startat)\r
-               {\r
-                       StringBuilder result = new StringBuilder ();\r
-                       int ptr = startat;\r
-                       int counter = count;\r
-\r
-                       result.Append (input, 0, ptr);\r
-\r
-                       Match m = Match (input, startat);\r
-                       while (m.Success) {\r
-                               if (count != -1)\r
-                                       if(counter -- <= 0)\r
-                                               break;\r
-                               result.Append (input, ptr, m.Index - ptr);\r
-                               evaluator (m, result);\r
-\r
-                               ptr = m.Index + m.Length;\r
-                               m = m.NextMatch ();\r
-                       }\r
-                       \r
-                       if (ptr == 0)\r
-                               return input;\r
-                       \r
-                       result.Append (input, ptr, input.Length - ptr);\r
-\r
-                       return result.ToString ();\r
-               }\r
-\r
-               public string Replace (string input, string replacement) {\r
-                       if (RightToLeft)\r
-                               return Replace (input, replacement, Int32.MaxValue, input.Length);\r
-                       else\r
-                               return Replace (input, replacement, Int32.MaxValue, 0);\r
-               }\r
-\r
-               public string Replace (string input, string replacement, int count) {\r
-                       if (RightToLeft)                        \r
-                               return Replace (input, replacement, count, input.Length);\r
-                       else    \r
-                               return Replace (input, replacement, count, 0);\r
-               }\r
-\r
-               public string Replace (string input, string replacement, int count, int startat) {\r
-                       ReplacementEvaluator ev = new ReplacementEvaluator (this, replacement);\r
-                       return Replace (input, new MatchAppendEvaluator (ev.EvaluateAppend), count, startat);\r
-               }\r
-\r
-               // split methods\r
-\r
-               public string[] Split (string input) {\r
-                       if (RightToLeft)        \r
-                               return Split (input, Int32.MaxValue, input.Length);\r
-                       else\r
-                               return Split (input, Int32.MaxValue, 0);\r
-               }\r
-\r
-               public string[] Split (string input, int count) {\r
-                       if (RightToLeft)                                \r
-                               return Split (input, count, input.Length);\r
-                       else\r
-                               return Split (input, count, 0);\r
-               }\r
-\r
-               public string[] Split (string input, int count, int startat) {\r
-                       ArrayList splits = new ArrayList ();\r
-                       if (count == 0)\r
-                               count = Int32.MaxValue;\r
-\r
-                       int ptr = startat;\r
-                       Match m = null;\r
-                       while (--count > 0) {\r
-                               if (m != null)\r
-                                       m = m.NextMatch ();\r
-                               else\r
-                                       m = Match (input, ptr);\r
-\r
-                               if (!m.Success)\r
-                                       break;\r
-                       \r
-                               if (RightToLeft)\r
-                                       splits.Add (input.Substring (m.Index + m.Length , ptr - m.Index - m.Length ));\r
-                               else\r
-                                       splits.Add (input.Substring (ptr, m.Index - ptr));\r
-                                       \r
-                               int gcount = m.Groups.Count;\r
-                               for (int gindex = 1; gindex < gcount; gindex++) {\r
-                                       Group grp = m.Groups [gindex];\r
-                                       splits.Add (input.Substring (grp.Index, grp.Length));\r
-                               }\r
-\r
-                               if (RightToLeft)\r
-                                       ptr = m.Index; \r
-                               else\r
-                                       ptr = m.Index + m.Length;\r
-                                       \r
-                       }\r
-\r
-                       if (RightToLeft) {\r
-                               if ( ptr >= 0) {\r
-                                               splits.Add (input.Substring(0, ptr));\r
-                               }\r
-                       }                               \r
-                       else {\r
-                               if (ptr <= input.Length) {\r
-                                               splits.Add (input.Substring (ptr));\r
-                               }\r
-                               \r
-                       }\r
-\r
-                       return (string []) splits.ToArray (typeof (string));\r
-               }\r
-\r
-               // MS undocummented method\r
-               [MonoTODO]\r
-               protected void InitializeReferences() {\r
-                       throw new NotImplementedException ();\r
-               }\r
-\r
-               [MonoTODO]\r
-               protected bool UseOptionC(){\r
-                       throw new NotImplementedException ();\r
-               }\r
-\r
-               [MonoTODO]\r
-               protected bool UseOptionR(){\r
-                       throw new NotImplementedException ();\r
-               }\r
-\r
-               // object methods\r
-               \r
-               public override string ToString () {\r
-                       return pattern;\r
-               }\r
-\r
-               // ISerializable interface\r
-               void ISerializable.GetObjectData (SerializationInfo info, StreamingContext context) {\r
-                       info.AddValue ("pattern", this.ToString (), typeof (string));\r
-                       info.AddValue ("options", this.Options, typeof (RegexOptions));\r
-               }\r
-\r
-               // internal\r
-\r
-               internal int GroupCount {\r
-                       get { return group_count; }\r
-               }\r
-\r
-               // private\r
-\r
-               private IMachine CreateMachine () {\r
-                       return machineFactory.NewInstance ();\r
-               }\r
-\r
-               private IMachineFactory machineFactory;\r
-               private IDictionary mapping;\r
-               private int group_count;\r
-\r
-               \r
-               // protected members\r
-\r
-               protected internal string pattern;\r
-               protected internal RegexOptions roptions;\r
-               \r
-               // MS undocumented members\r
-               [MonoTODO]\r
-               protected internal System.Collections.Hashtable capnames;\r
-               [MonoTODO]\r
-               protected internal System.Collections.Hashtable caps;\r
-               [MonoTODO]\r
-               protected internal int capsize;\r
-               [MonoTODO]\r
-               protected internal string[] capslist;\r
-               [MonoTODO]\r
-               protected internal RegexRunnerFactory factory;\r
-       }\r
-\r
-       [Serializable]\r
-       public class RegexCompilationInfo {\r
-               public RegexCompilationInfo (string pattern, RegexOptions options, string name, string nspace, bool isPublic)\r
-               {\r
-                       this.pattern = pattern;\r
-                       this.options = options;\r
-                       this.name = name;\r
-                       this.nspace = nspace;\r
-                       this.isPublic = isPublic;\r
-               }\r
-\r
-               public bool IsPublic {\r
-                       get { return isPublic; }\r
-                       set { isPublic = value; }\r
-               }\r
-\r
-               public string Name {\r
-                       get { return name; }\r
-                       set { name = value; }\r
-               }\r
-\r
-               public string Namespace {\r
-                       get { return nspace; }\r
-                       set { nspace = value; }\r
-               }\r
-\r
-               public RegexOptions Options {\r
-                       get { return options; }\r
-                       set { options = value; }\r
-               }\r
-\r
-               public string Pattern {\r
-                       get { return pattern; }\r
-                       set { pattern = value; }\r
-               }\r
-\r
-               // private\r
-\r
-               private string pattern, name, nspace;\r
-               private RegexOptions options;\r
-               private bool isPublic;\r
-       }\r
-}\r