示例#1
0
 public int getRunStart(AttributedCharacterIteratorNS.Attribute attribute)
 {
     if (attributesAllowed != null &&
         !attributesAllowed.contains(attribute))
     {
         return(begin);
     }
     java.util.ArrayList <IAC_Range> ranges = (java.util.ArrayList <IAC_Range>)attrString.attributeMap
                                              .get(attribute);
     if (ranges == null)
     {
         return(begin);
     }
     return(runStart(ranges));
 }
示例#2
0
        public int getRunStart(java.util.Set <AttributedCharacterIteratorNS.Attribute> attributes)
        {
            int start = begin;

            java.util.Iterator <AttributedCharacterIteratorNS.Attribute> it = attributes.iterator();
            while (it.hasNext())
            {
                AttributedCharacterIteratorNS.Attribute attribute = it.next();
                int newStart = getRunStart(attribute);
                if (newStart > start)
                {
                    start = newStart;
                }
            }
            return(start);
        }
示例#3
0
        public int getRunLimit(java.util.Set <AttributedCharacterIteratorNS.Attribute> attributes)
        {
            int limit = end;

            java.util.Iterator <AttributedCharacterIteratorNS.Attribute> it = attributes.iterator();
            while (it.hasNext())
            {
                AttributedCharacterIteratorNS.Attribute attribute = it.next();
                int newLimit = getRunLimit(attribute);
                if (newLimit < limit)
                {
                    limit = newLimit;
                }
            }
            return(limit);
        }
示例#4
0
 public System.Object getAttribute(
     AttributedCharacterIteratorNS.Attribute attribute)
 {
     if (attributesAllowed != null &&
         !attributesAllowed.contains(attribute))
     {
         return(null);
     }
     java.util.ArrayList <IAC_Range> ranges = (java.util.ArrayList <IAC_Range>)attrString.attributeMap
                                              .get(attribute);
     if (ranges == null)
     {
         return(null);
     }
     return(currentValue(ranges));
 }
示例#5
0
        private AttributedString(AttributedCharacterIterator iterator, int start,
                                 int end, java.util.Set <AttributedCharacterIteratorNS.Attribute> attributes)
        {
            if (start < iterator.getBeginIndex() || end > iterator.getEndIndex() ||
                start > end)
            {
                throw new java.lang.IllegalArgumentException();
            }

            if (attributes == null)
            {
                return;
            }

            StringBuilder buffer = new StringBuilder();

            iterator.setIndex(start);
            while (iterator.getIndex() < end)
            {
                buffer.Append(iterator.current());
                iterator.next();
            }
            text         = buffer.ToString();
            attributeMap = new java.util.HashMap <AttributedCharacterIteratorNS.Attribute, java.util.List <IAC_Range> >();//(attributes.size() * 4 / 3) + 1);

            java.util.Iterator <AttributedCharacterIteratorNS.Attribute> it = attributes.iterator();
            while (it.hasNext())
            {
                AttributedCharacterIteratorNS.Attribute attribute = it.next();
                iterator.setIndex(start);
                while (iterator.getIndex() < end)
                {
                    System.Object value    = iterator.getAttribute(attribute);
                    int           runStart = iterator.getRunStart(attribute);
                    int           limit    = iterator.getRunLimit(attribute);
                    if ((value is java.lang.annotation.Annotation && runStart >= start && limit <= end) ||
                        (value != null && !(value is java.lang.annotation.Annotation)))
                    {
                        addAttribute(attribute, value, (runStart < start ? start
                                : runStart)
                                     - start, (limit > end ? end : limit) - start);
                    }
                    iterator.setIndex(limit);
                }
            }
        }
示例#6
0
        /**
         * Constructs an {@code AttributedString} from an {@code
         * AttributedCharacterIterator}, which represents attributed text.
         *
         * @param iterator
         *            the {@code AttributedCharacterIterator} that contains the text
         *            for this attributed string.
         */
        public AttributedString(AttributedCharacterIterator iterator)
        {
            if (iterator.getBeginIndex() > iterator.getEndIndex())
            {
                // text.0A=Invalid substring range
                throw new java.lang.IllegalArgumentException("Invalid substring range"); //$NON-NLS-1$
            }
            StringBuilder buffer = new StringBuilder();

            for (int i = iterator.getBeginIndex(); i < iterator.getEndIndex(); i++)
            {
                buffer.Append(iterator.current());
                iterator.next();
            }
            text = buffer.ToString();
            java.util.Set <AttributedCharacterIteratorNS.Attribute> attributes = iterator
                                                                                 .getAllAttributeKeys();
            if (attributes == null)
            {
                return;
            }
            attributeMap = new java.util.HashMap <AttributedCharacterIteratorNS.Attribute, java.util.List <IAC_Range> >();//(attributes.size() * 4 / 3) + 1);

            java.util.Iterator <AttributedCharacterIteratorNS.Attribute> it = attributes.iterator();
            while (it.hasNext())
            {
                AttributedCharacterIteratorNS.Attribute attribute = it.next();
                iterator.setIndex(0);
                while (iterator.current() != CharacterIteratorConstants.DONE)
                {
                    int           start = iterator.getRunStart(attribute);
                    int           limit = iterator.getRunLimit(attribute);
                    System.Object value = iterator.getAttribute(attribute);
                    if (value != null)
                    {
                        addAttribute(attribute, value, start, limit);
                    }
                    iterator.setIndex(limit);
                }
            }
        }
示例#7
0
        /**
         * Applies a given attribute to this string.
         *
         * @param attribute
         *            the attribute that will be applied to this string.
         * @param value
         *            the value of the attribute that will be applied to this
         *            string.
         * @throws IllegalArgumentException
         *             if the length of this attributed string is 0.
         * @throws NullPointerException
         *             if {@code attribute} is {@code null}.
         */
        public void addAttribute(AttributedCharacterIteratorNS.Attribute attribute,
                                 System.Object value)
        {
            if (null == attribute)
            {
                throw new java.lang.NullPointerException();
            }
            if (text.Length == 0)
            {
                throw new java.lang.IllegalArgumentException();
            }

            java.util.List <IAC_Range> ranges = attributeMap.get(attribute);
            if (ranges == null)
            {
                ranges = new java.util.ArrayList <IAC_Range>(1);
                attributeMap.put(attribute, ranges);
            }
            else
            {
                ranges.clear();
            }
            ranges.add(new IAC_Range(0, text.Length, value));
        }
示例#8
0
        /**
         * Applies a given attribute to the given range of this string.
         *
         * @param attribute
         *            the attribute that will be applied to this string.
         * @param value
         *            the value of the attribute that will be applied to this
         *            string.
         * @param start
         *            the start of the range where the attribute will be applied.
         * @param end
         *            the end of the range where the attribute will be applied.
         * @throws IllegalArgumentException
         *             if {@code start < 0}, {@code end} is greater than the length
         *             of this string, or if {@code start >= end}.
         * @throws NullPointerException
         *             if {@code attribute} is {@code null}.
         */
        public void addAttribute(AttributedCharacterIteratorNS.Attribute attribute,
                                 System.Object value, int start, int end)
        {
            if (null == attribute)
            {
                throw new java.lang.NullPointerException();
            }
            if (start < 0 || end > text.Length || start >= end)
            {
                throw new java.lang.IllegalArgumentException();
            }

            if (value == null)
            {
                return;
            }

            java.util.List <IAC_Range> ranges = attributeMap.get(attribute);
            if (ranges == null)
            {
                ranges = new java.util.ArrayList <IAC_Range>(1);
                ranges.add(new IAC_Range(start, end, value));
                attributeMap.put(attribute, ranges);
                return;
            }
            java.util.ListIterator <IAC_Range> it = ranges.listIterator();
            while (it.hasNext())
            {
                IAC_Range range = it.next();
                if (end <= range.start)
                {
                    it.previous();
                    break;
                }
                else if (start < range.end ||
                         (start == range.end && value.Equals(range.value)))
                {
                    IAC_Range r1 = null, r3;
                    it.remove();
                    r1 = new IAC_Range(range.start, start, range.value);
                    r3 = new IAC_Range(end, range.end, range.value);

                    while (end > range.end && it.hasNext())
                    {
                        range = it.next();
                        if (end <= range.end)
                        {
                            if (end > range.start ||
                                (end == range.start && value.Equals(range.value)))
                            {
                                it.remove();
                                r3 = new IAC_Range(end, range.end, range.value);
                                break;
                            }
                        }
                        else
                        {
                            it.remove();
                        }
                    }

                    if (value.Equals(r1.value))
                    {
                        if (value.Equals(r3.value))
                        {
                            it.add(new IAC_Range(r1.start <start?r1.start : start,
                                                           r3.end> end ? r3.end : end, r1.value));
                        }
                        else
                        {
                            it.add(new IAC_Range(r1.start < start ? r1.start : start,
                                                 end, r1.value));
                            if (r3.start < r3.end)
                            {
                                it.add(r3);
                            }
                        }
                    }
                    else
                    {
                        if (value.Equals(r3.value))
                        {
                            if (r1.start < r1.end)
                            {
                                it.add(r1);
                            }
                            it.add(new IAC_Range(start, r3.end > end ? r3.end : end,
                                                 r3.value));
                        }
                        else
                        {
                            if (r1.start < r1.end)
                            {
                                it.add(r1);
                            }
                            it.add(new IAC_Range(start, end, value));
                            if (r3.start < r3.end)
                            {
                                it.add(r3);
                            }
                        }
                    }
                    return;
                }
            }
            it.add(new IAC_Range(start, end, value));
        }