예제 #1
0
        internal string ConvertPTag(ref PTag tag)
        {
            string result = "DataKeepTag(";

            result += '"' + tag.name + "\", [";

            int i = 0;

            foreach (string arg in tag.arguments)
            {
                if (arg.Contains("$"))
                {
                    result += '"' + arg.Replace("$", "") + '"';
                }
                else
                {
                    result += arg;
                }
                if (i != tag.arguments.Length - 1)
                {
                    result += ", ";
                }
                i++;
            }


            return(result + "])");
        }
예제 #2
0
 /// <summary>
 /// Player的标签域不能有两个同名标签
 /// </summary>
 /// <param name="Tag">如果为数字标签,数字相加</param>
 public void CreateTag(PTag Tag)
 {
     if (Owner != null && ExistTag(Tag.Name))
     {
         if (Tag is PNumberedTag)
         {
             FindPeekTag <PNumberedTag>(Tag.Name).Value += ((PNumberedTag)Tag).Value;
         }
         else
         {
             PopTag <PTag>(Tag.Name);
         }
     }
     if (Owner == null || !ExistTag(Tag.Name))
     {
         PLogger.Log("创建标签:" + Tag.Name);
         Tag.FieldList.ForEach((PTag.PTagField Field) => PLogger.Log("  域 " + Field + " = " + (Field.Field != null ? Field.Field.ToString() : "null")));
         TagList.Add(Tag);
     }
     if (Owner != null)
     {
         PNetworkManager.NetworkServer.TellClients(new PRefreshMarkStringOrder(Owner));
     }
 }
예제 #3
0
        public static string ConvertToUbb(string htmlContent, ContentConvert beforeConvert, ContentConvert afterConvert)
        {
            string msg = string.Empty;

            htmlContent = htmlContent.Replace("\n", string.Empty);
            htmlContent = htmlContent.Replace("\r", string.Empty);
            htmlContent = regScript.Replace(htmlContent, string.Empty);
            htmlContent = regStyle.Replace(htmlContent, string.Empty);
            // htmlContent = htmlContent.Trim();

            if (beforeConvert != null)
            {
                htmlContent = beforeConvert(htmlContent);
            }

            MatchCollection matchs   = regTag.Matches(htmlContent);
            int             tagIndex = 0;

            List <HtmlTagBase> tags = new List <HtmlTagBase>()
            , beginTags             = new List <HtmlTagBase>()
            , endTages   = new List <HtmlTagBase>()
            , singleTags = new List <HtmlTagBase>();

            foreach (Match m in matchs)
            {
                HtmlTagBase t;
                string      tagName = m.Groups[1].Value;

                //这里也可以根据HTML标签来反射生成Html标签类, 代码可以少很多, 但是这样性能不好。
                switch (tagName.ToLower())
                {
                case "img":
                    t = new ImgTag(tagIndex, m.Value, m.Index);
                    break;

                case "a":
                    t = new ATag(tagIndex, m.Value, m.Index);
                    break;

                case "font":
                    t = new FontTag(tagIndex, m.Value, m.Index);
                    break;

                case "span":
                    t = new SpanTag(tagIndex, m.Value, m.Index);
                    break;

                case "br":
                    t = new BrTag(tagIndex, m.Value, m.Index);
                    break;

                case "div":
                    t = new DivTag(tagIndex, m.Value, m.Index);
                    break;

                case "p":
                    t = new PTag(tagIndex, m.Value, m.Index);
                    break;

                case "table":
                    t = new TableTag(tagIndex, m.Value, m.Index);
                    break;

                case "ol":
                case "ul":
                    t = new ListTag(tagIndex, m.Value, m.Index);
                    break;

                case "td":
                case "tr":
                case "s":
                case "b":
                case "i":
                case "sub":
                case "sup":
                case "u":
                    t = new PairTag(tagIndex, m.Value, m.Index);
                    break;

                case "th":
                    t = new PairTag(tagIndex, m.Value, m.Index);
                    ((PairTag)t).UbbTag = "td";
                    break;

                case "strong":
                    t = new PairTag(tagIndex, m.Value, m.Index);
                    ((PairTag)t).UbbTag = "b";
                    break;

                case "em":
                    t = new PairTag(tagIndex, m.Value, m.Index);
                    ((PairTag)t).UbbTag = "i";
                    break;

                case "strike":
                    t = new PairTag(tagIndex, m.Value, m.Index);
                    ((PairTag)t).UbbTag = "s";
                    break;

                case "blockquote":
                    t = new PairTag(tagIndex, m.Value, m.Index);
                    ((PairTag)t).UbbTag = "indent";
                    break;

                case "h1":
                case "h2":
                case "h3":
                case "h4":
                case "h5":
                case "h6":
                    t = new HTag(tagIndex, m.Value, m.Index);
                    break;

                case "embed":
                    t = new EmbedTag(tagIndex, m.Value, m.Index);
                    break;

                default:
                    t = new HtmlTagBase(tagIndex, m.Value, m.Index);
                    break;
                }
                tagIndex++;

                t.TagList = tags;
                tags.Add(t);

                if (t.IsSingleTag)
                {
                    singleTags.Add(t);
                }
                else
                {
                    if (!t.IsEndTag)
                    {
                        beginTags.Add(t);
                    }
                    else
                    {
                        int flag = -1;
                        for (int i = beginTags.Count - 1; i >= 0; i--)
                        {
                            if (beginTags[i].TagName == t.TagName)//匹配开始标记和结束标记
                            {
                                flag = i;
                                beginTags[i].Pair = t;
                                t.Pair            = beginTags[i];
                                break;
                            }
                        }

                        if (flag >= 0)
                        {
                            for (int i = beginTags.Count - 1; i >= flag; i--)
                            {
                                beginTags.RemoveAt(i);
                            }
                        }
                    }
                }
            }

            StringBuilder builder = new StringBuilder(htmlContent);

            for (int i = 0; i < tags.Count; i++)
            {
                if (!tags[i].IsSingleTag)
                {
                    if (tags[i].Pair == null)
                    {
                        msg += tags[i].TagName + "没有对应的" + (tags[i].IsEndTag ? "开始" : "结束") + "标记\r\n";
                    }
                }
                if (!tags[i].IsEndTag || tags[i].IsSingleTag)
                {
                    builder = tags[i].ConvertToUBB(builder);
                }
            }

            //builder.Replace(" ", string.Empty);
            builder.Replace("\t", string.Empty);

            htmlContent = builder.ToString();
            htmlContent = new Regex("<.*?>").Replace(htmlContent, string.Empty);
            htmlContent = HttpUtility.HtmlDecode(htmlContent);


            if (afterConvert != null)
            {
                htmlContent = afterConvert(htmlContent);
            }

            return(htmlContent);
        }
예제 #4
0
    public static ITag Create(string str)
    {
        ITag tag    = null;
        var  strTag = CreateTag(str);
        var  value  = CreateValue(str);

        switch (strTag)
        {
        case TagConfig.START:
            tag = new StartTag();
            break;

        case TagConfig.BGM_PLAY:
            tag = new BgmPlayTag();
            break;

        case TagConfig.BGM_STOP:
            tag = new BgmStopTag();
            break;

        case TagConfig.EFFECT_SHOW:
            tag = new EffectShowTag();
            break;

        case TagConfig.END:
            tag = new EndTag();
            break;

        case TagConfig.CHARA_LOAD:
            tag = new CharaLoadTag();
            break;

        case TagConfig.BG_LOAD:
            tag = new BgLoadTag();
            break;

        case TagConfig.LOAD_EFFECT:
            tag = new LoadEffectTag();
            break;

        case TagConfig.MSG:
            tag = new MsgTag();
            break;

        case TagConfig.NAME:
            tag = new NameTag();
            break;

        case TagConfig.SE_PLAY:
            tag = new SePlayTag();
            break;

        case TagConfig.BG_SHOW:
            tag = new BgShowTag();
            break;

        case TagConfig.TITLE_HIDE:
            tag = new TitleHideTag();
            break;

        case TagConfig.TITLE_SHOW:
            tag = new TitleShowTag();
            break;

        case TagConfig.CHARA_SHOW:
            tag = new CharaShowTag();
            break;

        case TagConfig.BG_HIDE:
            tag = new BgHideTag();
            break;

        case TagConfig.CHARA_HIDE:
            tag = new CharaHideTag();
            break;

        case TagConfig.WAIT:
            tag = new WaitTag();
            break;

        case TagConfig.P:
            tag = new PTag();
            break;

        case TagConfig.ER:
            tag = new ErTag();
            break;

        case TagConfig.CAMERA_GRAIN:
            tag = new CameraGrainEffectTag();
            break;

        case TagConfig.CAMERA_COLOR:
            tag = new CameraColorEffectTag();
            break;

        case TagConfig.CAMERA_VIGNETTE:
            tag = new CameraVignetteEffectTag();
            break;

        case TagConfig.CAMERA_EFFECT_STOP:
            tag = new CameraEffectStopTag();
            break;
        }
        if (tag == null)
        {
            Debug.LogError(strTag + "にマッチするタグはありませんでした");
            return(null);
        }

        tag.Create(value);
        return(tag);
    }