Exemplo n.º 1
0
        public ANSIString Replace(ANSIString search, ANSIString replace)
        {
            int        index = 0;
            ANSIString ret   = new ANSIString(this);

            do
            {
                index = PlainString.IndexOf(search.PlainString, index);
                if (index > 0)
                {
                    for (int i = 0; i < search.Count; ++i)
                    {
                        ret._String[index + i] = replace[i];
                    }
                }
            }while (index > 0);

            return(ret);
        }
Exemplo n.º 2
0
 public string ToString(IFormatProvider provider)
 {
     return(PlainString.ToString(provider));
 }
Exemplo n.º 3
0
 public TypeCode GetTypeCode()
 {
     return(PlainString.GetTypeCode());
 }
Exemplo n.º 4
0
 IEnumerator <char> IEnumerable <char> .GetEnumerator()
 {
     return(PlainString.GetEnumerator());
 }
Exemplo n.º 5
0
        static public IEnumerable <FrameworkElement> GetUIElementFromString(string input, Action <Uri> tapAction)
        {
            StringBuilder curPlainString = new StringBuilder();

            int pDepth = 0;

            foreach (IHtmlEntity entity in stringHtmlConverter.Convert(input))
            {
                if (entity is PlainString)
                {
                    // 바로 출력하지는 않고
                    PlainString plainString = (PlainString)entity;
                    curPlainString.Append(plainString.Content);
                }
                else if (entity is Tag)
                {
                    Tag tag = (Tag)entity;

                    if (tag.Name.Equals("br"))
                    {
                        curPlainString.AppendLine();
                        continue;
                    }

                    // p는 0에서 1일때는 반응 안함
                    // 1에서 0으로 내려올때

                    if (tag.Name == "p")
                    {
                        if (tag.Kind == Tag.TagKind.Open)
                        {
                            pDepth++;
                        }
                        else if (tag.Kind == Tag.TagKind.Close)
                        {
                            pDepth--;
                        }

                        if ((tag.Kind == Tag.TagKind.Open && pDepth > 1) ||
                            (tag.Kind == Tag.TagKind.Close && pDepth == 0) ||
                            (tag.Kind == Tag.TagKind.OpenAndClose))
                        {
                            foreach (var obj in MakeTextBlocks(curPlainString.ToString(), tapAction))
                            {
                                yield return(obj);
                            }
                            curPlainString.Clear();
                            continue;
                        }
                    }

                    if (tag.Name == "div")
                    {
                        if (curPlainString.Length != 0)
                        {
                            foreach (var obj in MakeTextBlocks(curPlainString.ToString(), tapAction))
                            {
                                yield return(obj);
                            }
                            curPlainString.Clear();
                        }
                        continue;
                    }

                    // 이미지 처리.. 몰라
                    if (tag.Name.Equals("img", StringComparison.CurrentCultureIgnoreCase))
                    {
                        string url;
                        if (tag.Attrs.TryGetValue("src", out url))
                        {
                            var pic  = new Picture(url, "");
                            var grid = new Grid();
                            grid.Tag = pic;

                            yield return(grid);
                        }
                    }
                }
            }

            if (curPlainString.Length != 0)
            {
                foreach (var obj in MakeTextBlocks(curPlainString.ToString(), tapAction))
                {
                    yield return(obj);
                }
            }

            // 1. <br> <br />은 \n으로 바꿈
            // 2. <p> </p>는 하나의 paragraph로 처리
            // 3. <div>도 마찬가지..
            // 4. <img src=는 image로 바꿈;
            // 5. <a>

            //string text = Regex.Replace(input, "\\s+", " ");
            //text = Regex.Replace(text, "(<br[^>]*>)|(<br[^/]*/>)", "\n", RegexOptions.IgnoreCase);

            //// p를 만나면 거기서 끊는다
            //foreach (var par in Regex.Split(text, "(<p[^>]*>)|(<div[^>]*>)", RegexOptions.IgnoreCase))
            //{

            //    yield return textBlock;
            //}
        }