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); }
public string ToString(IFormatProvider provider) { return(PlainString.ToString(provider)); }
public TypeCode GetTypeCode() { return(PlainString.GetTypeCode()); }
IEnumerator <char> IEnumerable <char> .GetEnumerator() { return(PlainString.GetEnumerator()); }
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; //} }