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;
64 [MonoTODO("Does nothing")]
65 protected static void RegisterAttribute (string name, HtmlTextWriterAttribute key)
69 [MonoTODO("Does nothing")]
70 protected static void RegisterStyle (string name, HtmlTextWriterStyle key)
74 [MonoTODO("Does nothing")]
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 ()
198 protected HtmlTextWriterAttribute GetAttributeKey (string attrName)
200 // I don't think we want to binary search
201 // because there might be something added to
202 // the enum later. Do we really need anything
203 // faster than a linear search?
205 foreach (HtmlAttribute t in htmlattrs) {
206 if (String.Compare(t.name, attrName, true, CultureInfo.InvariantCulture) == 0)
210 return (HtmlTextWriterAttribute)(-1);
213 protected string GetAttributeName (HtmlTextWriterAttribute attrKey)
215 if ((int) attrKey < htmlattrs.Length)
216 return htmlattrs [(int) attrKey].name;
221 protected HtmlTextWriterStyle GetStyleKey (string styleName)
223 // I don't think we want to binary search
224 // because there might be something added to
225 // the enum later. Do we really need anything
226 // faster than a linear search?
228 foreach (HtmlStyle t in htmlstyles) {
229 if (String.Compare(t.name, styleName, true, CultureInfo.InvariantCulture) == 0)
233 return (HtmlTextWriterStyle)(-1);
236 protected string GetStyleName (HtmlTextWriterStyle styleKey)
238 return StaticGetStyleName (styleKey);
241 protected virtual HtmlTextWriterTag GetTagKey (string tagName)
243 // I don't think we want to binary search
244 // because there might be something added to
245 // the enum later. Do we really need anything
246 // faster than a linear search?
248 foreach (HtmlTag t in tags) {
249 if (String.Compare(t.name, tagName, true, CultureInfo.InvariantCulture) == 0)
253 return HtmlTextWriterTag.Unknown;
256 internal static string StaticGetTagName (HtmlTextWriterTag tagKey)
258 if ((int) tagKey < tags.Length)
259 return tags [(int) tagKey].name;
265 protected virtual string GetTagName (HtmlTextWriterTag tagKey)
267 if ((int) tagKey < tags.Length)
268 return tags [(int) tagKey].name;
273 protected bool IsAttributeDefined (HtmlTextWriterAttribute key)
276 return IsAttributeDefined (key, out value);
279 protected bool IsAttributeDefined (HtmlTextWriterAttribute key, out string value)
281 for (int i = 0; i <= attrs_pos; i ++)
282 if (attrs [i].key == key){
283 value = attrs [i].value;
291 protected bool IsStyleAttributeDefined (HtmlTextWriterStyle key)
294 return IsStyleAttributeDefined (key, out value);
297 protected bool IsStyleAttributeDefined (HtmlTextWriterStyle key, out string value)
299 for (int i = 0; i <= styles_pos; i ++)
300 if (styles [i].key == key){
301 value = styles [i].value;
309 protected virtual bool OnAttributeRender (string name, string value, HtmlTextWriterAttribute key)
314 protected virtual bool OnStyleAttributeRender (string name, string value, HtmlTextWriterStyle key)
319 protected virtual bool OnTagRender (string name, HtmlTextWriterTag key)
325 protected virtual void OutputTabs ()
331 for (int i = 0; i < Indent; i ++)
332 b.Write (tab_string);
337 protected string PopEndTag ()
339 if (tagstack_pos == -1)
340 throw new InvalidOperationException ();
347 protected void PushEndTag (string endTag)
353 void PushEndTag (HtmlTextWriterTag t)
360 protected virtual string RenderAfterContent ()
365 protected virtual string RenderAfterTag ()
370 protected virtual string RenderBeforeContent ()
375 protected virtual string RenderBeforeTag ()
380 public virtual void RenderBeginTag (string tagName)
382 if (! OnTagRender (tagName, GetTagKey (tagName)))
385 PushEndTag (tagName);
390 public virtual void RenderBeginTag (HtmlTextWriterTag tagKey)
392 if (! OnTagRender (GetTagName (tagKey), tagKey))
400 void WriteIfNotNull (string s)
409 WriteIfNotNull (RenderBeforeTag ());
410 WriteBeginTag (TagName);
413 HtmlTextWriterTag key = (int) TagKey < tags.Length ? TagKey : HtmlTextWriterTag.Unknown;
415 switch (tags [(int) key].tag_type) {
417 Write (TagRightChar);
420 Write (TagRightChar);
424 case TagType.SelfClosing:
425 Write (SelfClosingTagEnd);
429 // FIXME what do i do for self close here?
430 WriteIfNotNull (RenderBeforeContent ());
434 public virtual void RenderEndTag ()
436 // FIXME what do i do for self close here?
437 WriteIfNotNull (RenderAfterContent ());
439 HtmlTextWriterTag key = (int) TagKey < tags.Length ? TagKey : HtmlTextWriterTag.Unknown;
441 switch (tags [(int) key].tag_type) {
443 WriteEndTag (TagName);
447 WriteLineNoTabs ("");
448 WriteEndTag (TagName);
451 case TagType.SelfClosing:
455 WriteIfNotNull (RenderAfterTag ());
461 public virtual void WriteAttribute (string name, string value, bool fEncode)
466 Write (EqualsDoubleQuoteString);
467 value = EncodeAttributeValue (value, fEncode);
469 Write (DoubleQuoteChar);
474 public virtual void WriteBeginTag (string tagName)
480 public virtual void WriteEndTag (string tagName)
482 Write (EndTagLeftChars);
484 Write (TagRightChar);
487 public virtual void WriteFullBeginTag (string tagName)
491 Write (TagRightChar);
494 public virtual void WriteStyleAttribute (string name, string value)
496 WriteStyleAttribute (name, value, true);
499 public virtual void WriteStyleAttribute (string name, string value, bool fEncode)
502 if (name == "background-image") {
503 value = String.Concat ("url(", value, ")");
507 Write (StyleEqualsChar);
508 Write (EncodeAttributeValue (value, fEncode));
509 Write (SemicolonChar);
512 public override void Write (char [] buffer, int index, int count)
515 b.Write (buffer, index, count);
518 public override void Write (double value)
524 public override void Write (char value)
530 public override void Write (char [] buffer)
536 public override void Write (int value)
542 public override void Write (string format, object arg0)
545 b.Write (format, arg0);
548 public override void Write (string format, object arg0, object arg1)
551 b.Write (format, arg0, arg1);
554 public override void Write (string format, params object [] args)
557 b.Write (format, args);
560 public override void Write (string s)
566 public override void Write (long value)
572 public override void Write (object value)
578 public override void Write (float value)
584 public override void Write (bool value)
590 public virtual void WriteAttribute (string name, string value)
592 WriteAttribute (name, value, true);
595 public override void WriteLine (char value)
602 public override void WriteLine (long value)
609 public override void WriteLine (object value)
616 public override void WriteLine (double value)
623 public override void WriteLine (char [] buffer, int index, int count)
626 b.WriteLine (buffer, index, count);
630 public override void WriteLine (char [] buffer)
633 b.WriteLine (buffer);
637 public override void WriteLine (bool value)
644 public override void WriteLine ()
651 public override void WriteLine (int value)
658 public override void WriteLine (string format, object arg0, object arg1)
661 b.WriteLine (format, arg0, arg1);
665 public override void WriteLine (string format, object arg0)
668 b.WriteLine (format, arg0);
672 public override void WriteLine (string format, params object [] args)
675 b.WriteLine (format, args);
679 [CLSCompliant (false)]
680 public override void WriteLine (uint value)
687 public override void WriteLine (string s)
694 public override void WriteLine (float value)
701 public void WriteLineNoTabs (string s)
707 public override Encoding Encoding {
723 public System.IO.TextWriter InnerWriter {
732 public override string NewLine {
741 protected HtmlTextWriterTag TagKey {
743 if (tagstack_pos == -1)
744 throw new InvalidOperationException ();
746 return tagstack [tagstack_pos].key;
749 tagstack [tagstack_pos].key = value;
750 tagstack [tagstack_pos].name = GetTagName (value);
754 protected string TagName {
756 if (tagstack_pos == -1)
757 throw new InvalidOperationException ();
759 return tagstack [tagstack_pos].name;
762 tagstack [tagstack_pos].name = value;
763 tagstack [tagstack_pos].key = GetTagKey (value);
764 if (tagstack [tagstack_pos].key != HtmlTextWriterTag.Unknown)
765 tagstack [tagstack_pos].name = GetTagName (tagstack [tagstack_pos].key);
775 // These emulate generic Stack <T>, since we can't use that ;-(. _pos is the current
776 // element.IE, you edit blah [blah_pos]. I *really* want generics, sigh.
778 AddedStyle [] styles;
780 AddedTag [] tagstack;
782 int styles_pos = -1, attrs_pos = -1, tagstack_pos = -1;
786 public HtmlTextWriterTag key;
791 public HtmlTextWriterStyle key;
797 public HtmlTextWriterAttribute key;
801 void NextStyleStack ()
804 styles = new AddedStyle [16];
806 if (++styles_pos < styles.Length)
809 int nsize = styles.Length * 2;
810 AddedStyle [] ncontents = new AddedStyle [nsize];
812 Array.Copy (styles, ncontents, styles.Length);
816 void NextAttrStack ()
819 attrs = new AddedAttr [16];
821 if (++attrs_pos < attrs.Length)
824 int nsize = attrs.Length * 2;
825 AddedAttr [] ncontents = new AddedAttr [nsize];
827 Array.Copy (attrs, ncontents, attrs.Length);
833 if (tagstack == null)
834 tagstack = new AddedTag [16];
836 if (++tagstack_pos < tagstack.Length)
839 int nsize = tagstack.Length * 2;
840 AddedTag [] ncontents = new AddedTag [nsize];
842 Array.Copy (tagstack, ncontents, tagstack.Length);
843 tagstack = ncontents;
846 public const string DefaultTabString = "\t";
847 public const char DoubleQuoteChar = '"';
848 public const string EndTagLeftChars = "</";
849 public const char EqualsChar = '=';
850 public const string EqualsDoubleQuoteString = "=\"";
851 public const string SelfClosingChars = " /";
852 public const string SelfClosingTagEnd = " />";
853 public const char SemicolonChar = ';';
854 public const char SingleQuoteChar = '\'';
855 public const char SlashChar = '/';
856 public const char SpaceChar = ' ' ;
857 public const char StyleEqualsChar = ':';
858 public const char TagLeftChar = '<';
859 public const char TagRightChar = '>';
869 public HtmlTextWriterTag key;
871 public TagType tag_type;
873 public HtmlTag (HtmlTextWriterTag k, string n, TagType tt)
882 public HtmlTextWriterStyle key;
885 public HtmlStyle (HtmlTextWriterStyle k, string n)
893 struct HtmlAttribute {
894 public HtmlTextWriterAttribute key;
897 public HtmlAttribute (HtmlTextWriterAttribute k, string n)
904 static HtmlTag [] tags = {
905 new HtmlTag (HtmlTextWriterTag.Unknown, "", TagType.Block),
906 new HtmlTag (HtmlTextWriterTag.A, "a", TagType.Inline),
907 new HtmlTag (HtmlTextWriterTag.Acronym, "acronym", TagType.Inline),
908 new HtmlTag (HtmlTextWriterTag.Address, "address", TagType.Block),
909 new HtmlTag (HtmlTextWriterTag.Area, "area", TagType.Block),
910 new HtmlTag (HtmlTextWriterTag.B, "b", TagType.Inline),
911 new HtmlTag (HtmlTextWriterTag.Base, "base", TagType.SelfClosing),
912 new HtmlTag (HtmlTextWriterTag.Basefont, "basefont", TagType.SelfClosing),
913 new HtmlTag (HtmlTextWriterTag.Bdo, "bdo", TagType.Inline),
914 new HtmlTag (HtmlTextWriterTag.Bgsound, "bgsound", TagType.SelfClosing),
915 new HtmlTag (HtmlTextWriterTag.Big, "big", TagType.Inline),
916 new HtmlTag (HtmlTextWriterTag.Blockquote, "blockquote", TagType.Block),
917 new HtmlTag (HtmlTextWriterTag.Body, "body", TagType.Block),
918 new HtmlTag (HtmlTextWriterTag.Br, "br", TagType.Block),
919 new HtmlTag (HtmlTextWriterTag.Button, "button", TagType.Inline),
920 new HtmlTag (HtmlTextWriterTag.Caption, "caption", TagType.Block),
921 new HtmlTag (HtmlTextWriterTag.Center, "center", TagType.Block),
922 new HtmlTag (HtmlTextWriterTag.Cite, "cite", TagType.Inline),
923 new HtmlTag (HtmlTextWriterTag.Code, "code", TagType.Inline),
924 new HtmlTag (HtmlTextWriterTag.Col, "col", TagType.SelfClosing),
925 new HtmlTag (HtmlTextWriterTag.Colgroup, "colgroup", TagType.Block),
926 new HtmlTag (HtmlTextWriterTag.Dd, "dd", TagType.Inline),
927 new HtmlTag (HtmlTextWriterTag.Del, "del", TagType.Inline),
928 new HtmlTag (HtmlTextWriterTag.Dfn, "dfn", TagType.Inline),
929 new HtmlTag (HtmlTextWriterTag.Dir, "dir", TagType.Block),
930 new HtmlTag (HtmlTextWriterTag.Div, "div", TagType.Block),
931 new HtmlTag (HtmlTextWriterTag.Dl, "dl", TagType.Block),
932 new HtmlTag (HtmlTextWriterTag.Dt, "dt", TagType.Inline),
933 new HtmlTag (HtmlTextWriterTag.Em, "em", TagType.Inline),
934 new HtmlTag (HtmlTextWriterTag.Embed, "embed", TagType.SelfClosing),
935 new HtmlTag (HtmlTextWriterTag.Fieldset, "fieldset", TagType.Block),
936 new HtmlTag (HtmlTextWriterTag.Font, "font", TagType.Inline),
937 new HtmlTag (HtmlTextWriterTag.Form, "form", TagType.Block),
938 new HtmlTag (HtmlTextWriterTag.Frame, "frame", TagType.SelfClosing),
939 new HtmlTag (HtmlTextWriterTag.Frameset, "frameset", TagType.Block),
940 new HtmlTag (HtmlTextWriterTag.H1, "h1", TagType.Block),
941 new HtmlTag (HtmlTextWriterTag.H2, "h2", TagType.Block),
942 new HtmlTag (HtmlTextWriterTag.H3, "h3", TagType.Block),
943 new HtmlTag (HtmlTextWriterTag.H4, "h4", TagType.Block),
944 new HtmlTag (HtmlTextWriterTag.H5, "h5", TagType.Block),
945 new HtmlTag (HtmlTextWriterTag.H6, "h6", TagType.Block),
946 new HtmlTag (HtmlTextWriterTag.Head, "head", TagType.Block),
947 new HtmlTag (HtmlTextWriterTag.Hr, "hr", TagType.SelfClosing),
948 new HtmlTag (HtmlTextWriterTag.Html, "html", TagType.Block),
949 new HtmlTag (HtmlTextWriterTag.I, "i", TagType.Inline),
950 new HtmlTag (HtmlTextWriterTag.Iframe, "iframe", TagType.Block),
951 new HtmlTag (HtmlTextWriterTag.Img, "img", TagType.SelfClosing),
952 new HtmlTag (HtmlTextWriterTag.Input, "input", TagType.SelfClosing),
953 new HtmlTag (HtmlTextWriterTag.Ins, "ins", TagType.Inline),
954 new HtmlTag (HtmlTextWriterTag.Isindex, "isindex", TagType.SelfClosing),
955 new HtmlTag (HtmlTextWriterTag.Kbd, "kbd", TagType.Inline),
956 new HtmlTag (HtmlTextWriterTag.Label, "label", TagType.Inline),
957 new HtmlTag (HtmlTextWriterTag.Legend, "legend", TagType.Block),
958 new HtmlTag (HtmlTextWriterTag.Li, "li", TagType.Inline),
959 new HtmlTag (HtmlTextWriterTag.Link, "link", TagType.SelfClosing),
960 new HtmlTag (HtmlTextWriterTag.Map, "map", TagType.Block),
961 new HtmlTag (HtmlTextWriterTag.Marquee, "marquee", TagType.Block),
962 new HtmlTag (HtmlTextWriterTag.Menu, "menu", TagType.Block),
963 new HtmlTag (HtmlTextWriterTag.Meta, "meta", TagType.SelfClosing),
964 new HtmlTag (HtmlTextWriterTag.Nobr, "nobr", TagType.Inline),
965 new HtmlTag (HtmlTextWriterTag.Noframes, "noframes", TagType.Block),
966 new HtmlTag (HtmlTextWriterTag.Noscript, "noscript", TagType.Block),
967 new HtmlTag (HtmlTextWriterTag.Object, "object", TagType.Block),
968 new HtmlTag (HtmlTextWriterTag.Ol, "ol", TagType.Block),
969 new HtmlTag (HtmlTextWriterTag.Option, "option", TagType.Block),
970 new HtmlTag (HtmlTextWriterTag.P, "p", TagType.Inline),
971 new HtmlTag (HtmlTextWriterTag.Param, "param", TagType.Block),
972 new HtmlTag (HtmlTextWriterTag.Pre, "pre", TagType.Block),
973 new HtmlTag (HtmlTextWriterTag.Q, "q", TagType.Inline),
974 new HtmlTag (HtmlTextWriterTag.Rt, "rt", TagType.Block),
975 new HtmlTag (HtmlTextWriterTag.Ruby, "ruby", TagType.Block),
976 new HtmlTag (HtmlTextWriterTag.S, "s", TagType.Inline),
977 new HtmlTag (HtmlTextWriterTag.Samp, "samp", TagType.Inline),
978 new HtmlTag (HtmlTextWriterTag.Script, "script", TagType.Block),
979 new HtmlTag (HtmlTextWriterTag.Select, "select", TagType.Block),
980 new HtmlTag (HtmlTextWriterTag.Small, "small", TagType.Block),
981 new HtmlTag (HtmlTextWriterTag.Span, "span", TagType.Inline),
982 new HtmlTag (HtmlTextWriterTag.Strike, "strike", TagType.Inline),
983 new HtmlTag (HtmlTextWriterTag.Strong, "strong", TagType.Inline),
984 new HtmlTag (HtmlTextWriterTag.Style, "style", TagType.Block),
985 new HtmlTag (HtmlTextWriterTag.Sub, "sub", TagType.Inline),
986 new HtmlTag (HtmlTextWriterTag.Sup, "sup", TagType.Inline),
987 new HtmlTag (HtmlTextWriterTag.Table, "table", TagType.Block),
988 new HtmlTag (HtmlTextWriterTag.Tbody, "tbody", TagType.Block),
989 new HtmlTag (HtmlTextWriterTag.Td, "td", TagType.Inline),
990 new HtmlTag (HtmlTextWriterTag.Textarea, "textarea", TagType.Inline),
991 new HtmlTag (HtmlTextWriterTag.Tfoot, "tfoot", TagType.Block),
992 new HtmlTag (HtmlTextWriterTag.Th, "th", TagType.Inline),
993 new HtmlTag (HtmlTextWriterTag.Thead, "thead", TagType.Block),
994 new HtmlTag (HtmlTextWriterTag.Title, "title", TagType.Block),
995 new HtmlTag (HtmlTextWriterTag.Tr, "tr", TagType.Block),
996 new HtmlTag (HtmlTextWriterTag.Tt, "tt", TagType.Inline),
997 new HtmlTag (HtmlTextWriterTag.U, "u", TagType.Inline),
998 new HtmlTag (HtmlTextWriterTag.Ul, "ul", TagType.Block),
999 new HtmlTag (HtmlTextWriterTag.Var, "var", TagType.Inline),
1000 new HtmlTag (HtmlTextWriterTag.Wbr, "wbr", TagType.SelfClosing),
1001 new HtmlTag (HtmlTextWriterTag.Xml, "xml", TagType.Block),
1004 static HtmlAttribute [] htmlattrs = {
1005 new HtmlAttribute (HtmlTextWriterAttribute.Accesskey, "accesskey"),
1006 new HtmlAttribute (HtmlTextWriterAttribute.Align, "align"),
1007 new HtmlAttribute (HtmlTextWriterAttribute.Alt, "alt"),
1008 new HtmlAttribute (HtmlTextWriterAttribute.Background, "background"),
1009 new HtmlAttribute (HtmlTextWriterAttribute.Bgcolor, "bgcolor"),
1010 new HtmlAttribute (HtmlTextWriterAttribute.Border, "border"),
1011 new HtmlAttribute (HtmlTextWriterAttribute.Bordercolor, "bordercolor"),
1012 new HtmlAttribute (HtmlTextWriterAttribute.Cellpadding, "cellpadding"),
1013 new HtmlAttribute (HtmlTextWriterAttribute.Cellspacing, "cellspacing"),
1014 new HtmlAttribute (HtmlTextWriterAttribute.Checked, "checked"),
1015 new HtmlAttribute (HtmlTextWriterAttribute.Class, "class"),
1016 new HtmlAttribute (HtmlTextWriterAttribute.Cols, "cols"),
1017 new HtmlAttribute (HtmlTextWriterAttribute.Colspan, "colspan"),
1018 new HtmlAttribute (HtmlTextWriterAttribute.Disabled, "disabled"),
1019 new HtmlAttribute (HtmlTextWriterAttribute.For, "for"),
1020 new HtmlAttribute (HtmlTextWriterAttribute.Height, "height"),
1021 new HtmlAttribute (HtmlTextWriterAttribute.Href, "href"),
1022 new HtmlAttribute (HtmlTextWriterAttribute.Id, "id"),
1023 new HtmlAttribute (HtmlTextWriterAttribute.Maxlength, "maxlength"),
1024 new HtmlAttribute (HtmlTextWriterAttribute.Multiple, "multiple"),
1025 new HtmlAttribute (HtmlTextWriterAttribute.Name, "name"),
1026 new HtmlAttribute (HtmlTextWriterAttribute.Nowrap, "nowrap"),
1027 new HtmlAttribute (HtmlTextWriterAttribute.Onchange, "onchange"),
1028 new HtmlAttribute (HtmlTextWriterAttribute.Onclick, "onclick"),
1029 new HtmlAttribute (HtmlTextWriterAttribute.ReadOnly, "readonly"),
1030 new HtmlAttribute (HtmlTextWriterAttribute.Rows, "rows"),
1031 new HtmlAttribute (HtmlTextWriterAttribute.Rowspan, "rowspan"),
1032 new HtmlAttribute (HtmlTextWriterAttribute.Rules, "rules"),
1033 new HtmlAttribute (HtmlTextWriterAttribute.Selected, "selected"),
1034 new HtmlAttribute (HtmlTextWriterAttribute.Size, "size"),
1035 new HtmlAttribute (HtmlTextWriterAttribute.Src, "src"),
1036 new HtmlAttribute (HtmlTextWriterAttribute.Style, "style"),
1037 new HtmlAttribute (HtmlTextWriterAttribute.Tabindex, "tabindex"),
1038 new HtmlAttribute (HtmlTextWriterAttribute.Target, "target"),
1039 new HtmlAttribute (HtmlTextWriterAttribute.Title, "title"),
1040 new HtmlAttribute (HtmlTextWriterAttribute.Type, "type"),
1041 new HtmlAttribute (HtmlTextWriterAttribute.Valign, "valign"),
1042 new HtmlAttribute (HtmlTextWriterAttribute.Value, "value"),
1043 new HtmlAttribute (HtmlTextWriterAttribute.Width, "width"),
1044 new HtmlAttribute (HtmlTextWriterAttribute.Wrap, "wrap"),
1046 new HtmlAttribute (HtmlTextWriterAttribute.Abbr, "abbr"),
1047 new HtmlAttribute (HtmlTextWriterAttribute.AutoComplete, "autocomplete"),
1048 new HtmlAttribute (HtmlTextWriterAttribute.Axis, "axis"),
1049 new HtmlAttribute (HtmlTextWriterAttribute.Content, "content"),
1050 new HtmlAttribute (HtmlTextWriterAttribute.Coords, "coords"),
1051 new HtmlAttribute (HtmlTextWriterAttribute.DesignerRegion, "_designerregion"),
1052 new HtmlAttribute (HtmlTextWriterAttribute.Dir, "dir"),
1053 new HtmlAttribute (HtmlTextWriterAttribute.Headers, "headers"),
1054 new HtmlAttribute (HtmlTextWriterAttribute.Longdesc, "longdesc"),
1055 new HtmlAttribute (HtmlTextWriterAttribute.Rel, "rel"),
1056 new HtmlAttribute (HtmlTextWriterAttribute.Scope, "scope"),
1057 new HtmlAttribute (HtmlTextWriterAttribute.Shape, "shape"),
1058 new HtmlAttribute (HtmlTextWriterAttribute.Usemap, "usemap"),
1059 new HtmlAttribute (HtmlTextWriterAttribute.VCardName, "vcard_name"),
1063 static HtmlStyle [] htmlstyles = {
1064 new HtmlStyle (HtmlTextWriterStyle.BackgroundColor, "background-color"),
1065 new HtmlStyle (HtmlTextWriterStyle.BackgroundImage, "background-image"),
1066 new HtmlStyle (HtmlTextWriterStyle.BorderCollapse, "border-collapse"),
1067 new HtmlStyle (HtmlTextWriterStyle.BorderColor, "border-color"),
1068 new HtmlStyle (HtmlTextWriterStyle.BorderStyle, "border-style"),
1069 new HtmlStyle (HtmlTextWriterStyle.BorderWidth, "border-width"),
1070 new HtmlStyle (HtmlTextWriterStyle.Color, "color"),
1071 new HtmlStyle (HtmlTextWriterStyle.FontFamily, "font-family"),
1072 new HtmlStyle (HtmlTextWriterStyle.FontSize, "font-size"),
1073 new HtmlStyle (HtmlTextWriterStyle.FontStyle, "font-style"),
1074 new HtmlStyle (HtmlTextWriterStyle.FontWeight, "font-weight"),
1075 new HtmlStyle (HtmlTextWriterStyle.Height, "height"),
1076 new HtmlStyle (HtmlTextWriterStyle.TextDecoration, "text-decoration"),
1077 new HtmlStyle (HtmlTextWriterStyle.Width, "width"),
1079 new HtmlStyle (HtmlTextWriterStyle.ListStyleImage, "list-style-image"),
1080 new HtmlStyle (HtmlTextWriterStyle.ListStyleType, "list-style-type"),
1081 new HtmlStyle (HtmlTextWriterStyle.Cursor, "cursor"),
1082 new HtmlStyle (HtmlTextWriterStyle.Direction, "direction"),
1083 new HtmlStyle (HtmlTextWriterStyle.Display, "display"),
1084 new HtmlStyle (HtmlTextWriterStyle.Filter, "filter"),
1085 new HtmlStyle (HtmlTextWriterStyle.FontVariant, "font-variant"),
1086 new HtmlStyle (HtmlTextWriterStyle.Left, "left"),
1087 new HtmlStyle (HtmlTextWriterStyle.Margin, "margin"),
1088 new HtmlStyle (HtmlTextWriterStyle.MarginBottom, "margin-bottom"),
1089 new HtmlStyle (HtmlTextWriterStyle.MarginLeft, "margin-left"),
1090 new HtmlStyle (HtmlTextWriterStyle.MarginRight, "margin-right"),
1091 new HtmlStyle (HtmlTextWriterStyle.MarginTop, "margin-top"),
1092 new HtmlStyle (HtmlTextWriterStyle.Overflow, "overflow"),
1093 new HtmlStyle (HtmlTextWriterStyle.OverflowX, "overflow-x"),
1094 new HtmlStyle (HtmlTextWriterStyle.OverflowY, "overflow-y"),
1095 new HtmlStyle (HtmlTextWriterStyle.Padding, "padding"),
1096 new HtmlStyle (HtmlTextWriterStyle.PaddingBottom, "padding-bottom"),
1097 new HtmlStyle (HtmlTextWriterStyle.PaddingLeft, "padding-left"),
1098 new HtmlStyle (HtmlTextWriterStyle.PaddingRight, "padding-right"),
1099 new HtmlStyle (HtmlTextWriterStyle.PaddingTop, "padding-top"),
1100 new HtmlStyle (HtmlTextWriterStyle.Position, "position"),
1101 new HtmlStyle (HtmlTextWriterStyle.TextAlign, "text-align"),
1102 new HtmlStyle (HtmlTextWriterStyle.VerticalAlign, "vertical-align"),
1103 new HtmlStyle (HtmlTextWriterStyle.TextOverflow, "text-overflow"),
1104 new HtmlStyle (HtmlTextWriterStyle.Top, "top"),
1105 new HtmlStyle (HtmlTextWriterStyle.Visibility, "visibility"),
1106 new HtmlStyle (HtmlTextWriterStyle.WhiteSpace, "white-space"),
1107 new HtmlStyle (HtmlTextWriterStyle.ZIndex, "z-index"),
1112 public virtual bool IsValidFormAttribute (string attribute)
1118 public virtual void WriteBreak ()
1120 string br = GetTagName (HtmlTextWriterTag.Br);
1122 Write (SelfClosingTagEnd);
1125 public virtual void WriteEncodedText (string text)
1127 Write (HttpUtility.HtmlEncode (text));