Exemple #1
0
 public Spanny Append(string text, ImageSpan imageSpan)
 {
     text = "." + text;
     Append(text);
     SetSpan(imageSpan, Length() - text.Length, Length() - text.Length + 1);
     return(this);
 }
 private void UpdateNativeControl()
 {
     try
     {
         if ((Element as ItemLabel).IsLucky)
         {
             ImageSpan       span    = new ImageSpan(this.Context, Resource.Drawable.luckyStar);
             SpannableString spanStr = new SpannableString(Element.Text);
             spanStr.SetSpan(span, spanStr.Length() - 1, spanStr.Length(), SpanTypes.InclusiveExclusive);
             this.Control.SetText(spanStr, Android.Widget.TextView.BufferType.Normal);
         }
         else
         {
             if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
             {
                 this.Control.SetText(Html.FromHtml(Element.Text, FromHtmlOptions.ModeLegacy), Android.Widget.TextView.BufferType.Normal);
             }
             else
             {
                 this.Control.SetText(Html.FromHtml(Element.Text), Android.Widget.TextView.BufferType.Normal);
             }
         }
     }
     catch (System.Exception ex)
     {
         this.Control.Text = Element.Text;
         Crashes.TrackError(ex);
     }
 }
Exemple #3
0
        public override Java.Lang.ICharSequence GetPageTitleFormatted(int position)
        {
            Drawable myDrawable;

            switch (TabTypes[position])
            {
            case TabType.ALL_SHOOTS:

                myDrawable = ContextCompat.GetDrawable(context, Resource.Drawable.ic_home_white_24dp);
                break;

            case TabType.MY_SHOOTS:
                myDrawable = ContextCompat.GetDrawable(context, Resource.Drawable.ic_clapperboard);
                break;

            case TabType.EDITS:
            default:
                myDrawable = ContextCompat.GetDrawable(context, Resource.Drawable.ic_film_roll);
                break;
            }
            var sb = new SpannableString(" "); // space added before text for convenience

            myDrawable.SetBounds(0, 0, myDrawable.IntrinsicWidth, myDrawable.IntrinsicHeight);
            var span = new ImageSpan(myDrawable);

            sb.SetSpan(span, 0, sb.Length(), SpanTypes.ExclusiveExclusive);

            return(sb);
            //return new Java.Lang.String(Titles[position]);
        }
        protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data) //setimage on text view
        {
            base.OnActivityResult(requestCode, resultCode, data);
            Bitmap bitmap = null;

            switch (requestCode)
            {
            case GALLERY_REQUEST:
                if (resultCode == Result.Ok)
                {
                    Android.Net.Uri selectedImage = data.Data;
                    string          Tag           = '[' + selectedImage.LastPathSegment + ']';
                    bitmap = Multitools.decodeSampledBitmapFromUri(this, selectedImage, 2000, 2000);
                    bitmap = Multitools.getResizedBitmap(bitmap, Resources.DisplayMetrics.WidthPixels - 100, Resources.DisplayMetrics.WidthPixels - 100);

                    var        imageSpan = new ImageSpan(this, bitmap); //Find your drawable.
                    int        selStart  = EditText.SelectionEnd;
                    var        span      = EditText.EditableText.GetSpans(0, EditText.Length(), Java.Lang.Class.FromType(typeof(ImageSpan)));
                    ISpannable spann     = SpannableFactory.Instance.NewSpannable(Tag);
                    spann.SetSpan(imageSpan, 0, Tag.Length, SpanTypes.ExclusiveExclusive);
                    if (selStart != 0)
                    {
                        EditText.EditableText.Insert(selStart, "\n");
                    }
                    selStart = EditText.SelectionEnd;
                    EditText.EditableText.Insert(selStart, spann);
                    textWatcher.Editing = false;
                    EditText.EditableText.Insert(selStart + Tag.Length, "\n");
                    textWatcher.Editing = true;
                }
                break;
            }
        }
 void setImages(ICursor cursor)
 {
     if (cursor.MoveToFirst())
     {
         string path;
         long   id;
         long   start;
         long   end;
         Bitmap bitmap = null;
         do
         {
             id     = cursor.GetLong(0);
             path   = cursor.GetString(1);
             start  = cursor.GetLong(2);
             end    = cursor.GetLong(3);
             bitmap = SqlHelper.ReturnDrawableBase(id, path);
             path   = '[' + path + ']';
             var        imageSpan = new ImageSpan(this, bitmap);
             ISpannable spann     = SpannableFactory.Instance.NewSpannable(path);
             spann.SetSpan(imageSpan, 0, path.Length, SpanTypes.ExclusiveExclusive);
             textWatcher.Editing = false;
             EditText.EditableText.Replace((int)start, (int)end, spann);
         }while (cursor.MoveToNext());
     }
 } //SetImages in Text
        private void TagsEditTextOnAfterTextChanged(object sender, AfterTextChangedEventArgs e)
        {
            var length   = e.Editable.Length();
            var editable = e.Editable;

            if (length > 1 && e.Editable.CharAt(e.Editable.Length() - 1) == ' ')
            {
                var chip = ChipDrawable.CreateFromResource(Context, Resource.Xml.input_chip);
                chip.Text = editable.SubSequence(0, length);
                chip.SetBounds(0, 0, chip.IntrinsicWidth, chip.IntrinsicHeight);

                var span = new ImageSpan(chip);

                editable.SetSpan(span, 0, length, SpanTypes.ExclusiveExclusive);
            }
        }
Exemple #7
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            SetContentView(Resource.Layout.Second);

            var button = FindViewById <Button>(Resource.Id.closeButton);

            button.Click += (sender, e) => Finish();

            var imageSpan       = new ImageSpan(Application.Context, Resource.Mipmap.Icon);
            var spannableString = new SpannableString("  Close");

            spannableString.SetSpan(imageSpan, 0, 1, 0);
            button.SetText(spannableString, TextView.BufferType.Spannable);
        }
        private static void FormatImages(Context context, ISpannable spannable)
        {
            var text = spannable?.ToString();

            if (string.IsNullOrWhiteSpace(text))
            {
                return;
            }

            var matches = ImageRegex.Matches(text);

            foreach (var match in matches.ToList())
            {
                var drawable = ContextCompat.GetDrawable(context, PlaceholderImage);
                drawable.SetBounds(0, 0, drawable.IntrinsicWidth, drawable.IntrinsicHeight);

                var imageSpan = new ImageSpan(drawable, SpanAlign.Baseline);

                var clickSpan = new CustomClickableSpan();
                clickSpan.Click += (sender, e) =>
                {
                    var intent = new Intent(Intent.ActionView,
                                            Android.Net.Uri.Parse(match.Groups[2].Value));
                    context.StartActivity(intent);
                };

                spannable.SetSpan(clickSpan, match.Index, match.Index + match.Length,
                                  SpanTypes.InclusiveExclusive);

                spannable.SetSpan(imageSpan, match.Index, match.Index + match.Length,
                                  SpanTypes.InclusiveExclusive);

                if (!int.TryParse(match.Groups[1].Value, out var width))
                {
                    width = 250;
                }

                width = Math.Min(width, MaxImageWidth);

                Picasso.With(context).Load(match.Groups[2].Value)
                .Into(new DrawableTarget(spannable, match.Index, match.Index + match.Length, (int)(width * context.Resources.DisplayMetrics.Density)));
            }
        }
        private static void FormatYoutube(Context context, ISpannable spannable)
        {
            var text = spannable?.ToString();

            if (string.IsNullOrWhiteSpace(text))
            {
                return;
            }

            var matches = YoutubeRegex.Matches(text);

            var playIcon = ContextCompat.GetDrawable(context, Resource.Drawable.svg_play);

            playIcon.SetColorFilter(Color.White, PorterDuff.Mode.SrcIn);
            playIcon.SetAlpha(150);

            foreach (var match in matches.ToList())
            {
                var drawable = ContextCompat.GetDrawable(context, PlaceholderImage);
                drawable.SetBounds(0, 0, drawable.IntrinsicWidth, drawable.IntrinsicHeight);

                var imageSpan = new ImageSpan(drawable, SpanAlign.Baseline);

                var clickSpan = new CustomClickableSpan();
                clickSpan.Click += (sender, e) =>
                {
                    var intent = new Intent(Intent.ActionView,
                                            Android.Net.Uri.Parse(string.Format(YoutubeLinkUrl, match.Groups[1].Value)));
                    context.StartActivity(intent);
                };

                spannable.SetSpan(clickSpan, match.Index, match.Index + match.Length,
                                  SpanTypes.InclusiveExclusive);

                spannable.SetSpan(imageSpan, match.Index, match.Index + match.Length,
                                  SpanTypes.InclusiveExclusive);

                Picasso.With(context).Load(string.Format(YoutubeThumbnailUrl, match.Groups[1].Value))
                .Into(new DrawableTarget(spannable, match.Index, match.Index + match.Length,
                                         (int)(250 * context.Resources.DisplayMetrics.Density), playIcon));
            }
        }
            public void OnBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom @from)
            {
                var scaledBitmap = Bitmap.CreateScaledBitmap(bitmap, _width, (int)(bitmap.Height / ((float)bitmap.Width / _width)), true);

                if (_playIcon != null)
                {
                    _playIcon.SetBounds((int)(scaledBitmap.Width * .35), (int)(scaledBitmap.Height * .3),
                                        (int)(scaledBitmap.Width * .65), (int)(scaledBitmap.Height * .7));
                    _playIcon.Draw(new Canvas(scaledBitmap));
                }

                var drawable = new BitmapDrawable(Application.Context.Resources, scaledBitmap);

                drawable.SetBounds(0, 0, drawable.IntrinsicWidth, drawable.IntrinsicHeight);

                var imageSpan = new ImageSpan(drawable, SpanAlign.Baseline);

                _spannable.SetSpan(imageSpan, _start, _end,
                                   SpanTypes.InclusiveExclusive);
            }
Exemple #11
0
        private void Parse(Status status)
        {
            StringBuilder builder = new StringBuilder();

            while (index < text.Length)
            {
                switch (text[index])
                {
                case '*':
                    if (status == Status.STRONG)
                    {
                        if (Match(text, index + 1, '*'))
                        {
                            if (builder.Length > 0)
                            {
                                elems.Add(new TextSpan(builder.ToString()));
                                builder.Clear();
                            }

                            elems.Add(new StrongCloseTag());
                            index += 2;
                            return;
                        }
                    }
                    if (status == Status.EMPHASIS)
                    {
                        if (builder.Length > 0)
                        {
                            elems.Add(new TextSpan(builder.ToString()));
                            builder.Clear();
                        }

                        elems.Add(new EmphasisCloseTag());
                        index += 1;
                        return;
                    }

                    if (Match(text, index + 1, '*'))
                    {
                        // **
                        if (builder.Length > 0)
                        {
                            elems.Add(new TextSpan(builder.ToString()));
                            builder.Clear();
                        }

                        index += 2;

                        elems.Add(new StrongOpenTag());

                        Parse(Status.STRONG);
                    }
                    else
                    {
                        // *
                        if (builder.Length > 0)
                        {
                            elems.Add(new TextSpan(builder.ToString()));
                            builder.Clear();
                        }

                        index += 1;

                        elems.Add(new EmphasisOpenTag());

                        Parse(Status.EMPHASIS);
                    }
                    break;

                case '`':
                    if (builder.Length > 0)
                    {
                        elems.Add(new TextSpan(builder.ToString()));
                        builder.Clear();
                    }

                    // `XXXXXXXXXXXXXXXXXXX`
                    CodeSpan codeSpan = ParseCode(text, ref index);
                    if (codeSpan != null)
                    {
                        elems.Add(codeSpan);
                    }

                    break;

                case '\\':
                    if (index + 1 < text.Length)
                    {
                        // \?
                        builder.Append(text[index + 1]);
                        index += 2;
                    }
                    else
                    {
                        // \マークは消える
                        index += 1;
                    }
                    break;

                case '[':
                    if (Match(text, index + 1, '['))
                    {
                        // [[
                        if (builder.Length > 0)
                        {
                            elems.Add(new TextSpan(builder.ToString()));
                            builder.Clear();
                        }

                        HyperlinkSpan tag = ParseUrlHyperlink(text, ref index);
                        if (tag != null)
                        {
                            elems.Add(tag);
                        }
                        continue;
                    }
                    else
                    {
                        // [
                        if (builder.Length > 0)
                        {
                            elems.Add(new TextSpan(builder.ToString()));
                            builder.Clear();
                        }

                        HyperlinkSpan tag = ParseHyperlink(text, ref index);
                        if (tag != null)
                        {
                            elems.Add(tag);
                        }
                    }
                    break;

                case '!':
                    if (Match(text, index + 1, '['))
                    {
                        // ![
                        if (builder.Length > 0)
                        {
                            elems.Add(new TextSpan(builder.ToString()));
                            builder.Clear();
                        }

                        ImageSpan tag = ParseImage(text, ref index);
                        if (tag != null)
                        {
                            elems.Add(tag);
                        }
                        continue;
                    }
                    break;

                case '<':
                    string element;
                    Dictionary <string, string> attrs;
                    bool closed;

                    if (ParseHtmlTagClose(text, ref index, out element))
                    {
                        if (builder.Length > 0)
                        {
                            elems.Add(new TextSpan(builder.ToString()));
                            builder.Clear();
                        }

                        if (status == Status.HTML_EM)
                        {
                            if (element.ToLower() == "em")
                            {
                                elems.Add(new EmphasisCloseTag());
                                return;
                            }
                        }
                        else if (status == Status.HTML_STRONG)
                        {
                            if (element.ToLower() == "strong")
                            {
                                elems.Add(new StrongCloseTag());
                                return;
                            }
                        }
                        else if (status == Status.HTML_DEL)
                        {
                            if (element.ToLower() == "del")
                            {
                                elems.Add(new StrikethroughCloseTag());
                                return;
                            }
                        }
                        else if (status == Status.HTML_SUP)
                        {
                            if (element.ToLower() == "sup")
                            {
                                elems.Add(new SuperscriptCloseTag());
                                return;
                            }
                        }
                        else if (status == Status.HTML_SUB)
                        {
                            if (element.ToLower() == "sub")
                            {
                                elems.Add(new SubscriptCloseTag());
                                return;
                            }
                        }
                        else if (status == Status.HTML_SMALL)
                        {
                            if (element.ToLower() == "small")
                            {
                                elems.Add(new SmallCloseTag());
                                return;
                            }
                        }

                        throw new MdocParseException("予期せぬHTMLタグを検出しました。", line);
                    }
                    else if (ParseHtmlTagOpen(text, ref index, out closed, out element, out attrs))
                    {
                        if (builder.Length > 0)
                        {
                            elems.Add(new TextSpan(builder.ToString()));
                            builder.Clear();
                        }
                        element = element.ToLower();
                        if (element == "em")
                        {
                            elems.Add(new EmphasisOpenTag());

                            if (closed)
                            {
                                elems.Add(new EmphasisCloseTag());
                            }
                            else
                            {
                                Parse(Status.HTML_EM);
                            }
                        }
                        else if (element == "strong")
                        {
                            elems.Add(new StrongOpenTag());

                            if (closed)
                            {
                                elems.Add(new StrongCloseTag());
                            }
                            else
                            {
                                Parse(Status.HTML_STRONG);
                            }
                        }
                        else if (element == "del")
                        {
                            elems.Add(new StrikethroughOpenTag());

                            if (closed)
                            {
                                elems.Add(new StrikethroughCloseTag());
                            }
                            else
                            {
                                Parse(Status.HTML_DEL);
                            }
                        }
                        else if (element == "sup")
                        {
                            elems.Add(new SuperscriptOpenTag());

                            if (closed)
                            {
                                elems.Add(new SuperscriptCloseTag());
                            }
                            else
                            {
                                Parse(Status.HTML_SUP);
                            }
                        }
                        else if (element == "sub")
                        {
                            elems.Add(new SubscriptOpenTag());

                            if (closed)
                            {
                                elems.Add(new SubscriptCloseTag());
                            }
                            else
                            {
                                Parse(Status.HTML_SUB);
                            }
                        }
                        else if (element == "small")
                        {
                            elems.Add(new SmallOpenTag());

                            if (closed)
                            {
                                elems.Add(new SmallCloseTag());
                            }
                            else
                            {
                                Parse(Status.HTML_SMALL);
                            }
                        }
                        else
                        {
                            throw new MdocParseException("予期せぬHTMLタグを検出しました。", line);
                        }
                    }
                    break;

                default:
                    builder.Append(text[index]);
                    index += 1;
                    break;
                }
            }

            if (builder.Length > 0)
            {
                elems.Add(new TextSpan(builder.ToString()));
                builder.Clear();
            }

            if (status == Status.EMPHASIS)
            {
                throw new MdocParseException(MessageResource.EmphasisError, line);
            }
            if (status == Status.STRONG)
            {
                throw new MdocParseException(MessageResource.BoldError, line);
            }
            if (status == Status.HTML_DEL)
            {
                throw new MdocParseException(MessageResource.HtmlDelError, line);
            }
            if (status == Status.HTML_EM)
            {
                throw new MdocParseException(MessageResource.HtmlEmError, line);
            }
            if (status == Status.HTML_STRONG)
            {
                throw new MdocParseException(MessageResource.HtmlStrongError, line);
            }
            if (status == Status.HTML_SUP)
            {
                throw new MdocParseException(MessageResource.HtmlSupError, line);
            }
            if (status == Status.HTML_SUB)
            {
                throw new MdocParseException(MessageResource.HtmlSubError, line);
            }
            if (status == Status.HTML_SMALL)
            {
                throw new MdocParseException(MessageResource.HtmlSmallError, line);
            }
        }
Exemple #12
0
        private static bool AddImages(Context context, SpannableString spannable)
        {
            string pattern = "\\Q[img src=\\E([a-zA-Z0-9_]+?)\\Q/]\\E";

            //MatchCollection m = Regex.Matches(spannable, pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
            //foreach (Match match in m)
            //    Console.WriteLine("{0} (duplicates '{1}') at position {2}", match.Value, match.Groups[1].Value, match.Index);


            Java.Util.Regex.Pattern refImg = Java.Util.Regex.Pattern.Compile(pattern);
            bool hasChanges = false;

            Matcher matcher = refImg.Matcher(spannable);

            while (matcher.Find())
            {
                bool set = true;
                foreach (ImageSpan span in spannable.GetSpans(matcher.Start(), matcher.End(), Java.Lang.Class.FromType(typeof(ImageSpan))))
                {
                    if (spannable.GetSpanStart(span) >= matcher.Start() && spannable.GetSpanEnd(span) <= matcher.End())
                    {
                        spannable.RemoveSpan(span);
                    }
                    else
                    {
                        set = false;
                        break;
                    }
                }

                string resname = spannable.SubSequence(matcher.Start(1), matcher.End(1)).ToString().Trim();
                //int id = context.Resources.GetIdentifier(resname, "drawable", context.PackageName);
                if (set)
                {
                    hasChanges = true;

                    int  identifier = context.Resources.GetIdentifier("modezoneedit", "drawable", context.PackageName);
                    bool isSvg = true; Bitmap bitmap2 = null;
                    if (isSvg)
                    {
                        SvgBitmapDrawable oo = SvgFactory.GetDrawable(context.Resources, identifier);
                        //oo.Mutate().SetColorFilter(0xffff0000, Android.Graphics.PorterDuff.Mode.Multiply);
                        Bitmap bitmap = Bitmap.CreateBitmap(oo.Picture.Width, oo.Picture.Height, Bitmap.Config.Argb8888);
                        Canvas canvas = new Canvas(bitmap);
                        canvas.DrawPicture(oo.Picture);
                        bitmap2 = Bitmap.CreateScaledBitmap(bitmap, (int)(bitmap.Width * 0.3), (int)(bitmap.Height * 0.3), false);
                    }
                    else
                    {
                        bitmap2 = BitmapFactory.DecodeResource(context.Resources, identifier);
                        bitmap2 = Bitmap.CreateScaledBitmap(bitmap2, (int)(bitmap2.Width * 0.3), (int)(bitmap2.Height * 0.3), false);
                    }

                    ImageSpan span = new ImageSpan(context, bitmap2);
                    spannable.SetSpan(span, matcher.Start(), matcher.End(), SpanTypes.ExclusiveExclusive);

                    /*spannable.SetSpan(new ImageSpan(context, id),
                     * matcher.Start(),
                     * matcher.End(),
                     * SpanTypes.ExclusiveExclusive
                     * );*/
                }
                //if (isLastPoint) canvas.DrawColor(Color.Green, PorterDuff.Mode.SrcAtop);

                //Bitmap b = BitmapFactory.DecodeResource(context.Resources, Resource.Drawable.ModeZoneEdit);
            }
            return(hasChanges);
        }
Exemple #13
0
        private void WriteText(TextWriter writer, TextElement[] elems)
        {
            foreach (TextElement i in elems)
            {
                if (i is TextSpan)
                {
                    TextSpan s = (TextSpan)i;

                    writer.Write(Escape(s.Text));
                }
                else if (i is CodeSpan)
                {
                    CodeSpan s = (CodeSpan)i;

                    writer.Write(Escape(s.Text));
                }
                else if (i is EmphasisOpenTag)
                {
                    writer.Write("<em>");
                }
                else if (i is EmphasisCloseTag)
                {
                    writer.Write("</em>");
                }
                else if (i is StrongOpenTag)
                {
                    writer.Write("<strong>");
                }
                else if (i is StrongCloseTag)
                {
                    writer.Write("</strong>");
                }
                else if (i is StrikethroughOpenTag)
                {
                    writer.Write("<strike>");
                }
                else if (i is StrikethroughCloseTag)
                {
                    writer.Write("</strike>");
                }
                else if (i is SuperscriptOpenTag)
                {
                    writer.Write("<sup>");
                }
                else if (i is SuperscriptCloseTag)
                {
                    writer.Write("</sup>");
                }
                else if (i is SubscriptOpenTag)
                {
                    writer.Write("<sub>");
                }
                else if (i is SubscriptCloseTag)
                {
                    writer.Write("</sub>");
                }
                else if (i is SmallOpenTag)
                {
                    writer.Write("<small>");
                }
                else if (i is SmallCloseTag)
                {
                    writer.Write("</small>");
                }
                else if (i is HyperlinkSpan)
                {
                    HyperlinkSpan s = (HyperlinkSpan)i;
                    writer.Write("<a href=\"{1}\">{0}</a>", Escape(s.Text), Escape(s.Href));
                }
                else if (i is ImageSpan)
                {
                    ImageSpan s = (ImageSpan)i;
                    writer.Write("<img src=\"{1}\" alt=\"{0}\"/>", Escape(s.Text), Escape(s.Source));
                }
            }
        }