예제 #1
0
        public static string DeEntitize(string text)
        {
            if (text == null)
            {
                return(null);
            }
            if (text.Length == 0)
            {
                return(text);
            }
#if !SALTARELLE
            StringBuilder entity = null;
            StringBuilder sb     = null;
#endif
            bool flag = false;
            HtmlEntity.ParseState parseState = HtmlEntity.ParseState.Text;
            for (int i = 0; i < text.Length; i++)
            {
                switch (parseState)
                {
                case HtmlEntity.ParseState.Text:
                {
                    char c = text[i];
                    if (c == '&')
                    {
                        parseState = HtmlEntity.ParseState.EntityStart;
                    }
                    else
                    {
                        if (flag)
                        {
                            sb.Append(text[i]);
                        }
                    }
                    break;
                }

                case HtmlEntity.ParseState.EntityStart:
                {
                    if (!flag)
                    {
                        flag = true;
                        if (sb == null)
                        {
#if SALTARELLE
                            sb = new StringBuilder(text.Length);
#else
                            sb = ReseekableStringBuilder.AcquirePooledStringBuilder();
#endif
                        }
                        else
                        {
                            sb.Length = 0;
                        }
                        sb.Append(text, 0, i - 1);
                        if (entity == null)
                        {
#if SALTARELLE
                            entity = new StringBuilder(10);
#else
                            entity = ReseekableStringBuilder.AcquirePooledStringBuilder();
#endif
                        }
                        entity.Length = 0;
                    }
                    char c2 = text[i];
                    if (c2 == ';' || c2 == '<' || c2 == '"' || c2 == '\'' || HtmlEntity.IsWhiteSpace(c2))
                    {
                        bool flag2 = c2 == ';';
                        if (!flag2)
                        {
                            i--;
                        }
                        if (entity.Length == 0)
                        {
                            if (c2 == ';')
                            {
                                sb.Append("&;");
                            }
                            else
                            {
                                sb.Append('&');
                            }
                        }
                        else
                        {
                            if (entity[0] == '#')
                            {
                                string text2 = entity.ToString();
                                try
                                {
                                    string text3 = text2.SubstringCached(1).Trim().ToLowerFast();
                                    int    fromBase;
                                    if (text3.StartsWith("x"))
                                    {
                                        fromBase = 16;
                                        text3    = text3.SubstringCached(1);
                                    }
                                    else
                                    {
                                        fromBase = 10;
                                    }
#if SALTARELLE
                                    int num = int.Parse(text3, fromBase);
#else
                                    int num = Convert.ToInt32(text3, fromBase);
#endif
                                    if (num > 65535)
                                    {
#if SALTARELLE
                                        sb.Append(StringFromCodePoint(num));
#else
                                        sb.Append(char.ConvertFromUtf32(num));
#endif
                                    }
                                    else
                                    {
                                        sb.Append((char)num);
                                    }
                                    goto IL_235;
                                }
                                catch
                                {
                                    sb.Append("&#" + text2 + ";");
                                    goto IL_235;
                                }
                                goto IL_1DC;
                            }
                            goto IL_1DC;
IL_235:
                            entity.Remove(0, entity.Length);
                            goto IL_24B;
IL_1DC:
                            int num2;
#if SALTARELLE
                            num2 = HtmlEntity._entityValue[entity.ToStringCached()];
                            if (!Script.IsNullOrUndefined(num2))
                            {
                                sb.Append((char)num2);
                                goto IL_235;
                            }
#else
                            if (HtmlEntity._entityValue.TryGetValue(entity.ToStringCached(), out num2))
                            {
                                int num3 = num2;
                                sb.Append((char)num3);
                                goto IL_235;
                            }
#endif
                            sb.Append('&');
                            sb.Append(entity);
                            if (flag2)
                            {
                                sb.Append(';');
                                goto IL_235;
                            }
                            goto IL_235;
                        }
IL_24B:
                        parseState = HtmlEntity.ParseState.Text;
                    }
                    else
                    {
                        if (c2 == '&')
                        {
                            sb.Append("&" + entity);
                            entity.Remove(0, entity.Length);
                        }
                        else
                        {
                            entity.Append(text[i]);
                            if (entity.Length > HtmlEntity._maxEntitySize)
                            {
                                parseState = HtmlEntity.ParseState.Text;
                                sb.Append("&" + entity);
                                entity.Remove(0, entity.Length);
                            }
                        }
                    }
                    break;
                }
                }
            }
            if (parseState == HtmlEntity.ParseState.EntityStart && flag)
            {
                sb.Append("&" + entity);
            }
            if (!flag)
            {
                return(text);
            }
            return(sb.ToStringCached());
        }
예제 #2
0
        static HtmlEntity()
        {
#if SALTARELLE
            HtmlEntity._entityName  = new JsDictionary <int, string>();
            HtmlEntity._entityValue = new JsDictionary <string, int>();
#else
            HtmlEntity._entityName  = new Dictionary <int, string>();
            HtmlEntity._entityValue = new Dictionary <string, int>();
#endif
            HtmlEntity.AddPair("apos", 39);
            HtmlEntity.AddPair("nbsp", 160);
            HtmlEntity.AddPair("iexcl", 161);
            HtmlEntity.AddPair("cent", 162);
            HtmlEntity.AddPair("pound", 163);
            HtmlEntity.AddPair("curren", 164);
            HtmlEntity.AddPair("yen", 165);
            HtmlEntity.AddPair("brvbar", 166);
            HtmlEntity.AddPair("sect", 167);
            HtmlEntity.AddPair("uml", 168);
            HtmlEntity.AddPair("copy", 169);
            HtmlEntity.AddPair("ordf", 170);
            HtmlEntity.AddPair("laquo", 171);
            HtmlEntity.AddPair("not", 172);
            HtmlEntity.AddPair("shy", 173);
            HtmlEntity.AddPair("reg", 174);
            HtmlEntity.AddPair("macr", 175);
            HtmlEntity.AddPair("deg", 176);
            HtmlEntity.AddPair("plusmn", 177);
            HtmlEntity.AddPair("sup2", 178);
            HtmlEntity.AddPair("sup3", 179);
            HtmlEntity.AddPair("acute", 180);
            HtmlEntity.AddPair("micro", 181);
            HtmlEntity.AddPair("para", 182);
            HtmlEntity.AddPair("middot", 183);
            HtmlEntity.AddPair("cedil", 184);
            HtmlEntity.AddPair("sup1", 185);
            HtmlEntity.AddPair("ordm", 186);
            HtmlEntity.AddPair("raquo", 187);
            HtmlEntity.AddPair("frac14", 188);
            HtmlEntity.AddPair("frac12", 189);
            HtmlEntity.AddPair("frac34", 190);
            HtmlEntity.AddPair("iquest", 191);
            HtmlEntity.AddPair("Agrave", 192);
            HtmlEntity.AddPair("Aacute", 193);
            HtmlEntity.AddPair("Acirc", 194);
            HtmlEntity.AddPair("Atilde", 195);
            HtmlEntity.AddPair("Auml", 196);
            HtmlEntity.AddPair("Aring", 197);
            HtmlEntity.AddPair("AElig", 198);
            HtmlEntity.AddPair("Ccedil", 199);
            HtmlEntity.AddPair("Egrave", 200);
            HtmlEntity.AddPair("Eacute", 201);
            HtmlEntity.AddPair("Ecirc", 202);
            HtmlEntity.AddPair("Euml", 203);
            HtmlEntity.AddPair("Igrave", 204);
            HtmlEntity.AddPair("Iacute", 205);
            HtmlEntity.AddPair("Icirc", 206);
            HtmlEntity.AddPair("Iuml", 207);
            HtmlEntity.AddPair("ETH", 208);
            HtmlEntity.AddPair("Ntilde", 209);
            HtmlEntity.AddPair("Ograve", 210);
            HtmlEntity.AddPair("Oacute", 211);
            HtmlEntity.AddPair("Ocirc", 212);
            HtmlEntity.AddPair("Otilde", 213);
            HtmlEntity.AddPair("Ouml", 214);
            HtmlEntity.AddPair("times", 215);
            HtmlEntity.AddPair("Oslash", 216);
            HtmlEntity.AddPair("Ugrave", 217);
            HtmlEntity.AddPair("Uacute", 218);
            HtmlEntity.AddPair("Ucirc", 219);
            HtmlEntity.AddPair("Uuml", 220);
            HtmlEntity.AddPair("Yacute", 221);
            HtmlEntity.AddPair("THORN", 222);
            HtmlEntity.AddPair("szlig", 223);
            HtmlEntity.AddPair("agrave", 224);
            HtmlEntity.AddPair("aacute", 225);
            HtmlEntity.AddPair("acirc", 226);
            HtmlEntity.AddPair("atilde", 227);
            HtmlEntity.AddPair("auml", 228);
            HtmlEntity.AddPair("aring", 229);
            HtmlEntity.AddPair("aelig", 230);
            HtmlEntity.AddPair("ccedil", 231);
            HtmlEntity.AddPair("egrave", 232);
            HtmlEntity.AddPair("eacute", 233);
            HtmlEntity.AddPair("ecirc", 234);
            HtmlEntity.AddPair("euml", 235);
            HtmlEntity.AddPair("igrave", 236);
            HtmlEntity.AddPair("iacute", 237);
            HtmlEntity.AddPair("icirc", 238);
            HtmlEntity.AddPair("iuml", 239);
            HtmlEntity.AddPair("eth", 240);
            HtmlEntity.AddPair("ntilde", 241);
            HtmlEntity.AddPair("ograve", 242);
            HtmlEntity.AddPair("oacute", 243);
            HtmlEntity.AddPair("ocirc", 244);
            HtmlEntity.AddPair("otilde", 245);
            HtmlEntity.AddPair("ouml", 246);
            HtmlEntity.AddPair("divide", 247);
            HtmlEntity.AddPair("oslash", 248);
            HtmlEntity.AddPair("ugrave", 249);
            HtmlEntity.AddPair("uacute", 250);
            HtmlEntity.AddPair("ucirc", 251);
            HtmlEntity.AddPair("uuml", 252);
            HtmlEntity.AddPair("yacute", 253);
            HtmlEntity.AddPair("thorn", 254);
            HtmlEntity.AddPair("yuml", 255);
            HtmlEntity.AddPair("fnof", 402);
            HtmlEntity.AddPair("Alpha", 913);
            HtmlEntity.AddPair("Beta", 914);
            HtmlEntity.AddPair("Gamma", 915);
            HtmlEntity.AddPair("Delta", 916);
            HtmlEntity.AddPair("Epsilon", 917);
            HtmlEntity.AddPair("Zeta", 918);
            HtmlEntity.AddPair("Eta", 919);
            HtmlEntity.AddPair("Theta", 920);
            HtmlEntity.AddPair("Iota", 921);
            HtmlEntity.AddPair("Kappa", 922);
            HtmlEntity.AddPair("Lambda", 923);
            HtmlEntity.AddPair("Mu", 924);
            HtmlEntity.AddPair("Nu", 925);
            HtmlEntity.AddPair("Xi", 926);
            HtmlEntity.AddPair("Omicron", 927);
            HtmlEntity.AddPair("Pi", 928);
            HtmlEntity.AddPair("Rho", 929);
            HtmlEntity.AddPair("Sigma", 931);
            HtmlEntity.AddPair("Tau", 932);
            HtmlEntity.AddPair("Upsilon", 933);
            HtmlEntity.AddPair("Phi", 934);
            HtmlEntity.AddPair("Chi", 935);
            HtmlEntity.AddPair("Psi", 936);
            HtmlEntity.AddPair("Omega", 937);
            HtmlEntity.AddPair("alpha", 945);
            HtmlEntity.AddPair("beta", 946);
            HtmlEntity.AddPair("gamma", 947);
            HtmlEntity.AddPair("delta", 948);
            HtmlEntity.AddPair("epsilon", 949);
            HtmlEntity.AddPair("zeta", 950);
            HtmlEntity.AddPair("eta", 951);
            HtmlEntity.AddPair("theta", 952);
            HtmlEntity.AddPair("iota", 953);
            HtmlEntity.AddPair("kappa", 954);
            HtmlEntity.AddPair("lambda", 955);
            HtmlEntity.AddPair("mu", 956);
            HtmlEntity.AddPair("nu", 957);
            HtmlEntity.AddPair("xi", 958);
            HtmlEntity.AddPair("omicron", 959);
            HtmlEntity.AddPair("pi", 960);
            HtmlEntity.AddPair("rho", 961);
            HtmlEntity.AddPair("sigmaf", 962);
            HtmlEntity.AddPair("sigma", 963);
            HtmlEntity.AddPair("tau", 964);
            HtmlEntity.AddPair("upsilon", 965);
            HtmlEntity.AddPair("phi", 966);
            HtmlEntity.AddPair("chi", 967);
            HtmlEntity.AddPair("psi", 968);
            HtmlEntity.AddPair("omega", 969);
            HtmlEntity.AddPair("thetasym", 977);
            HtmlEntity.AddPair("upsih", 978);
            HtmlEntity.AddPair("piv", 982);
            HtmlEntity.AddPair("bull", 8226);
            HtmlEntity.AddPair("hellip", 8230);
            HtmlEntity.AddPair("prime", 8242);
            HtmlEntity.AddPair("Prime", 8243);
            HtmlEntity.AddPair("oline", 8254);
            HtmlEntity.AddPair("frasl", 8260);
            HtmlEntity.AddPair("weierp", 8472);
            HtmlEntity.AddPair("image", 8465);
            HtmlEntity.AddPair("real", 8476);
            HtmlEntity.AddPair("trade", 8482);
            HtmlEntity.AddPair("alefsym", 8501);
            HtmlEntity.AddPair("larr", 8592);
            HtmlEntity.AddPair("uarr", 8593);
            HtmlEntity.AddPair("rarr", 8594);
            HtmlEntity.AddPair("darr", 8595);
            HtmlEntity.AddPair("harr", 8596);
            HtmlEntity.AddPair("crarr", 8629);
            HtmlEntity.AddPair("lArr", 8656);
            HtmlEntity.AddPair("uArr", 8657);
            HtmlEntity.AddPair("rArr", 8658);
            HtmlEntity.AddPair("dArr", 8659);
            HtmlEntity.AddPair("hArr", 8660);
            HtmlEntity.AddPair("forall", 8704);
            HtmlEntity.AddPair("part", 8706);
            HtmlEntity.AddPair("exist", 8707);
            HtmlEntity.AddPair("empty", 8709);
            HtmlEntity.AddPair("nabla", 8711);
            HtmlEntity.AddPair("isin", 8712);
            HtmlEntity.AddPair("notin", 8713);
            HtmlEntity.AddPair("ni", 8715);
            HtmlEntity.AddPair("prod", 8719);
            HtmlEntity.AddPair("sum", 8721);
            HtmlEntity.AddPair("minus", 8722);
            HtmlEntity.AddPair("lowast", 8727);
            HtmlEntity.AddPair("radic", 8730);
            HtmlEntity.AddPair("prop", 8733);
            HtmlEntity.AddPair("infin", 8734);
            HtmlEntity.AddPair("ang", 8736);
            HtmlEntity.AddPair("and", 8743);
            HtmlEntity.AddPair("or", 8744);
            HtmlEntity.AddPair("cap", 8745);
            HtmlEntity.AddPair("cup", 8746);
            HtmlEntity.AddPair("int", 8747);
            HtmlEntity.AddPair("there4", 8756);
            HtmlEntity.AddPair("sim", 8764);
            HtmlEntity.AddPair("cong", 8773);
            HtmlEntity.AddPair("asymp", 8776);
            HtmlEntity.AddPair("ne", 8800);
            HtmlEntity.AddPair("equiv", 8801);
            HtmlEntity.AddPair("le", 8804);
            HtmlEntity.AddPair("ge", 8805);
            HtmlEntity.AddPair("sub", 8834);
            HtmlEntity.AddPair("sup", 8835);
            HtmlEntity.AddPair("nsub", 8836);
            HtmlEntity.AddPair("sube", 8838);
            HtmlEntity.AddPair("supe", 8839);
            HtmlEntity.AddPair("oplus", 8853);
            HtmlEntity.AddPair("otimes", 8855);
            HtmlEntity.AddPair("perp", 8869);
            HtmlEntity.AddPair("sdot", 8901);
            HtmlEntity.AddPair("lceil", 8968);
            HtmlEntity.AddPair("rceil", 8969);
            HtmlEntity.AddPair("lfloor", 8970);
            HtmlEntity.AddPair("rfloor", 8971);
            HtmlEntity.AddPair("lang", 9001);
            HtmlEntity.AddPair("rang", 9002);
            HtmlEntity.AddPair("loz", 9674);
            HtmlEntity.AddPair("spades", 9824);
            HtmlEntity.AddPair("clubs", 9827);
            HtmlEntity.AddPair("hearts", 9829);
            HtmlEntity.AddPair("diams", 9830);
            HtmlEntity.AddPair("quot", 34);
            HtmlEntity.AddPair("amp", 38);
            HtmlEntity.AddPair("lt", 60);
            HtmlEntity.AddPair("gt", 62);
            HtmlEntity.AddPair("OElig", 338);
            HtmlEntity.AddPair("oelig", 339);
            HtmlEntity.AddPair("Scaron", 352);
            HtmlEntity.AddPair("scaron", 353);
            HtmlEntity.AddPair("Yuml", 376);
            HtmlEntity.AddPair("circ", 710);
            HtmlEntity.AddPair("tilde", 732);
            HtmlEntity.AddPair("ensp", 8194);
            HtmlEntity.AddPair("emsp", 8195);
            HtmlEntity.AddPair("thinsp", 8201);
            HtmlEntity.AddPair("zwnj", 8204);
            HtmlEntity.AddPair("zwj", 8205);
            HtmlEntity.AddPair("lrm", 8206);
            HtmlEntity.AddPair("rlm", 8207);
            HtmlEntity.AddPair("ndash", 8211);
            HtmlEntity.AddPair("mdash", 8212);
            HtmlEntity.AddPair("lsquo", 8216);
            HtmlEntity.AddPair("rsquo", 8217);
            HtmlEntity.AddPair("sbquo", 8218);
            HtmlEntity.AddPair("ldquo", 8220);
            HtmlEntity.AddPair("rdquo", 8221);
            HtmlEntity.AddPair("bdquo", 8222);
            HtmlEntity.AddPair("dagger", 8224);
            HtmlEntity.AddPair("Dagger", 8225);
            HtmlEntity.AddPair("permil", 8240);
            HtmlEntity.AddPair("lsaquo", 8249);
            HtmlEntity.AddPair("rsaquo", 8250);
            HtmlEntity.AddPair("euro", 8364);
            HtmlEntity._maxEntitySize = 9;
        }
예제 #3
0
        internal void WriteTo(TextWriter outText, bool writeDocumentNode)
        {
            switch (this._nodetype)
            {
            case HtmlNodeType.Document:
                if (this._ownerdocument.OptionOutputAsXml)
                {
#if SALTARELLE
                    outText.Write("<?xml version=\"1.0\"?>");
#else
                    outText.Write("<?xml version=\"1.0\" encoding=\"" + (this._ownerdocument.DeclaredEncoding ?? Encoding.UTF8).WebName + "\"?>");
#endif
                    if (this._ownerdocument.DocumentNode.HasChildNodes)
                    {
                        int num = this._ownerdocument.DocumentNode.ChildNodes.Count;
                        if (num > 0)
                        {
                            HtmlNode xmlDeclaration = this._ownerdocument.GetXmlDeclaration();
                            if (xmlDeclaration != null)
                            {
                                num--;
                            }
                            if (num > 1)
                            {
                                if (this._ownerdocument.OptionOutputUpperCase)
                                {
                                    outText.Write("<SPAN>");
                                    this.WriteContentTo(outText);
                                    outText.Write("</SPAN>");
                                    return;
                                }
                                outText.Write("<span>");
                                this.WriteContentTo(outText);
                                outText.Write("</span>");
                                return;
                            }
                        }
                    }
                }
                if (writeDocumentNode)
                {
                    outText.Write("<?document");
                    this.WriteAttributes(outText, false);
                    outText.Write("?>");
                }
                this.WriteContentTo(outText);
                return;

            case HtmlNodeType.Element:
            {
                string text = this._ownerdocument.OptionOutputUpperCase ? this.TagName.ToUpper() : this.TagName;
                if (this._ownerdocument.OptionOutputOriginalCase)
                {
                    text = this.OriginalName;
                }
                if (this._ownerdocument.OptionOutputAsXml)
                {
                    if (text.Length <= 0)
                    {
                        break;
                    }
                    if (text[0] == '?')
                    {
                        return;
                    }
                    if (text.Trim().Length == 0)
                    {
                        return;
                    }
                    text = HtmlDocument.GetXmlName(text);
                }
                outText.Write("<" + text);
                this.WriteAttributes(outText, false);
                if (this.HasChildNodes)
                {
                    outText.Write(">");
                    bool flag = false;
                    if (this._ownerdocument.OptionOutputAsXml && HtmlNode.IsCDataElement(this.TagName))
                    {
                        flag = true;
                        outText.Write("\r\n//<![CDATA[\r\n");
                    }
                    if (flag)
                    {
                        if (this.HasChildNodes)
                        {
                            this.ChildNodes[0].WriteTo(outText);
                        }
                        outText.Write("\r\n//]]>//\r\n");
                    }
                    else
                    {
                        this.WriteContentTo(outText);
                    }
                    outText.Write("</" + text);
                    if (!this._ownerdocument.OptionOutputAsXml)
                    {
                        this.WriteAttributes(outText, true);
                    }
                    outText.Write(">");
                    return;
                }
                if (HtmlNode.IsEmptyElement(this.TagName))
                {
                    if (this._ownerdocument.OptionWriteEmptyNodes || this._ownerdocument.OptionOutputAsXml)
                    {
                        outText.Write(" />");
                        return;
                    }
                    if (this.TagName.Length > 0 && this.TagName[0] == '?')
                    {
                        outText.Write("?");
                    }
                    outText.Write(">");
                    return;
                }
                else
                {
                    outText.Write("></" + text + ">");
                }
                break;
            }

            case HtmlNodeType.Comment:
            {
                string text2 = ((HtmlCommentNode)this).Comment;
                if (this._ownerdocument.OptionOutputAsXml)
                {
                    outText.Write("<!--" + HtmlNode.GetXmlComment((HtmlCommentNode)this) + " -->");
                    return;
                }
                outText.Write(text2);
                return;
            }

            case HtmlNodeType.Text:
            {
                HtmlTextNode htmlTextNode = (HtmlTextNode)this;
                string       text2        = htmlTextNode.Text;
                if (!htmlTextNode.IsPcData)
                {
                    outText.Write(HtmlEntity.Entitize(text2));
                    return;
                }
                bool optionOutputAsXml = this._ownerdocument.OptionOutputAsXml;
                if (optionOutputAsXml)
                {
                    outText.Write("<![CDATA[");
                }
                outText.Write(htmlTextNode.Text);
                if (optionOutputAsXml)
                {
                    outText.Write("]]>");
                    return;
                }
                break;
            }

            default:
                return;
            }
        }