コード例 #1
0
 public virtual java.lang.CharSequence filter(java.lang.CharSequence source, int start
                                              , int end, android.text.Spanned dest, int dstart, int dend)
 {
     {
         for (int i = start; i < end; i++)
         {
             if (System.Char.IsLower(source[i]))
             {
                 char[] v = new char[end - start];
                 android.text.TextUtils.getChars(source, start, end, v, 0);
                 string s = new string(v).ToUpper();
                 if (source is android.text.Spanned)
                 {
                     android.text.SpannableString sp = new android.text.SpannableString(java.lang.CharSequenceProxy.Wrap
                                                                                            (s));
                     android.text.TextUtils.copySpansFrom((android.text.Spanned)source, start, end, null
                                                          , sp, 0);
                     return(sp);
                 }
                 else
                 {
                     return(java.lang.CharSequenceProxy.Wrap(s));
                 }
             }
         }
     }
     return(null);
 }
コード例 #2
0
        private static int getActive(java.lang.CharSequence text, object meta, int on, int
                                     @lock)
        {
            if (!(text is android.text.Spanned))
            {
                return(0);
            }
            android.text.Spanned sp = (android.text.Spanned)text;
            int flag = sp.getSpanFlags(meta);

            if (flag == LOCKED)
            {
                return(@lock);
            }
            else
            {
                if (flag != 0)
                {
                    return(on);
                }
                else
                {
                    return(0);
                }
            }
        }
コード例 #3
0
            public virtual java.lang.CharSequence filter(java.lang.CharSequence source, int start
                                                         , int end, android.text.Spanned dest, int dstart, int dend)
            {
                int keep = mMax - (dest.Length - (dend - dstart));

                if (keep <= 0)
                {
                    return(java.lang.CharSequenceProxy.Wrap(string.Empty));
                }
                else
                {
                    if (keep >= end - start)
                    {
                        return(null);
                    }
                    else
                    {
                        keep += start;
                        if (System.Char.IsHighSurrogate(source[keep - 1]))
                        {
                            --keep;
                            if (keep == start)
                            {
                                return(java.lang.CharSequenceProxy.Wrap(string.Empty));
                            }
                        }
                        return(source.SubSequence(start, keep));
                    }
                }
            }
コード例 #4
0
ファイル: TextLine.cs プロジェクト: zhouweiaccp/XobotOS
            internal SpanSet(android.text.Spanned spanned, int start, int limit)
            {
                E[] allSpans = spanned.getSpans <E>(start, limit);
                int length   = allSpans.Length;

                // These arrays may end up being too large because of empty spans
                spans      = new E[length];
                spanStarts = new int[length];
                spanEnds   = new int[length];
                spanFlags  = new int[length];
                int count = 0;

                {
                    for (int i = 0; i < length; i++)
                    {
                        E   span      = allSpans[i];
                        int spanStart = spanned.getSpanStart(span);
                        int spanEnd   = spanned.getSpanEnd(span);
                        if (spanStart == spanEnd)
                        {
                            continue;
                        }
                        int spanFlag = spanned.getSpanFlags(span);
                        int priority = spanFlag & android.text.SpannedClass.SPAN_PRIORITY;
                        if (priority != 0 && count != 0)
                        {
                            int j;
                            for (j = 0; j < count; j++)
                            {
                                int otherPriority = spanFlags[j] & android.text.SpannedClass.SPAN_PRIORITY;
                                if (priority > otherPriority)
                                {
                                    break;
                                }
                            }
                            System.Array.Copy(spans, j, spans, j + 1, count - j);
                            System.Array.Copy(spanStarts, j, spanStarts, j + 1, count - j);
                            System.Array.Copy(spanEnds, j, spanEnds, j + 1, count - j);
                            System.Array.Copy(spanFlags, j, spanFlags, j + 1, count - j);
                            spans[j]      = span;
                            spanStarts[j] = spanStart;
                            spanEnds[j]   = spanEnd;
                            spanFlags[j]  = spanFlag;
                        }
                        else
                        {
                            spans[i]      = span;
                            spanStarts[i] = spanStart;
                            spanEnds[i]   = spanEnd;
                            spanFlags[i]  = spanFlag;
                        }
                        count++;
                    }
                }
                numberOfSpans = count;
            }
コード例 #5
0
        public override bool commitText(java.lang.CharSequence text, int newCursorPosition
                                        )
        {
            if (mTextView == null)
            {
                return(base.commitText(text, newCursorPosition));
            }
            if (text is android.text.Spanned)
            {
                android.text.Spanned spanned = ((android.text.Spanned)text);
                android.text.style.SuggestionSpan[] spans = spanned.getSpans <android.text.style.SuggestionSpan
                                                                              >(0, text.Length);
                mIMM.registerSuggestionSpansForNotification(spans);
            }
            mTextView.resetErrorChangedFlag();
            bool success = base.commitText(text, newCursorPosition);

            mTextView.hideErrorIfUnchanged();
            return(success);
        }
コード例 #6
0
        internal SpannableStringInternal(java.lang.CharSequence source, int start, int end
                                         )
        {
            if (start == 0 && end == source.Length)
            {
                mText = source.ToString();
            }
            else
            {
                mText = Sharpen.StringHelper.Substring(source.ToString(), start, end);
            }
            int initial = [email protected](0);

            mSpans    = new object[initial];
            mSpanData = new int[initial * 3];
            if (source is android.text.Spanned)
            {
                android.text.Spanned sp    = (android.text.Spanned)source;
                object[]             spans = sp.getSpans <object>(start, end);
                {
                    for (int i = 0; i < spans.Length; i++)
                    {
                        int st = sp.getSpanStart(spans[i]);
                        int en = sp.getSpanEnd(spans[i]);
                        int fl = sp.getSpanFlags(spans[i]);
                        if (st < start)
                        {
                            st = start;
                        }
                        if (en > end)
                        {
                            en = end;
                        }
                        setSpan(spans[i], st - start, en - start, fl);
                    }
                }
            }
        }
コード例 #7
0
        /// <summary>Analyzes text for bidirectional runs.</summary>
        /// <remarks>Analyzes text for bidirectional runs.  Allocates working buffers.</remarks>
        internal virtual void setPara(java.lang.CharSequence text, int start, int end, android.text.TextDirectionHeuristic
                                      textDir)
        {
            mText      = text;
            mTextStart = start;
            int len = end - start;

            mLen = len;
            mPos = 0;
            if (mWidths == null || mWidths.Length < len)
            {
                mWidths = new float[[email protected](len)];
            }
            if (mChars == null || mChars.Length < len)
            {
                mChars = new char[[email protected](len)];
            }
            android.text.TextUtils.getChars(text, start, end, mChars, 0);
            if (text is android.text.Spanned)
            {
                android.text.Spanned spanned = (android.text.Spanned)text;
                android.text.style.ReplacementSpan[] spans = spanned.getSpans <android.text.style.ReplacementSpan
                                                                               >(start, end);
                {
                    for (int i = 0; i < spans.Length; i++)
                    {
                        int startInPara = spanned.getSpanStart(spans[i]) - start;
                        int endInPara   = spanned.getSpanEnd(spans[i]) - start;
                        {
                            for (int j = startInPara; j < endInPara; j++)
                            {
                                mChars[j] = '\uFFFC';
                            }
                        }
                    }
                }
            }
            if ((textDir == android.text.TextDirectionHeuristics.LTR || textDir == android.text.TextDirectionHeuristics
                 .FIRSTSTRONG_LTR || textDir == android.text.TextDirectionHeuristics.ANYRTL_LTR) &&
                android.text.TextUtils.doesNotNeedBidi(mChars, 0, len))
            {
                mDir  = android.text.Layout.DIR_LEFT_TO_RIGHT;
                mEasy = true;
            }
            else
            {
                if (mLevels == null || mLevels.Length < len)
                {
                    mLevels = new byte[[email protected](len)];
                }
                int bidiRequest;
                if (textDir == android.text.TextDirectionHeuristics.LTR)
                {
                    bidiRequest = android.text.Layout.DIR_REQUEST_LTR;
                }
                else
                {
                    if (textDir == android.text.TextDirectionHeuristics.RTL)
                    {
                        bidiRequest = android.text.Layout.DIR_REQUEST_RTL;
                    }
                    else
                    {
                        if (textDir == android.text.TextDirectionHeuristics.FIRSTSTRONG_LTR)
                        {
                            bidiRequest = android.text.Layout.DIR_REQUEST_DEFAULT_LTR;
                        }
                        else
                        {
                            if (textDir == android.text.TextDirectionHeuristics.FIRSTSTRONG_RTL)
                            {
                                bidiRequest = android.text.Layout.DIR_REQUEST_DEFAULT_RTL;
                            }
                            else
                            {
                                bool isRtl = textDir.isRtl(mChars, 0, len);
                                bidiRequest = isRtl ? android.text.Layout.DIR_REQUEST_RTL : android.text.Layout.DIR_REQUEST_LTR;
                            }
                        }
                    }
                }
                mDir  = android.text.AndroidBidi.bidi(bidiRequest, mChars, mLevels, len, false);
                mEasy = false;
            }
        }
コード例 #8
0
ファイル: TextUtils.cs プロジェクト: zffl/androidmono
 public static void copySpansFrom(android.text.Spanned arg0, int arg1, int arg2, java.lang.Class arg3, android.text.Spannable arg4, int arg5)
 {
     global::MonoJavaBridge.JNIEnv @__env = global::MonoJavaBridge.JNIEnv.ThreadEnv;
     @__env.CallStaticVoidMethod(android.text.TextUtils.staticClass, global::android.text.TextUtils._copySpansFrom7944, global::MonoJavaBridge.JavaBridge.ConvertToValue(arg0), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg1), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg2), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg3), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg4), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg5));
 }
コード例 #9
0
ファイル: Html.cs プロジェクト: zhouweiaccp/XobotOS
 private static object getLast(android.text.Spanned text, System.Type kind)
 {
     throw new System.NotImplementedException();
 }
コード例 #10
0
ファイル: DynamicLayout.cs プロジェクト: zhouweiaccp/XobotOS
        private void reflow(java.lang.CharSequence s, int where, int before, int after)
        {
            if (s != mBase)
            {
                return;
            }
            java.lang.CharSequence text = mDisplay;
            int len = text.Length;
            // seek back to the start of the paragraph
            int find = android.text.TextUtils.lastIndexOf(text, '\n', where - 1);

            if (find < 0)
            {
                find = 0;
            }
            else
            {
                find = find + 1;
            }
            {
                int diff = where - find;
                before += diff;
                after  += diff;
                where  -= diff;
            }
            // seek forward to the end of the paragraph
            int look = android.text.TextUtils.indexOf(text, '\n', where + after);

            if (look < 0)
            {
                look = len;
            }
            else
            {
                look++;
            }
            // we want the index after the \n
            int change = look - (where + after);

            before += change;
            after  += change;
            // seek further out to cover anything that is forced to wrap together
            if (text is android.text.Spanned)
            {
                android.text.Spanned sp = (android.text.Spanned)text;
                bool again;
                do
                {
                    again = false;
                    object[] force = sp.getSpans <android.text.style.WrapTogetherSpan>(where, where +
                                                                                       after);
                    {
                        for (int i = 0; i < force.Length; i++)
                        {
                            int st = sp.getSpanStart(force[i]);
                            int en = sp.getSpanEnd(force[i]);
                            if (st < where)
                            {
                                again = true;
                                int diff = where - st;
                                before += diff;
                                after  += diff;
                                where  -= diff;
                            }
                            if (en > where + after)
                            {
                                again = true;
                                int diff = en - (where + after);
                                before += diff;
                                after  += diff;
                            }
                        }
                    }
                }while (again);
            }
            // find affected region of old layout
            int startline = getLineForOffset(where);
            int startv    = getLineTop(startline);
            int endline   = getLineForOffset(where + before);

            if (where + after == len)
            {
                endline = getLineCount();
            }
            int  endv   = getLineTop(endline);
            bool islast = (endline == getLineCount());

            // generate new layout for affected text
            android.text.StaticLayout reflowed;
            lock (sLock)
            {
                reflowed      = sStaticLayout;
                sStaticLayout = null;
            }
            if (reflowed == null)
            {
                reflowed = new android.text.StaticLayout(null);
            }
            else
            {
                reflowed.prepare();
            }
            reflowed.generate(text, where, where + after, getPaint(), getWidth(), getAlignment
                                  (), getTextDirectionHeuristic(), getSpacingMultiplier(), getSpacingAdd(), false,
                              true, mEllipsizedWidth, mEllipsizeAt);
            int n = reflowed.getLineCount();

            // If the new layout has a blank line at the end, but it is not
            // the very end of the buffer, then we already have a line that
            // starts there, so disregard the blank line.
            if (where + after != len && reflowed.getLineStart(n - 1) == where + after)
            {
                n--;
            }
            // remove affected lines from old layout
            mInts.deleteAt(startline, endline - startline);
            mObjects.deleteAt(startline, endline - startline);
            // adjust offsets in layout for new height and offsets
            int ht     = reflowed.getLineTop(n);
            int toppad = 0;
            int botpad = 0;

            if (mIncludePad && startline == 0)
            {
                toppad      = reflowed.getTopPadding();
                mTopPadding = toppad;
                ht         -= toppad;
            }
            if (mIncludePad && islast)
            {
                botpad         = reflowed.getBottomPadding();
                mBottomPadding = botpad;
                ht            += botpad;
            }
            mInts.adjustValuesBelow(startline, START, after - before);
            mInts.adjustValuesBelow(startline, TOP, startv - endv + ht);
            // insert new layout
            int[] ints;
            if (mEllipsize)
            {
                ints = new int[COLUMNS_ELLIPSIZE];
                ints[ELLIPSIS_START] = ELLIPSIS_UNDEFINED;
            }
            else
            {
                ints = new int[COLUMNS_NORMAL];
            }
            android.text.Layout.Directions[] objects = new android.text.Layout.Directions[1];
            {
                for (int i_1 = 0; i_1 < n; i_1++)
                {
                    ints[START] = reflowed.getLineStart(i_1) | (reflowed.getParagraphDirection(i_1) <<
                                                                DIR_SHIFT) | (reflowed.getLineContainsTab(i_1) ? TAB_MASK : 0);
                    int top = reflowed.getLineTop(i_1) + startv;
                    if (i_1 > 0)
                    {
                        top -= toppad;
                    }
                    ints[TOP] = top;
                    int desc = reflowed.getLineDescent(i_1);
                    if (i_1 == n - 1)
                    {
                        desc += botpad;
                    }
                    ints[DESCENT] = desc;
                    objects[0]    = reflowed.getLineDirections(i_1);
                    if (mEllipsize)
                    {
                        ints[ELLIPSIS_START] = reflowed.getEllipsisStart(i_1);
                        ints[ELLIPSIS_COUNT] = reflowed.getEllipsisCount(i_1);
                    }
                    mInts.insertAt(startline + i_1, ints);
                    mObjects.insertAt(startline + i_1, objects);
                }
            }
            lock (sLock)
            {
                sStaticLayout = reflowed;
                reflowed.finish();
            }
        }
コード例 #11
0
        /// <summary>
        /// Returns null if not boring; the width, ascent, and descent in the
        /// provided Metrics object (or a new one if the provided one was null)
        /// if boring.
        /// </summary>
        /// <remarks>
        /// Returns null if not boring; the width, ascent, and descent in the
        /// provided Metrics object (or a new one if the provided one was null)
        /// if boring.
        /// </remarks>
        /// <hide></hide>
        public static android.text.BoringLayout.Metrics isBoring(java.lang.CharSequence text
                                                                 , android.text.TextPaint paint, android.text.TextDirectionHeuristic textDir, android.text.BoringLayout
                                                                 .Metrics metrics)
        {
            char[] temp   = android.text.TextUtils.obtain(500);
            int    length = text.Length;
            bool   boring = true;

            {
                for (int i = 0; i < length; i += 500)
                {
                    int j = i + 500;
                    if (j > length)
                    {
                        j = length;
                    }
                    android.text.TextUtils.getChars(text, i, j, temp, 0);
                    int n = j - i;
                    {
                        for (int a = 0; a < n; a++)
                        {
                            char c = temp[a];
                            if (c == '\n' || c == '\t' || c >= FIRST_RIGHT_TO_LEFT)
                            {
                                boring = false;
                                goto outer_break;
                            }
                        }
                    }
                    if (textDir != null && textDir.isRtl(temp, 0, n))
                    {
                        boring = false;
                        goto outer_break;
                    }
                }
                outer_continue :;
            }
            outer_break :;
            android.text.TextUtils.recycle(temp);
            if (boring && text is android.text.Spanned)
            {
                android.text.Spanned sp     = (android.text.Spanned)text;
                object[]             styles = sp.getSpans <android.text.style.ParagraphStyle>(0, length);
                if (styles.Length > 0)
                {
                    boring = false;
                }
            }
            if (boring)
            {
                android.text.BoringLayout.Metrics fm = metrics;
                if (fm == null)
                {
                    fm = new android.text.BoringLayout.Metrics();
                }
                android.text.TextLine line = android.text.TextLine.obtain();
                line.set(paint, text, 0, length, android.text.Layout.DIR_LEFT_TO_RIGHT, android.text.Layout
                         .DIRS_ALL_LEFT_TO_RIGHT, false, null);
                fm.width = (int)android.util.FloatMath.ceil(line.metrics(fm));
                android.text.TextLine.recycle(line);
                return(fm);
            }
            else
            {
                return(null);
            }
        }
コード例 #12
0
ファイル: Html.cs プロジェクト: zhouweiaccp/XobotOS
 private static void withinStyle(java.lang.StringBuilder @out, android.text.Spanned
                                 text, int start, int end)
 {
     throw new System.NotImplementedException();
 }
コード例 #13
0
ファイル: Html.cs プロジェクト: zhouweiaccp/XobotOS
 private static void withinParagraph(java.lang.StringBuilder @out, android.text.Spanned
                                     text, int start, int end, int nl, bool last)
 {
     throw new System.NotImplementedException();
 }
コード例 #14
0
ファイル: Html.cs プロジェクト: zhouweiaccp/XobotOS
 private static void withinHtml(java.lang.StringBuilder @out, android.text.Spanned
                                text)
 {
     throw new System.NotImplementedException();
 }
コード例 #15
0
ファイル: Html.cs プロジェクト: zhouweiaccp/XobotOS
 public static string toHtml(android.text.Spanned text)
 {
     throw new System.NotImplementedException();
 }
コード例 #16
0
 public virtual java.lang.CharSequence filter(java.lang.CharSequence source, int start
                                              , int end, android.text.Spanned dest, int dstart, int dend)
 {
     throw new System.NotImplementedException();
 }
コード例 #17
0
ファイル: LoginFilter.cs プロジェクト: zffl/androidmono
 public java.lang.CharSequence filter(string arg0, int arg1, int arg2, android.text.Spanned arg3, int arg4, int arg5)
 {
     return(filter((global::java.lang.CharSequence)(global::java.lang.String) arg0, arg1, arg2, arg3, arg4, arg5));
 }
コード例 #18
0
        public virtual java.lang.CharSequence filter(java.lang.CharSequence source, int start
                                                     , int end, android.text.Spanned dest, int dstart, int dend)
        {
            onStart();
            {
                // Scan through beginning characters in dest, calling onInvalidCharacter()
                // for each invalid character.
                for (int i = 0; i < dstart; i++)
                {
                    char c = dest[i];
                    if (!isAllowed(c))
                    {
                        onInvalidCharacter(c);
                    }
                }
            }
            // Scan through changed characters rejecting disallowed chars
            android.text.SpannableStringBuilder modification = null;
            int modoff = 0;

            {
                for (int i_1 = start; i_1 < end; i_1++)
                {
                    char c = source[i_1];
                    if (isAllowed(c))
                    {
                        // Character allowed.
                        modoff++;
                    }
                    else
                    {
                        if (mAppendInvalid)
                        {
                            modoff++;
                        }
                        else
                        {
                            if (modification == null)
                            {
                                modification = new android.text.SpannableStringBuilder(source, start, end);
                                modoff       = i_1 - start;
                            }
                            modification.delete(modoff, modoff + 1);
                        }
                        onInvalidCharacter(c);
                    }
                }
            }
            {
                // Scan through remaining characters in dest, calling onInvalidCharacter()
                // for each invalid character.
                for (int i_2 = dend; i_2 < dest.Length; i_2++)
                {
                    char c = dest[i_2];
                    if (!isAllowed(c))
                    {
                        onInvalidCharacter(c);
                    }
                }
            }
            onStop();
            // Either returns null if we made no changes,
            // or what we wanted to change it to if there were changes.
            return(modification);
        }
コード例 #19
0
 public SpannedReplacementCharSequence(android.text.Spanned source, char[] original
                                       , char[] replacement) : base(source, original, replacement)
 {
     mSpanned = source;
 }
コード例 #20
0
 global::java.lang.CharSequence android.text.InputFilter.filter(java.lang.CharSequence arg0, int arg1, int arg2, android.text.Spanned arg3, int arg4, int arg5)
 {
     global::MonoJavaBridge.JNIEnv @__env = global::MonoJavaBridge.JNIEnv.ThreadEnv;
     if (!IsClrObject)
     {
         return(global::MonoJavaBridge.JavaBridge.WrapIJavaObject <global::java.lang.CharSequence>(@__env.CallObjectMethod(this.JvmHandle, global::android.text.InputFilter_._filter7695, global::MonoJavaBridge.JavaBridge.ConvertToValue(arg0), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg1), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg2), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg3), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg4), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg5))) as java.lang.CharSequence);
     }
     else
     {
         return(global::MonoJavaBridge.JavaBridge.WrapIJavaObject <global::java.lang.CharSequence>(@__env.CallNonVirtualObjectMethod(this.JvmHandle, global::android.text.InputFilter_.staticClass, global::android.text.InputFilter_._filter7695, global::MonoJavaBridge.JavaBridge.ConvertToValue(arg0), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg1), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg2), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg3), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg4), global::MonoJavaBridge.JavaBridge.ConvertToValue(arg5))) as java.lang.CharSequence);
     }
 }
コード例 #21
0
ファイル: Html.cs プロジェクト: zffl/androidmono
 public static global::java.lang.String toHtml(android.text.Spanned arg0)
 {
     global::MonoJavaBridge.JNIEnv @__env = global::MonoJavaBridge.JNIEnv.ThreadEnv;
     return(global::MonoJavaBridge.JavaBridge.WrapJavaObject(@__env.CallStaticObjectMethod(android.text.Html.staticClass, global::android.text.Html._toHtml7690, global::MonoJavaBridge.JavaBridge.ConvertToValue(arg0))) as java.lang.String);
 }