| HtmlTagId Enumeration |
HTML tag identifiers.
Namespace: MimeKit.TextAssembly: MimeKit (in MimeKit.dll) Version: 4.7.1
Syntax Members Member name | Value | Description |
---|
Unknown | 0 |
An unknown HTML tag identifier.
|
A | 1 |
The HTML <a> tag.
|
Abbr | 2 |
The HTML <abbr> tag.
|
Acronym | 3 |
The HTML <acronym> tag.
|
Address | 4 |
The HTML <address> tag.
|
Applet | 5 |
The HTML <applet> tag.
|
Area | 6 |
The HTML <area> tag.
|
Article | 7 |
The HTML <article> tag.
|
Aside | 8 |
The HTML <aside> tag.
|
Audio | 9 |
The HTML <audio> tag.
|
B | 10 |
The HTML <b> tag.
|
Base | 11 |
The HTML <base> tag.
|
BaseFont | 12 |
The HTML <basefont> tag.
|
Bdi | 13 |
The HTML <bdi> tag.
|
Bdo | 14 |
The HTML <bdo> tag.
|
BGSound | 15 |
The HTML <bgsound> tag.
|
Big | 16 |
The HTML <big> tag.
|
Blink | 17 |
The HTML <blink> tag.
|
BlockQuote | 18 |
The HTML <blockquote> tag.
|
Body | 19 |
The HTML <body> tag.
|
Br | 20 |
The HTML <br> tag.
|
Button | 21 |
The HTML <button> tag.
|
Canvas | 22 |
The HTML <canvas> tag.
|
Caption | 23 |
The HTML <caption> tag.
|
Center | 24 |
The HTML <center> tag.
|
Cite | 25 |
The HTML <cite> tag.
|
Code | 26 |
The HTML <code> tag.
|
Col | 27 |
The HTML <col> tag.
|
ColGroup | 28 |
The HTML <colgroup> tag.
|
Command | 29 |
The HTML <command> tag.
|
Comment | 30 |
The HTML comment tag.
|
DataList | 31 |
The HTML <datalist> tag.
|
DD | 32 |
The HTML <dd> tag.
|
Del | 33 |
The HTML <del> tag.
|
Details | 34 |
The HTML <details> tag.
|
Dfn | 35 |
The HTML <dfn> tag.
|
Dialog | 36 |
The HTML <dialog> tag.
|
Dir | 37 |
The HTML <dir> tag.
|
Div | 38 |
The HTML <div> tag.
|
DL | 39 |
The HTML <dl> tag.
|
DT | 40 |
The HTML <dt> tag.
|
EM | 41 |
The HTML <em> tag.
|
Embed | 42 |
The HTML <embed> tag.
|
FieldSet | 43 |
The HTML <fieldset> tag.
|
FigCaption | 44 |
The HTML <figcaption> tag.
|
Figure | 45 |
The HTML <figure> tag.
|
Font | 46 |
The HTML <font> tag.
|
Footer | 47 |
The HTML <footer> tag.
|
Form | 48 |
The HTML <form> tag.
|
Frame | 49 |
The HTML <frame> tag.
|
FrameSet | 50 |
The HTML <frameset> tag.
|
H1 | 51 |
The HTML <h1> tag.
|
H2 | 52 |
The HTML <h2> tag.
|
H3 | 53 |
The HTML <h3> tag.
|
H4 | 54 |
The HTML <h4> tag.
|
H5 | 55 |
The HTML <h5> tag.
|
H6 | 56 |
The HTML <h6> tag.
|
Head | 57 |
The HTML <head> tag.
|
Header | 58 |
The HTML <header> tag.
|
HR | 59 |
The HTML <hr> tag.
|
Html | 60 |
The HTML <html> tag.
|
I | 61 |
The HTML <i> tag.
|
IFrame | 62 |
The HTML <iframe> tag.
|
Image | 63 |
The HTML <img> tag.
|
Input | 64 |
The HTML <input> tag.
|
Ins | 65 |
The HTML <ins> tag.
|
IsIndex | 66 |
The HTML <isindex> tag.
|
Kbd | 67 |
The HTML <kbd> tag.
|
Keygen | 68 |
The HTML <keygen> tag.
|
Label | 69 |
The HTML <label> tag.
|
Legend | 70 |
The HTML <legend> tag.
|
LI | 71 |
The HTML <li> tag.
|
Link | 72 |
The HTML <link> tag.
|
Listing | 73 |
The HTML <listing> tag.
|
Main | 74 |
The HTML <main> tag.
|
Map | 75 |
The HTML <map> tag.
|
Mark | 76 |
The HTML <mark> tag.
|
Marquee | 77 |
The HTML <marquee> tag.
|
Menu | 78 |
The HTML <menu> tag.
|
MenuItem | 79 |
The HTML <menuitem> tag.
|
Meta | 80 |
The HTML <meta> tag.
|
Meter | 81 |
The HTML <meter> tag.
|
Nav | 82 |
The HTML <nav> tag.
|
NextId | 83 |
The HTML <nextid> tag.
|
NoBR | 84 |
The HTML <nobr> tag.
|
NoEmbed | 85 |
The HTML <noembed> tag.
|
NoFrames | 86 |
The HTML <noframes> tag.
|
NoScript | 87 |
The HTML <noscript> tag.
|
Object | 88 |
The HTML <object> tag.
|
OL | 89 |
The HTML <ol> tag.
|
OptGroup | 90 |
The HTML <optgroup> tag.
|
Option | 91 |
The HTML <option> tag.
|
Output | 92 |
The HTML <output> tag.
|
P | 93 |
The HTML <p> tag.
|
Param | 94 |
The HTML <param> tag.
|
PlainText | 95 |
The HTML <plaintext> tag.
|
Pre | 96 |
The HTML <pre> tag.
|
Progress | 97 |
The HTML <progress> tag.
|
Q | 98 |
The HTML <q> tag.
|
RP | 99 |
The HTML <rp> tag.
|
RT | 100 |
The HTML <rt> tag.
|
Ruby | 101 |
The HTML <ruby> tag.
|
S | 102 |
The HTML <s> tag.
|
Samp | 103 |
The HTML <samp> tag.
|
Script | 104 |
The HTML <script> tag.
|
Section | 105 |
The HTML <section> tag.
|
Select | 106 |
The HTML <select> tag.
|
Small | 107 |
The HTML <small> tag.
|
Source | 108 |
The HTML <source> tag.
|
Span | 109 |
The HTML <span> tag.
|
Strike | 110 |
The HTML <strike> tag.
|
Strong | 111 |
The HTML <strong> tag.
|
Style | 112 |
The HTML <style> tag.
|
Sub | 113 |
The HTML <sub> tag.
|
Summary | 114 |
The HTML <summary> tag.
|
Sup | 115 |
The HTML <sup> tag.
|
Table | 116 |
The HTML <table> tag.
|
TBody | 117 |
The HTML <tbody> tag.
|
TD | 118 |
The HTML <td> tag.
|
TextArea | 119 |
The HTML <textarea> tag.
|
Tfoot | 120 |
The HTML <tfoot> tag.
|
TH | 121 |
The HTML <th> tag.
|
THead | 122 |
The HTML <thead> tag.
|
Time | 123 |
The HTML <time> tag.
|
Title | 124 |
The HTML <title> tag.
|
TR | 125 |
The HTML <tr> tag.
|
Track | 126 |
The HTML <track> tag.
|
TT | 127 |
The HTML <tt> tag.
|
U | 128 |
The HTML <u> tag.
|
UL | 129 |
The HTML <ul> tag.
|
Var | 130 |
The HTML <var> tag.
|
Video | 131 |
The HTML <video> tag.
|
Wbr | 132 |
The HTML <wbr> tag.
|
Xml | 133 |
The HTML <xml> tag.
|
Xmp | 134 |
The HTML <xmp> tag.
|
Remarks
HTML tag identifiers.
Example
class HtmlPreviewVisitor : MimeVisitor
{
List<MultipartRelated> stack = new List<MultipartRelated> ();
List<MimeEntity> attachments = new List<MimeEntity> ();
string body;
public HtmlPreviewVisitor ()
{
}
public IList<MimeEntity> Attachments {
get { return attachments; }
}
public string HtmlBody {
get { return body ?? string.Empty; }
}
protected override void VisitMultipartAlternative (MultipartAlternative alternative)
{
for (int i = alternative.Count - 1; i >= 0 && body == null; i--)
alternative[i].Accept (this);
}
protected override void VisitMultipartRelated (MultipartRelated related)
{
var root = related.Root;
stack.Add (related);
root.Accept (this);
stack.RemoveAt (stack.Count - 1);
}
bool TryGetImage (string url, out MimePart image)
{
UriKind kind;
int index;
Uri uri;
if (Uri.IsWellFormedUriString (url, UriKind.Absolute))
kind = UriKind.Absolute;
else if (Uri.IsWellFormedUriString (url, UriKind.Relative))
kind = UriKind.Relative;
else
kind = UriKind.RelativeOrAbsolute;
try {
uri = new Uri (url, kind);
} catch {
image = null;
return false;
}
for (int i = stack.Count - 1; i >= 0; i--) {
if ((index = stack[i].IndexOf (uri)) == -1)
continue;
image = stack[i][index] as MimePart;
return image != null;
}
image = null;
return false;
}
string GetDataUri (MimePart image)
{
using (var memory = new MemoryStream ()) {
image.Content.DecodeTo (memory);
var buffer = memory.GetBuffer ();
var length = (int) memory.Length;
var base64 = Convert.ToBase64String (buffer, 0, length);
return string.Format ("data:{0};base64,{1}", image.ContentType.MimeType, base64);
}
}
void HtmlTagCallback (HtmlTagContext ctx, HtmlWriter htmlWriter)
{
if (ctx.TagId == HtmlTagId.Meta && !ctx.IsEndTag) {
bool isContentType = false;
ctx.WriteTag (htmlWriter, false);
foreach (var attribute in ctx.Attributes) {
if (attribute.Id == HtmlAttributeId.Charset) {
htmlWriter.WriteAttributeName (attribute.Name);
htmlWriter.WriteAttributeValue ("utf-8");
} else if (isContentType && attribute.Id == HtmlAttributeId.Content) {
htmlWriter.WriteAttributeName (attribute.Name);
htmlWriter.WriteAttributeValue ("text/html; charset=utf-8");
} else {
if (attribute.Id == HtmlAttributeId.HttpEquiv && attribute.Value != null
&& attribute.Value.Equals ("Content-Type", StringComparison.OrdinalIgnoreCase))
isContentType = true;
htmlWriter.WriteAttribute (attribute);
}
}
} else if (ctx.TagId == HtmlTagId.Image && !ctx.IsEndTag && stack.Count > 0) {
ctx.WriteTag (htmlWriter, false);
foreach (var attribute in ctx.Attributes) {
if (attribute.Id == HtmlAttributeId.Src) {
if (!TryGetImage (attribute.Value, out var image)) {
htmlWriter.WriteAttribute (attribute);
continue;
}
var dataUri = GetDataUri (image);
htmlWriter.WriteAttributeName (attribute.Name);
htmlWriter.WriteAttributeValue (dataUri);
} else {
htmlWriter.WriteAttribute (attribute);
}
}
} else if (ctx.TagId == HtmlTagId.Body && !ctx.IsEndTag) {
ctx.WriteTag (htmlWriter, false);
foreach (var attribute in ctx.Attributes) {
if (attribute.Name.Equals ("oncontextmenu", StringComparison.OrdinalIgnoreCase))
continue;
htmlWriter.WriteAttribute (attribute);
}
htmlWriter.WriteAttribute ("oncontextmenu", "return false;");
} else {
ctx.WriteTag (htmlWriter, true);
}
}
protected override void VisitTextPart (TextPart entity)
{
TextConverter converter;
if (body != null) {
attachments.Add (entity);
return;
}
if (entity.IsHtml) {
converter = new HtmlToHtml {
HtmlTagCallback = HtmlTagCallback
};
} else if (entity.IsFlowed) {
var flowed = new FlowedToHtml ();
string delsp;
if (entity.ContentType.Parameters.TryGetValue ("delsp", out delsp))
flowed.DeleteSpace = delsp.Equals ("yes", StringComparison.OrdinalIgnoreCase);
converter = flowed;
} else {
converter = new TextToHtml ();
}
body = converter.Convert (entity.Text);
}
protected override void VisitTnefPart (TnefPart entity)
{
attachments.AddRange (entity.ExtractAttachments ());
}
protected override void VisitMessagePart (MessagePart entity)
{
attachments.Add (entity);
}
protected override void VisitMimePart (MimePart entity)
{
attachments.Add (entity);
}
}
See Also