2 // System.Web.UI.HtmlTextWriter
5 // Ben Maurer <bmaurer@novell.com>
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 using System.Globalization;
31 using System.Collections;
32 using System.Security.Permissions;
35 namespace System.Web.UI {
38 [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
39 [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
40 public class HtmlTextWriter : TextWriter {
43 public HtmlTextWriter (TextWriter writer) : this (writer, DefaultTabString)
47 public HtmlTextWriter (TextWriter writer, string tabString)
50 throw new ArgumentNullException ();
53 tab_string = tabString;
56 internal static string StaticGetStyleName (System.Web.UI.HtmlTextWriterStyle styleKey)
58 if ((int) styleKey < htmlstyles.Length)
59 return htmlstyles [(int) styleKey].name;
65 protected static void RegisterAttribute (string name, HtmlTextWriterAttribute key)
70 protected static void RegisterStyle (string name, HtmlTextWriterStyle key)
75 protected static void RegisterTag (string name, HtmlTextWriterTag key)
80 public virtual void AddAttribute (HtmlTextWriterAttribute key, string value, bool fEncode)
83 value = EncodeAttributeValue (key, value);
84 AddAttribute (GetAttributeName (key), value, key);
88 public virtual void AddAttribute (HtmlTextWriterAttribute key, string value)
90 AddAttribute (key, value, true);
94 public virtual void AddAttribute (string name, string value, bool fEncode)
97 value = HttpUtility.HtmlAttributeEncode (value);
99 AddAttribute (name, value, GetAttributeKey (name));
102 public virtual void AddAttribute (string name, string value)
104 AddAttribute (name, value, true);
107 protected virtual void AddAttribute (string name, string value, HtmlTextWriterAttribute key)
110 attrs [attrs_pos].name = name;
111 attrs [attrs_pos].value = value;
112 attrs [attrs_pos].key = key;
116 protected virtual void AddStyleAttribute (string name, string value, HtmlTextWriterStyle key)
119 styles [styles_pos].name = name;
120 styles [styles_pos].value = value;
121 styles [styles_pos].key = key;
125 public virtual void AddStyleAttribute (string name, string value)
127 AddStyleAttribute (name, value, GetStyleKey (name));
130 public virtual void AddStyleAttribute (HtmlTextWriterStyle key, string value)
132 AddStyleAttribute (GetStyleName (key), value, key);
135 public override void Close ()
140 protected virtual string EncodeAttributeValue (HtmlTextWriterAttribute attrKey, string value)
142 return HttpUtility.HtmlEncode (value);
145 protected string EncodeAttributeValue (string value, bool fEncode)
148 return HttpUtility.HtmlEncode (value);
152 protected string EncodeUrl (string url)
154 return HttpUtility.UrlPathEncode (url);
158 protected virtual void FilterAttributes ()
160 AddedAttr style_attr = new AddedAttr ();
162 for (int i = 0; i <= attrs_pos; i ++) {
163 AddedAttr a = attrs [i];
164 if (OnAttributeRender (a.name, a.value, a.key)) {
165 if (a.key == HtmlTextWriterAttribute.Style) {
170 WriteAttribute (a.name, a.value, false);
174 if (styles_pos != -1 || style_attr.value != null) {
177 Write (EqualsDoubleQuoteString);
180 for (int i = 0; i <= styles_pos; i ++) {
181 AddedStyle a = styles [i];
182 if (OnStyleAttributeRender (a.name, a.value, a.key))
183 WriteStyleAttribute (a.name, a.value, false);
186 Write (style_attr.value);
187 Write (DoubleQuoteChar);
190 styles_pos = attrs_pos = -1;
193 public override void Flush ()
199 protected HtmlTextWriterAttribute GetAttributeKey (string attrName)
201 // I don't think we want to binary search
202 // because there might be something added to
203 // the enum later. Do we really need anything
204 // faster than a linear search?
206 foreach (HtmlAttribute t in htmlattrs) {
207 if (String.Compare(t.name, attrName, true, CultureInfo.InvariantCulture) == 0)
211 return (HtmlTextWriterAttribute)(-1);
215 protected string GetAttributeName (HtmlTextWriterAttribute attrKey)
217 if ((int) attrKey < htmlattrs.Length)
218 return htmlattrs [(int) attrKey].name;
224 protected HtmlTextWriterStyle GetStyleKey (string styleName)
226 // I don't think we want to binary search
227 // because there might be something added to
228 // the enum later. Do we really need anything
229 // faster than a linear search?
231 foreach (HtmlStyle t in htmlstyles) {
232 if (String.Compare(t.name, styleName, true, CultureInfo.InvariantCulture) == 0)
236 return (HtmlTextWriterStyle)(-1);
240 protected string GetStyleName (HtmlTextWriterStyle styleKey)
242 return StaticGetStyleName (styleKey);
246 protected virtual HtmlTextWriterTag GetTagKey (string tagName)
248 // I don't think we want to binary search
249 // because there might be something added to
250 // the enum later. Do we really need anything
251 // faster than a linear search?
253 foreach (HtmlTag t in tags) {
254 if (String.Compare(t.name, tagName, true, CultureInfo.InvariantCulture) == 0)
258 return HtmlTextWriterTag.Unknown;
261 internal static string StaticGetTagName (HtmlTextWriterTag tagKey)
263 if ((int) tagKey < tags.Length)
264 return tags [(int) tagKey].name;
271 protected virtual string GetTagName (HtmlTextWriterTag tagKey)
273 if ((int) tagKey < tags.Length)
274 return tags [(int) tagKey].name;
279 protected bool IsAttributeDefined (HtmlTextWriterAttribute key)
282 return IsAttributeDefined (key, out value);
285 protected bool IsAttributeDefined (HtmlTextWriterAttribute key, out string value)
287 for (int i = 0; i <= attrs_pos; i ++)
288 if (attrs [i].key == key){
289 value = attrs [i].value;
297 protected bool IsStyleAttributeDefined (HtmlTextWriterStyle key)
300 return IsStyleAttributeDefined (key, out value);
303 protected bool IsStyleAttributeDefined (HtmlTextWriterStyle key, out string value)
305 for (int i = 0; i <= styles_pos; i ++)
306 if (styles [i].key == key){
307 value = styles [i].value;
315 protected virtual bool OnAttributeRender (string name, string value, HtmlTextWriterAttribute key)
320 protected virtual bool OnStyleAttributeRender (string name, string value, HtmlTextWriterStyle key)
325 protected virtual bool OnTagRender (string name, HtmlTextWriterTag key)
331 protected virtual void OutputTabs ()
337 for (int i = 0; i < Indent; i ++)
338 b.Write (tab_string);
343 protected string PopEndTag ()
345 if (tagstack_pos == -1)
346 throw new InvalidOperationException ();
353 protected void PushEndTag (string endTag)
359 void PushEndTag (HtmlTextWriterTag t)
366 protected virtual string RenderAfterContent ()
371 protected virtual string RenderAfterTag ()
376 protected virtual string RenderBeforeContent ()
381 protected virtual string RenderBeforeTag ()
386 public virtual void RenderBeginTag (string tagName)
388 if (! OnTagRender (tagName, GetTagKey (tagName)))
391 PushEndTag (tagName);
396 public virtual void RenderBeginTag (HtmlTextWriterTag tagKey)
398 if (! OnTagRender (GetTagName (tagKey), tagKey))
406 void WriteIfNotNull (string s)
415 WriteIfNotNull (RenderBeforeTag ());
416 WriteBeginTag (TagName);
419 HtmlTextWriterTag key = (int) TagKey < tags.Length ? TagKey : HtmlTextWriterTag.Unknown;
421 switch (tags [(int) key].tag_type) {
423 Write (TagRightChar);
426 Write (TagRightChar);
430 case TagType.SelfClosing:
431 Write (SelfClosingTagEnd);
435 // FIXME what do i do for self close here?
436 WriteIfNotNull (RenderBeforeContent ());
440 public virtual void RenderEndTag ()
442 // FIXME what do i do for self close here?
443 WriteIfNotNull (RenderAfterContent ());
445 HtmlTextWriterTag key = (int) TagKey < tags.Length ? TagKey : HtmlTextWriterTag.Unknown;
447 switch (tags [(int) key].tag_type) {
449 WriteEndTag (TagName);
453 WriteLineNoTabs ("");
454 WriteEndTag (TagName);
457 case TagType.SelfClosing:
461 WriteIfNotNull (RenderAfterTag ());
467 public virtual void WriteAttribute (string name, string value, bool fEncode)
472 Write (EqualsDoubleQuoteString);
473 value = EncodeAttributeValue (value, fEncode);
475 Write (DoubleQuoteChar);
480 public virtual void WriteBeginTag (string tagName)
486 public virtual void WriteEndTag (string tagName)
488 Write (EndTagLeftChars);
490 Write (TagRightChar);
493 public virtual void WriteFullBeginTag (string tagName)
497 Write (TagRightChar);
500 public virtual void WriteStyleAttribute (string name, string value)
502 WriteStyleAttribute (name, value, true);
505 public virtual void WriteStyleAttribute (string name, string value, bool fEncode)
508 if (name == "background-image") {
509 value = String.Concat ("url(", value, ")");
513 Write (StyleEqualsChar);
514 Write (EncodeAttributeValue (value, fEncode));
515 Write (SemicolonChar);
518 public override void Write (char [] buffer, int index, int count)
521 b.Write (buffer, index, count);
524 public override void Write (double value)
530 public override void Write (char value)
536 public override void Write (char [] buffer)
542 public override void Write (int value)
548 public override void Write (string format, object arg0)
551 b.Write (format, arg0);
554 public override void Write (string format, object arg0, object arg1)
557 b.Write (format, arg0, arg1);
560 public override void Write (string format, params object [] args)
563 b.Write (format, args);
566 public override void Write (string s)
572 public override void Write (long value)
578 public override void Write (object value)
584 public override void Write (float value)
590 public override void Write (bool value)
596 public virtual void WriteAttribute (string name, string value)
598 WriteAttribute (name, value, true);
601 public override void WriteLine (char value)
608 public override void WriteLine (long value)
615 public override void WriteLine (object value)
622 public override void WriteLine (double value)
629 public override void WriteLine (char [] buffer, int index, int count)
632 b.WriteLine (buffer, index, count);
636 public override void WriteLine (char [] buffer)
639 b.WriteLine (buffer);
643 public override void WriteLine (bool value)
650 public override void WriteLine ()
657 public override void WriteLine (int value)
664 public override void WriteLine (string format, object arg0, object arg1)
667 b.WriteLine (format, arg0, arg1);
671 public override void WriteLine (string format, object arg0)
674 b.WriteLine (format, arg0);
678 public override void WriteLine (string format, params object [] args)
681 b.WriteLine (format, args);
685 [CLSCompliant (false)]
686 public override void WriteLine (uint value)
693 public override void WriteLine (string s)
700 public override void WriteLine (float value)
707 public void WriteLineNoTabs (string s)
713 public override Encoding Encoding {
729 public System.IO.TextWriter InnerWriter {
738 public override string NewLine {
747 protected HtmlTextWriterTag TagKey {
749 if (tagstack_pos == -1)
750 throw new InvalidOperationException ();
752 return tagstack [tagstack_pos].key;
755 tagstack [tagstack_pos].key = value;
756 tagstack [tagstack_pos].name = GetTagName (value);
760 protected string TagName {
762 if (tagstack_pos == -1)
763 throw new InvalidOperationException ();
765 return tagstack [tagstack_pos].name;
768 tagstack [tagstack_pos].name = value;
769 tagstack [tagstack_pos].key = GetTagKey (value);
770 if (tagstack [tagstack_pos].key != HtmlTextWriterTag.Unknown)
771 tagstack [tagstack_pos].name = GetTagName (tagstack [tagstack_pos].key);
781 // These emulate generic Stack <T>, since we can't use that ;-(. _pos is the current
782 // element.IE, you edit blah [blah_pos]. I *really* want generics, sigh.
784 AddedStyle [] styles;
786 AddedTag [] tagstack;
788 int styles_pos = -1, attrs_pos = -1, tagstack_pos = -1;
792 public HtmlTextWriterTag key;
797 public HtmlTextWriterStyle key;
803 public HtmlTextWriterAttribute key;
807 void NextStyleStack ()
810 styles = new AddedStyle [16];
812 if (++styles_pos < styles.Length)
815 int nsize = styles.Length * 2;
816 AddedStyle [] ncontents = new AddedStyle [nsize];
818 Array.Copy (styles, ncontents, styles.Length);
822 void NextAttrStack ()
825 attrs = new AddedAttr [16];
827 if (++attrs_pos < attrs.Length)
830 int nsize = attrs.Length * 2;
831 AddedAttr [] ncontents = new AddedAttr [nsize];
833 Array.Copy (attrs, ncontents, attrs.Length);
839 if (tagstack == null)
840 tagstack = new AddedTag [16];
842 if (++tagstack_pos < tagstack.Length)
845 int nsize = tagstack.Length * 2;
846 AddedTag [] ncontents = new AddedTag [nsize];
848 Array.Copy (tagstack, ncontents, tagstack.Length);
849 tagstack = ncontents;
852 public const string DefaultTabString = "\t";
853 public const char DoubleQuoteChar = '"';
854 public const string EndTagLeftChars = "</";
855 public const char EqualsChar = '=';
856 public const string EqualsDoubleQuoteString = "=\"";
857 public const string SelfClosingChars = " /";
858 public const string SelfClosingTagEnd = " />";
859 public const char SemicolonChar = ';';
860 public const char SingleQuoteChar = '\'';
861 public const char SlashChar = '/';
862 public const char SpaceChar = ' ' ;
863 public const char StyleEqualsChar = ':';
864 public const char TagLeftChar = '<';
865 public const char TagRightChar = '>';
875 public HtmlTextWriterTag key;
877 public TagType tag_type;
879 public HtmlTag (HtmlTextWriterTag k, string n, TagType tt)
888 public HtmlTextWriterStyle key;
891 public HtmlStyle (HtmlTextWriterStyle k, string n)
899 struct HtmlAttribute {
900 public HtmlTextWriterAttribute key;
903 public HtmlAttribute (HtmlTextWriterAttribute k, string n)
910 static HtmlTag [] tags = {
911 new HtmlTag (HtmlTextWriterTag.Unknown, "", TagType.Block),
912 new HtmlTag (HtmlTextWriterTag.A, "a", TagType.Inline),
913 new HtmlTag (HtmlTextWriterTag.Acronym, "acronym", TagType.Inline),
914 new HtmlTag (HtmlTextWriterTag.Address, "address", TagType.Block),
915 new HtmlTag (HtmlTextWriterTag.Area, "area", TagType.Block),
916 new HtmlTag (HtmlTextWriterTag.B, "b", TagType.Inline),
917 new HtmlTag (HtmlTextWriterTag.Base, "base", TagType.SelfClosing),
918 new HtmlTag (HtmlTextWriterTag.Basefont, "basefont", TagType.SelfClosing),
919 new HtmlTag (HtmlTextWriterTag.Bdo, "bdo", TagType.Inline),
920 new HtmlTag (HtmlTextWriterTag.Bgsound, "bgsound", TagType.SelfClosing),
921 new HtmlTag (HtmlTextWriterTag.Big, "big", TagType.Inline),
922 new HtmlTag (HtmlTextWriterTag.Blockquote, "blockquote", TagType.Block),
923 new HtmlTag (HtmlTextWriterTag.Body, "body", TagType.Block),
924 new HtmlTag (HtmlTextWriterTag.Br, "br", TagType.Block),
925 new HtmlTag (HtmlTextWriterTag.Button, "button", TagType.Inline),
926 new HtmlTag (HtmlTextWriterTag.Caption, "caption", TagType.Block),
927 new HtmlTag (HtmlTextWriterTag.Center, "center", TagType.Block),
928 new HtmlTag (HtmlTextWriterTag.Cite, "cite", TagType.Inline),
929 new HtmlTag (HtmlTextWriterTag.Code, "code", TagType.Inline),
930 new HtmlTag (HtmlTextWriterTag.Col, "col", TagType.SelfClosing),
931 new HtmlTag (HtmlTextWriterTag.Colgroup, "colgroup", TagType.Block),
932 new HtmlTag (HtmlTextWriterTag.Dd, "dd", TagType.Inline),
933 new HtmlTag (HtmlTextWriterTag.Del, "del", TagType.Inline),
934 new HtmlTag (HtmlTextWriterTag.Dfn, "dfn", TagType.Inline),
935 new HtmlTag (HtmlTextWriterTag.Dir, "dir", TagType.Block),
936 new HtmlTag (HtmlTextWriterTag.Div, "div", TagType.Block),
937 new HtmlTag (HtmlTextWriterTag.Dl, "dl", TagType.Block),
938 new HtmlTag (HtmlTextWriterTag.Dt, "dt", TagType.Inline),
939 new HtmlTag (HtmlTextWriterTag.Em, "em", TagType.Inline),
940 new HtmlTag (HtmlTextWriterTag.Embed, "embed", TagType.SelfClosing),
941 new HtmlTag (HtmlTextWriterTag.Fieldset, "fieldset", TagType.Block),
942 new HtmlTag (HtmlTextWriterTag.Font, "font", TagType.Inline),
943 new HtmlTag (HtmlTextWriterTag.Form, "form", TagType.Block),
944 new HtmlTag (HtmlTextWriterTag.Frame, "frame", TagType.SelfClosing),
945 new HtmlTag (HtmlTextWriterTag.Frameset, "frameset", TagType.Block),
946 new HtmlTag (HtmlTextWriterTag.H1, "h1", TagType.Block),
947 new HtmlTag (HtmlTextWriterTag.H2, "h2", TagType.Block),
948 new HtmlTag (HtmlTextWriterTag.H3, "h3", TagType.Block),
949 new HtmlTag (HtmlTextWriterTag.H4, "h4", TagType.Block),
950 new HtmlTag (HtmlTextWriterTag.H5, "h5", TagType.Block),
951 new HtmlTag (HtmlTextWriterTag.H6, "h6", TagType.Block),
952 new HtmlTag (HtmlTextWriterTag.Head, "head", TagType.Block),
953 new HtmlTag (HtmlTextWriterTag.Hr, "hr", TagType.SelfClosing),
954 new HtmlTag (HtmlTextWriterTag.Html, "html", TagType.Block),
955 new HtmlTag (HtmlTextWriterTag.I, "i", TagType.Inline),
956 new HtmlTag (HtmlTextWriterTag.Iframe, "iframe", TagType.Block),
957 new HtmlTag (HtmlTextWriterTag.Img, "img", TagType.SelfClosing),
958 new HtmlTag (HtmlTextWriterTag.Input, "input", TagType.SelfClosing),
959 new HtmlTag (HtmlTextWriterTag.Ins, "ins", TagType.Inline),
960 new HtmlTag (HtmlTextWriterTag.Isindex, "isindex", TagType.SelfClosing),
961 new HtmlTag (HtmlTextWriterTag.Kbd, "kbd", TagType.Inline),
962 new HtmlTag (HtmlTextWriterTag.Label, "label", TagType.Inline),
963 new HtmlTag (HtmlTextWriterTag.Legend, "legend", TagType.Block),
964 new HtmlTag (HtmlTextWriterTag.Li, "li", TagType.Inline),
965 new HtmlTag (HtmlTextWriterTag.Link, "link", TagType.SelfClosing),
966 new HtmlTag (HtmlTextWriterTag.Map, "map", TagType.Block),
967 new HtmlTag (HtmlTextWriterTag.Marquee, "marquee", TagType.Block),
968 new HtmlTag (HtmlTextWriterTag.Menu, "menu", TagType.Block),
969 new HtmlTag (HtmlTextWriterTag.Meta, "meta", TagType.SelfClosing),
970 new HtmlTag (HtmlTextWriterTag.Nobr, "nobr", TagType.Inline),
971 new HtmlTag (HtmlTextWriterTag.Noframes, "noframes", TagType.Block),
972 new HtmlTag (HtmlTextWriterTag.Noscript, "noscript", TagType.Block),
973 new HtmlTag (HtmlTextWriterTag.Object, "object", TagType.Block),
974 new HtmlTag (HtmlTextWriterTag.Ol, "ol", TagType.Block),
975 new HtmlTag (HtmlTextWriterTag.Option, "option", TagType.Block),
976 new HtmlTag (HtmlTextWriterTag.P, "p", TagType.Inline),
977 new HtmlTag (HtmlTextWriterTag.Param, "param", TagType.Block),
978 new HtmlTag (HtmlTextWriterTag.Pre, "pre", TagType.Block),
979 new HtmlTag (HtmlTextWriterTag.Q, "q", TagType.Inline),
980 new HtmlTag (HtmlTextWriterTag.Rt, "rt", TagType.Block),
981 new HtmlTag (HtmlTextWriterTag.Ruby, "ruby", TagType.Block),
982 new HtmlTag (HtmlTextWriterTag.S, "s", TagType.Inline),
983 new HtmlTag (HtmlTextWriterTag.Samp, "samp", TagType.Inline),
984 new HtmlTag (HtmlTextWriterTag.Script, "script", TagType.Block),
985 new HtmlTag (HtmlTextWriterTag.Select, "select", TagType.Block),
986 new HtmlTag (HtmlTextWriterTag.Small, "small", TagType.Block),
987 new HtmlTag (HtmlTextWriterTag.Span, "span", TagType.Inline),
988 new HtmlTag (HtmlTextWriterTag.Strike, "strike", TagType.Inline),
989 new HtmlTag (HtmlTextWriterTag.Strong, "strong", TagType.Inline),
990 new HtmlTag (HtmlTextWriterTag.Style, "style", TagType.Block),
991 new HtmlTag (HtmlTextWriterTag.Sub, "sub", TagType.Inline),
992 new HtmlTag (HtmlTextWriterTag.Sup, "sup", TagType.Inline),
993 new HtmlTag (HtmlTextWriterTag.Table, "table", TagType.Block),
994 new HtmlTag (HtmlTextWriterTag.Tbody, "tbody", TagType.Block),
995 new HtmlTag (HtmlTextWriterTag.Td, "td", TagType.Inline),
996 new HtmlTag (HtmlTextWriterTag.Textarea, "textarea", TagType.Inline),
997 new HtmlTag (HtmlTextWriterTag.Tfoot, "tfoot", TagType.Block),
998 new HtmlTag (HtmlTextWriterTag.Th, "th", TagType.Inline),
999 new HtmlTag (HtmlTextWriterTag.Thead, "thead", TagType.Block),
1000 new HtmlTag (HtmlTextWriterTag.Title, "title", TagType.Block),
1001 new HtmlTag (HtmlTextWriterTag.Tr, "tr", TagType.Block),
1002 new HtmlTag (HtmlTextWriterTag.Tt, "tt", TagType.Inline),
1003 new HtmlTag (HtmlTextWriterTag.U, "u", TagType.Inline),
1004 new HtmlTag (HtmlTextWriterTag.Ul, "ul", TagType.Block),
1005 new HtmlTag (HtmlTextWriterTag.Var, "var", TagType.Inline),
1006 new HtmlTag (HtmlTextWriterTag.Wbr, "wbr", TagType.SelfClosing),
1007 new HtmlTag (HtmlTextWriterTag.Xml, "xml", TagType.Block),
1010 static HtmlAttribute [] htmlattrs = {
1011 new HtmlAttribute (HtmlTextWriterAttribute.Accesskey, "accesskey"),
1012 new HtmlAttribute (HtmlTextWriterAttribute.Align, "align"),
1013 new HtmlAttribute (HtmlTextWriterAttribute.Alt, "alt"),
1014 new HtmlAttribute (HtmlTextWriterAttribute.Background, "background"),
1015 new HtmlAttribute (HtmlTextWriterAttribute.Bgcolor, "bgcolor"),
1016 new HtmlAttribute (HtmlTextWriterAttribute.Border, "border"),
1017 new HtmlAttribute (HtmlTextWriterAttribute.Bordercolor, "bordercolor"),
1018 new HtmlAttribute (HtmlTextWriterAttribute.Cellpadding, "cellpadding"),
1019 new HtmlAttribute (HtmlTextWriterAttribute.Cellspacing, "cellspacing"),
1020 new HtmlAttribute (HtmlTextWriterAttribute.Checked, "checked"),
1021 new HtmlAttribute (HtmlTextWriterAttribute.Class, "class"),
1022 new HtmlAttribute (HtmlTextWriterAttribute.Cols, "cols"),
1023 new HtmlAttribute (HtmlTextWriterAttribute.Colspan, "colspan"),
1024 new HtmlAttribute (HtmlTextWriterAttribute.Disabled, "disabled"),
1025 new HtmlAttribute (HtmlTextWriterAttribute.For, "for"),
1026 new HtmlAttribute (HtmlTextWriterAttribute.Height, "height"),
1027 new HtmlAttribute (HtmlTextWriterAttribute.Href, "href"),
1028 new HtmlAttribute (HtmlTextWriterAttribute.Id, "id"),
1029 new HtmlAttribute (HtmlTextWriterAttribute.Maxlength, "maxlength"),
1030 new HtmlAttribute (HtmlTextWriterAttribute.Multiple, "multiple"),
1031 new HtmlAttribute (HtmlTextWriterAttribute.Name, "name"),
1032 new HtmlAttribute (HtmlTextWriterAttribute.Nowrap, "nowrap"),
1033 new HtmlAttribute (HtmlTextWriterAttribute.Onchange, "onchange"),
1034 new HtmlAttribute (HtmlTextWriterAttribute.Onclick, "onclick"),
1035 new HtmlAttribute (HtmlTextWriterAttribute.ReadOnly, "readonly"),
1036 new HtmlAttribute (HtmlTextWriterAttribute.Rows, "rows"),
1037 new HtmlAttribute (HtmlTextWriterAttribute.Rowspan, "rowspan"),
1038 new HtmlAttribute (HtmlTextWriterAttribute.Rules, "rules"),
1039 new HtmlAttribute (HtmlTextWriterAttribute.Selected, "selected"),
1040 new HtmlAttribute (HtmlTextWriterAttribute.Size, "size"),
1041 new HtmlAttribute (HtmlTextWriterAttribute.Src, "src"),
1042 new HtmlAttribute (HtmlTextWriterAttribute.Style, "style"),
1043 new HtmlAttribute (HtmlTextWriterAttribute.Tabindex, "tabindex"),
1044 new HtmlAttribute (HtmlTextWriterAttribute.Target, "target"),
1045 new HtmlAttribute (HtmlTextWriterAttribute.Title, "title"),
1046 new HtmlAttribute (HtmlTextWriterAttribute.Type, "type"),
1047 new HtmlAttribute (HtmlTextWriterAttribute.Valign, "valign"),
1048 new HtmlAttribute (HtmlTextWriterAttribute.Value, "value"),
1049 new HtmlAttribute (HtmlTextWriterAttribute.Width, "width"),
1050 new HtmlAttribute (HtmlTextWriterAttribute.Wrap, "wrap"),
1052 new HtmlAttribute (HtmlTextWriterAttribute.Abbr, "abbr"),
1053 new HtmlAttribute (HtmlTextWriterAttribute.AutoComplete, "autocomplete"),
1054 new HtmlAttribute (HtmlTextWriterAttribute.Axis, "axis"),
1055 new HtmlAttribute (HtmlTextWriterAttribute.Content, "content"),
1056 new HtmlAttribute (HtmlTextWriterAttribute.Coords, "coords"),
1057 new HtmlAttribute (HtmlTextWriterAttribute.DesignerRegion, "_designerregion"),
1058 new HtmlAttribute (HtmlTextWriterAttribute.Dir, "dir"),
1059 new HtmlAttribute (HtmlTextWriterAttribute.Headers, "headers"),
1060 new HtmlAttribute (HtmlTextWriterAttribute.Longdesc, "longdesc"),
1061 new HtmlAttribute (HtmlTextWriterAttribute.Rel, "rel"),
1062 new HtmlAttribute (HtmlTextWriterAttribute.Scope, "scope"),
1063 new HtmlAttribute (HtmlTextWriterAttribute.Shape, "shape"),
1064 new HtmlAttribute (HtmlTextWriterAttribute.Usemap, "usemap"),
1065 new HtmlAttribute (HtmlTextWriterAttribute.VCardName, "vcard_name"),
1069 static HtmlStyle [] htmlstyles = {
1070 new HtmlStyle (HtmlTextWriterStyle.BackgroundColor, "background-color"),
1071 new HtmlStyle (HtmlTextWriterStyle.BackgroundImage, "background-image"),
1072 new HtmlStyle (HtmlTextWriterStyle.BorderCollapse, "border-collapse"),
1073 new HtmlStyle (HtmlTextWriterStyle.BorderColor, "border-color"),
1074 new HtmlStyle (HtmlTextWriterStyle.BorderStyle, "border-style"),
1075 new HtmlStyle (HtmlTextWriterStyle.BorderWidth, "border-width"),
1076 new HtmlStyle (HtmlTextWriterStyle.Color, "color"),
1077 new HtmlStyle (HtmlTextWriterStyle.FontFamily, "font-family"),
1078 new HtmlStyle (HtmlTextWriterStyle.FontSize, "font-size"),
1079 new HtmlStyle (HtmlTextWriterStyle.FontStyle, "font-style"),
1080 new HtmlStyle (HtmlTextWriterStyle.FontWeight, "font-weight"),
1081 new HtmlStyle (HtmlTextWriterStyle.Height, "height"),
1082 new HtmlStyle (HtmlTextWriterStyle.TextDecoration, "text-decoration"),
1083 new HtmlStyle (HtmlTextWriterStyle.Width, "width"),
1085 new HtmlStyle (HtmlTextWriterStyle.ListStyleImage, "list-style-image"),
1086 new HtmlStyle (HtmlTextWriterStyle.ListStyleType, "list-style-type"),
1087 new HtmlStyle (HtmlTextWriterStyle.Cursor, "cursor"),
1088 new HtmlStyle (HtmlTextWriterStyle.Direction, "direction"),
1089 new HtmlStyle (HtmlTextWriterStyle.Display, "display"),
1090 new HtmlStyle (HtmlTextWriterStyle.Filter, "filter"),
1091 new HtmlStyle (HtmlTextWriterStyle.FontVariant, "font-variant"),
1092 new HtmlStyle (HtmlTextWriterStyle.Left, "left"),
1093 new HtmlStyle (HtmlTextWriterStyle.Margin, "margin"),
1094 new HtmlStyle (HtmlTextWriterStyle.MarginBottom, "margin-bottom"),
1095 new HtmlStyle (HtmlTextWriterStyle.MarginLeft, "margin-left"),
1096 new HtmlStyle (HtmlTextWriterStyle.MarginRight, "margin-right"),
1097 new HtmlStyle (HtmlTextWriterStyle.MarginTop, "margin-top"),
1098 new HtmlStyle (HtmlTextWriterStyle.Overflow, "overflow"),
1099 new HtmlStyle (HtmlTextWriterStyle.OverflowX, "overflow-x"),
1100 new HtmlStyle (HtmlTextWriterStyle.OverflowY, "overflow-y"),
1101 new HtmlStyle (HtmlTextWriterStyle.Padding, "padding"),
1102 new HtmlStyle (HtmlTextWriterStyle.PaddingBottom, "padding-bottom"),
1103 new HtmlStyle (HtmlTextWriterStyle.PaddingLeft, "padding-left"),
1104 new HtmlStyle (HtmlTextWriterStyle.PaddingRight, "padding-right"),
1105 new HtmlStyle (HtmlTextWriterStyle.PaddingTop, "padding-top"),
1106 new HtmlStyle (HtmlTextWriterStyle.Position, "position"),
1107 new HtmlStyle (HtmlTextWriterStyle.TextAlign, "text-align"),
1108 new HtmlStyle (HtmlTextWriterStyle.VerticalAlign, "vertical-align"),
1109 new HtmlStyle (HtmlTextWriterStyle.TextOverflow, "text-overflow"),
1110 new HtmlStyle (HtmlTextWriterStyle.Top, "top"),
1111 new HtmlStyle (HtmlTextWriterStyle.Visibility, "visibility"),
1112 new HtmlStyle (HtmlTextWriterStyle.WhiteSpace, "white-space"),
1113 new HtmlStyle (HtmlTextWriterStyle.ZIndex, "z-index"),
1118 public virtual bool IsValidFormAttribute (string attribute)
1124 public virtual void WriteBreak ()
1126 string br = GetTagName (HtmlTextWriterTag.Br);
1128 Write (SelfClosingTagEnd);
1131 public virtual void WriteEncodedText (string text)
1133 Write (HttpUtility.HtmlEncode (text));