* FontUnit.cs: use a hashtable for mapping size name to value.
* HyperLink.cs: fixed a bug and a typo.
* Unit.cs: some fixes to internal constructor.
svn path=/trunk/mcs/; revision=5790
+2002-07-13 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+ * FontUnit.cs: use a hashtable for mapping size name to value.
+ * HyperLink.cs: fixed a bug and a typo.
+ * Unit.cs: some fixes to internal constructor.
+
2002-07-13 Gonzalo Paniagua Javier <gonzalo@ximian.com>
* ListControl.cs: fixed a couple of range checks.
*/\r
\r
using System;\r
+using System.Collections;\r
using System.Globalization;\r
using System.Web;\r
using System.Web.UI;\r
private FontSize type;\r
private Unit val;\r
\r
+ private static Hashtable sizeTable;\r
+\r
+ static FontUnit ()\r
+ {\r
+ sizeTable = new Hashtable (CaseInsensitiveHashCodeProvider.Default,\r
+ CaseInsensitiveComparer.Default);\r
+ sizeTable.Add ("smaller", 2);\r
+ sizeTable.Add ("larger", 3);\r
+ sizeTable.Add ("xx-small", 4);\r
+ sizeTable.Add ("xxsmall", 4);\r
+ sizeTable.Add ("x-small", 5);\r
+ sizeTable.Add ("xsmall", 5);\r
+ sizeTable.Add ("small", 6);\r
+ sizeTable.Add ("medium", 7);\r
+ sizeTable.Add ("large", 8);\r
+ sizeTable.Add ("xlarge", 9);\r
+ sizeTable.Add ("x-large", 9);\r
+ sizeTable.Add ("xxlarge", 10);\r
+ sizeTable.Add ("xx-large", 10);\r
+ }\r
+\r
public FontUnit(FontSize type)\r
{\r
if(!Enum.IsDefined(typeof(FontSize), type))\r
if(value != null && value != String.Empty)\r
{\r
string low = value.ToLower(culture);\r
- int index = GetTypeFromString(low);\r
- if( index != -1)\r
- {\r
- type = (FontSize)index;\r
- return;\r
- } else\r
+ int size = GetTypeFromString(low);\r
+ if (size != -1)\r
{\r
+ type = (FontSize)size;\r
+ } else {\r
val = new Unit(value, culture, UnitType.Point);\r
type = FontSize.AsUnit;\r
}\r
}\r
}\r
\r
- private int GetTypeFromString(string strVal)\r
- {\r
- string[] values = {\r
- "smaller",\r
- "larger",\r
- "xx-small",\r
- "x-small",\r
- "small",\r
- "medium",\r
- "large",\r
- "xlarge",\r
- "xxlarge"\r
- };\r
- int i = 0;\r
- foreach(string valType in values)\r
- {\r
- if(strVal == valType)\r
- {\r
- return (i + 2);\r
- }\r
- i++;\r
- }\r
- return -1;\r
+ private static int GetTypeFromString(string strVal)\r
+ {\r
+ if (!(sizeTable.ContainsKey (strVal)))\r
+ return -1;\r
+ return (int) sizeTable [strVal];\r
}\r
\r
public static FontUnit Parse(string s)\r
}\r
if(Text.Length > 0)\r
{\r
- base.AddParsedSubObject(Text);\r
+ base.AddParsedSubObject(new LiteralControl (Text));\r
Text = String.Empty;\r
}\r
base.AddParsedSubObject (obj);\r
}\r
if(HasControls())\r
{\r
- base.RenderControl(writer);\r
+ base.RenderContents(writer);\r
return;\r
}\r
writer.Write(Text);\r
\r
internal Unit(string value, CultureInfo culture, UnitType defType)\r
{\r
- this.val = 0;\r
- this.type = UnitType.Pixel;\r
- if(value == null || value.Length == 0)\r
- {\r
- this.val = 0;\r
- this.type = UnitType.Pixel;\r
+ string valueTrim;\r
+ if (value == null || (valueTrim = value.Trim ()).Length == 0) {\r
+ val = 0;\r
+ type = UnitType.Pixel;\r
+ return;\r
}\r
- if(culture == null)\r
+\r
+ if (culture == null)\r
culture = CultureInfo.CurrentCulture;\r
- string strVal = value.Trim().ToLower();\r
+\r
+ string strVal = valueTrim.ToLower ();\r
+ int length = strVal.Length;\r
char c;\r
int start = -1;\r
- //int current = 0;\r
- for(int i = 0; i < strVal.Length; i++)\r
- {\r
- c = strVal[i];\r
+ for (int i = 0; i < length; i++) {\r
+ c = strVal [i];\r
if( (c >= '0' && c <= '9') || (c == '-' || c == '.' || c == ',') )\r
start = i;\r
}\r
- if(start == -1)\r
- throw new ArgumentException();\r
- if( (start + 1) < strVal.Length)\r
- {\r
- this.type = (UnitType)GetTypeFromString(strVal.Substring(start + 1).Trim());\r
- this.val = 0;\r
- } else\r
- {\r
- this.type = defType;\r
- this.val = 0;\r
+ \r
+ if (start == -1)\r
+ throw new ArgumentException("No digits in 'value'");\r
+ \r
+ start++;\r
+ if (start < length) {\r
+ type = GetTypeFromString (strVal.Substring (start).Trim ());\r
+ val = 0;\r
+ } else {\r
+ type = defType;\r
}\r
- try\r
- {\r
- if(type == UnitType.Pixel)\r
- val = (double) Int32.Parse (strVal.Substring (0, start + 1), culture);\r
+\r
+ try {\r
+ string numbers = strVal.Substring (0, start);\r
+ if (type == UnitType.Pixel)\r
+ val = (double) Int32.Parse (numbers, culture);\r
else\r
- val = (double) Single.Parse (strVal.Substring (0, start + 1), culture);\r
- } catch(Exception)\r
- {\r
- throw new ArgumentOutOfRangeException();\r
+ val = (double) Single.Parse (numbers, culture);\r
+ } catch (Exception) {\r
+ throw new FormatException ("Error parsing " + value);\r
}\r
- if(val < Min || val > Max)\r
- throw new ArgumentOutOfRangeException();\r
+\r
+ if (val < Min || val > Max)\r
+ throw new ArgumentOutOfRangeException ();\r
}\r
\r
- private UnitType GetTypeFromString(string s)\r
+ private static UnitType GetTypeFromString(string s)\r
{\r
if(s == null || s.Length == 0)\r
return UnitType.Pixel;\r