static private CreateRetweetUnofficial ( string statusHtml, bool multiline ) : string | ||
statusHtml | string | TweetFormatterによって整形された状態のHTML |
multiline | bool | trueであればBRタグを改行に、falseであればスペースに変換します |
return | string |
internal static string CreateRetweetUnofficial(string statusHtml, bool multiline)
{
// TweetFormatterクラスによって整形された状態のHTMLを元のツイートに復元します
// 通常の URL
statusHtml = Regex.Replace(statusHtml, "<a href=\"(?<href>.+?)\" title=\"(?<title>.+?)\">(?<text>.+?)</a>", "${title}");
// メンション
statusHtml = Regex.Replace(statusHtml, "<a class=\"mention\" href=\"(?<href>.+?)\">(?<text>.+?)</a>", "${text}");
// ハッシュタグ
statusHtml = Regex.Replace(statusHtml, "<a class=\"hashtag\" href=\"(?<href>.+?)\">(?<text>.+?)</a>", "${text}");
// <br> 除去
if (multiline)
statusHtml = statusHtml.Replace("<br>", Environment.NewLine);
else
statusHtml = statusHtml.Replace("<br>", " ");
// は本来であれば U+00A0 (NON-BREAK SPACE) に置換すべきですが、
// 現状では半角スペースの代用として を使用しているため U+0020 に置換します
statusHtml = statusHtml.Replace(" ", " ");
return WebUtility.HtmlDecode(statusHtml);
}
public void CreateRetweetUnofficial_WithFormatterTest() { // TweetFormatterでHTMLに整形 → CreateRetweetUnofficialで復元 までの動作が正しく行えているか var text = "#てすと @TwitterAPI \n http://t.co/KYi7vMZzRt"; var entities = new TwitterEntity[] { new TwitterEntityHashtag { Indices = new[] { 0, 4 }, Text = "てすと", }, new TwitterEntityMention { Indices = new[] { 5, 16 }, Id = 6253282L, Name = "Twitter API", ScreenName = "twitterapi", }, new TwitterEntityUrl { Indices = new[] { 19, 41 }, DisplayUrl = "twitter.com", ExpandedUrl = "http://twitter.com/", Url = "http://t.co/KYi7vMZzRt", }, }; var html = TweetFormatter.AutoLinkHtml(text, entities); var expected = "#てすと @TwitterAPI " + Environment.NewLine + " http://twitter.com/"; Assert.Equal(expected, TweenMain.CreateRetweetUnofficial(html, true)); }