Exemplo n.º 1
0
        private static IEnumerable <Inline> GenerateDigestSink(this string text)
        {
            foreach (var tok in Tokenizer.Tokenize(text))
            {
                switch (tok.Kind)
                {
                case TokenKind.AtLink:
                    yield return(TextElementGenerator.GenerateHyperlink(tok.Text,
                                                                        () => InternalLinkClicked(InternalLinkKind.User, tok.Text)));

                    break;

                case TokenKind.Hashtag:
                    yield return(TextElementGenerator.GenerateHyperlink(tok.Text,
                                                                        () => InternalLinkClicked(InternalLinkKind.Hash, tok.Text)));

                    break;

                case TokenKind.Url:
                    yield return(TextElementGenerator.GenerateHyperlink(tok.Text,
                                                                        Regex.IsMatch(tok.Text, TweetUrlRegex)
                                ? new Action(() => InternalLinkClicked(InternalLinkKind.Tweet, tok.Text))
                                : new Action(() => ExternalLinkClicked(tok.Text))));

                    break;

                case TokenKind.Text:
                default:
                    yield return(TextElementGenerator.GenerateRun(tok.Text));

                    break;
                }
            }
        }
Exemplo n.º 2
0
        public override IEnumerable <Inline> ToTarget(TweetViewModel input, object parameter)
        {
            if (!Application.Current.Dispatcher.CheckAccess())
            {
                return(Application.Current.Dispatcher.Invoke(new Action(() => ToTarget(input, parameter)), null) as IEnumerable <Inline>);
            }

            bool referenceOriginal = parameter as string != null?bool.Parse(parameter as string) : false;

            var status = input.Status as TwitterStatus;

            if (referenceOriginal && status != null && status.RetweetedOriginal != null)
            {
                status = status.RetweetedOriginal;
            }
            if (status != null)
            {
                var   src = status.Source;
                Match m   = null;
                if (!String.IsNullOrEmpty(src) && (m = SourceRegex.Match(src.Replace("\\", ""))).Success)
                {
                    return(new[] { TextElementGenerator.GenerateHyperlink(
                                       m.Groups[2].Value,
                                       () => Browser.Start(m.Groups[1].Value)) });
                }
                else
                {
                    return(new[] { TextElementGenerator.GenerateRun(status.Source) });
                }
            }
            // ELSE
            return(new Run[0]);
        }
Exemplo n.º 3
0
        private static IEnumerable <Inline> GenerateSink(string text)
        {
            foreach (var tok in Tokenizer.Tokenize(text))
            {
                var ctt = tok.Text;
                switch (tok.Kind)
                {
                case TokenKind.AtLink:
                    yield return(TextElementGenerator.GenerateHyperlink(ctt,
                                                                        () => InternalLinkClicked(InternalLinkKind.User, ctt)));

                    break;

                case TokenKind.Hashtag:
                    var hashlink = TextElementGenerator.GenerateHyperlink(ctt,
                                                                          () => InternalLinkClicked(InternalLinkKind.Hash, ctt));
                    hashlink.ToolTip = new TextBlock(new Run("Ctrlキーを押しながらクリックすると、ブラウザを開いて検索します..."));
                    yield return(hashlink);

                    break;

                case TokenKind.Url:
                    String resolved = null;
                    try
                    {
                        resolved = new Uri(ctt).PunyDecode().OriginalString;
                    }
                    catch (UriFormatException) { }
                    var urllink = Regex.IsMatch(ctt, TweetUrlRegex)
                            ? TextElementGenerator.GenerateHyperlink(
                        String.IsNullOrEmpty(resolved) ? ctt : resolved,
                        () => InternalLinkClicked(InternalLinkKind.Tweet, ctt))
                            : TextElementGenerator.GenerateHyperlink(
                        String.IsNullOrEmpty(resolved) ? ctt : resolved,
                        () => ExternalLinkClicked(ctt));

                    switch (Setting.Instance.TweetExperienceProperty.UrlResolveMode)
                    {
                    case UrlResolve.OnPointed:
                    case UrlResolve.Never:
                        urllink.ToolTip = new UrlTooltip(ctt);
                        break;

                    case UrlResolve.OnReceived:
                        string nurl = null;
                        if ((nurl = UrlResolveCacheStorage.Lookup(ctt)) == null)
                        {
                            nurl = ShortenManager.Extract(ctt);
                            if (nurl != ctt)
                            {
                                // resolved
                                UrlResolveCacheStorage.AddResolved(ctt, nurl);
                            }
                            else
                            {
                                // unresolved
                                UrlResolveCacheStorage.AddResolved(ctt, ctt);
                            }
                        }
                        if (String.IsNullOrEmpty(nurl))
                        {
                            urllink.ToolTip = new UrlTooltip(ctt);
                        }
                        else
                        {
                            urllink.ToolTip = new UrlTooltip(nurl);
                        }
                        break;
                    }
                    ToolTipService.SetShowDuration(urllink, Setting.Instance.TweetExperienceProperty.UrlTooltipShowLength);
                    yield return(urllink);

                    break;

                case TokenKind.Text:
                default:
                    yield return(TextElementGenerator.GenerateRun(ctt));

                    break;
                }
            }
        }