Ejemplo n.º 1
0
        /// <summary>
        /// Returns the font in use at a particular index.
        /// </summary>
        /// <param name="index">The index.</param>
        /// <returns>The font that's currently being applied at that
        /// index or null if no font Is being applied or the
        /// index Is out of range.</returns>
        public short GetFontAtIndex(int index)
        {
            int size = _string.FormatRunCount;

            UnicodeString.FormatRun currentRun = null;
            for (int i = 0; i < size; i++)
            {
                UnicodeString.FormatRun r = _string.GetFormatRun(i);
                if (r.CharacterPos > index)
                {
                    break;
                }
                else
                {
                    currentRun = r;
                }
            }
            if (currentRun == null)
            {
                return(NO_FONT);
            }
            else
            {
                return(currentRun.FontIndex);
            }
        }
Ejemplo n.º 2
0
        public void TestFormatRun()
        {
            UnicodeString.FormatRun fr = new UnicodeString.FormatRun((short)4, (short)0x15c);
            Assert.AreEqual(4, fr.CharacterPos);
            Assert.AreEqual(0x15c, fr.FontIndex);

            MemoryStream             baos = new MemoryStream();
            LittleEndianOutputStream out1 = new LittleEndianOutputStream(baos);

            fr.Serialize(out1);

            byte[] b = baos.ToArray();
            Assert.AreEqual(4, b.Length);
            Assert.AreEqual(4, b[0]);
            Assert.AreEqual(0, b[1]);
            Assert.AreEqual(0x5c, b[2]);
            Assert.AreEqual(0x01, b[3]);

            LittleEndianInputStream inp = new LittleEndianInputStream(
                new MemoryStream(b)
                );

            fr = new UnicodeString.FormatRun(inp);
            Assert.AreEqual(4, fr.CharacterPos);
            Assert.AreEqual(0x15c, fr.FontIndex);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Applies a font to the specified Chars of a string.
        /// </summary>
        /// <param name="startIndex">The start index to apply the font to (inclusive).</param>
        /// <param name="endIndex">The end index to apply the font to (exclusive).</param>
        /// <param name="fontIndex">The font to use.</param>
        public void ApplyFont(int startIndex, int endIndex, short fontIndex)
        {
            if (startIndex > endIndex)
            {
                throw new ArgumentException("Start index must be less than end index.");
            }
            if (startIndex < 0 || endIndex > Length)
            {
                throw new ArgumentException("Start and end index not in range.");
            }
            if (startIndex == endIndex)
            {
                return;
            }

            //Need to Check what the font Is currently, so we can reapply it after
            //the range Is completed
            short currentFont = NO_FONT;

            if (endIndex != Length)
            {
                currentFont = this.GetFontAtIndex(endIndex);
            }

            //Need to clear the current formatting between the startIndex and endIndex
            _string = CloneStringIfRequired();
            System.Collections.Generic.List <UnicodeString.FormatRun> formatting = _string.FormatIterator();

            ArrayList deletedFR = new ArrayList();

            if (formatting != null)
            {
                IEnumerator formats = formatting.GetEnumerator();
                while (formats.MoveNext())
                {
                    UnicodeString.FormatRun r = (UnicodeString.FormatRun)formats.Current;
                    if ((r.CharacterPos >= startIndex) && (r.CharacterPos < endIndex))
                    {
                        deletedFR.Add(r);
                    }
                }
            }
            foreach (UnicodeString.FormatRun fr in deletedFR)
            {
                _string.RemoveFormatRun(fr);
            }

            _string.AddFormatRun(new UnicodeString.FormatRun((short)startIndex, fontIndex));
            if (endIndex != Length)
            {
                _string.AddFormatRun(new UnicodeString.FormatRun((short)endIndex, currentFont));
            }

            AddToSSTIfRequired();
        }
Ejemplo n.º 4
0
        public void TestSmallStringSize()
        {
            //Test a basic string
            UnicodeString s = MakeUnicodeString("Test");

            ConfirmSize(7, s);

            //Test a small string that is uncompressed
            s             = MakeUnicodeString(STR_16_BIT);
            s.OptionFlags = (/*setter*/ (byte)0x01);
            ConfirmSize(11, s);

            //Test a compressed small string that has rich text formatting
            s.String      = (/*setter*/ "Test");
            s.OptionFlags = (/*setter*/ (byte)0x8);
            UnicodeString.FormatRun r = new UnicodeString.FormatRun((short)0, (short)1);
            s.AddFormatRun(r);
            UnicodeString.FormatRun r2 = new UnicodeString.FormatRun((short)2, (short)2);
            s.AddFormatRun(r2);
            ConfirmSize(17, s);

            //Test a uncompressed small string that has rich text formatting
            s.String      = (/*setter*/ STR_16_BIT);
            s.OptionFlags = (/*setter*/ (byte)0x9);
            ConfirmSize(21, s);

            //Test a compressed small string that has rich text and extended text
            s.String      = (/*setter*/ "Test");
            s.OptionFlags = (/*setter*/ (byte)0xC);
            ConfirmSize(17, s);

            // Extended phonetics data
            // Minimum size is 14
            // Also Adds 4 bytes to hold the length
            s.ExtendedRst = (
                new UnicodeString.ExtRst()
                );
            ConfirmSize(35, s);

            //Test a uncompressed small string that has rich text and extended text
            s.String      = (/*setter*/ STR_16_BIT);
            s.OptionFlags = (/*setter*/ (byte)0xD);
            ConfirmSize(39, s);

            s.ExtendedRst = (/*setter*/ null);
            ConfirmSize(21, s);
        }
Ejemplo n.º 5
0
        public void TestSmallStringSize()
        {
            //Test a basic string
            UnicodeString s = MakeUnicodeString("Test");
            ConfirmSize(7, s);

            //Test a small string that is uncompressed
            s = MakeUnicodeString(STR_16_BIT);
            s.OptionFlags = (/*setter*/(byte)0x01);
            ConfirmSize(11, s);

            //Test a compressed small string that has rich text formatting
            s.String = (/*setter*/"Test");
            s.OptionFlags = (/*setter*/(byte)0x8);
            UnicodeString.FormatRun r = new UnicodeString.FormatRun((short)0, (short)1);
            s.AddFormatRun(r);
            UnicodeString.FormatRun r2 = new UnicodeString.FormatRun((short)2, (short)2);
            s.AddFormatRun(r2);
            ConfirmSize(17, s);

            //Test a uncompressed small string that has rich text formatting
            s.String = (/*setter*/STR_16_BIT);
            s.OptionFlags = (/*setter*/(byte)0x9);
            ConfirmSize(21, s);

            //Test a compressed small string that has rich text and extended text
            s.String = (/*setter*/"Test");
            s.OptionFlags = (/*setter*/(byte)0xC);
            ConfirmSize(17, s);

            // Extended phonetics data
            // Minimum size is 14
            // Also Adds 4 bytes to hold the length
            s.ExtendedRst=(
                  new UnicodeString.ExtRst()
            );
            ConfirmSize(35, s);

            //Test a uncompressed small string that has rich text and extended text
            s.String = (/*setter*/STR_16_BIT);
            s.OptionFlags = (/*setter*/(byte)0xD);
            ConfirmSize(39, s);

            s.ExtendedRst = (/*setter*/null);
            ConfirmSize(21, s);
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Gets the font used in a particular formatting run.
 /// </summary>
 /// <param name="index">the index of the formatting run.</param>
 /// <returns>the font number used.</returns>
 public short GetFontOfFormattingRun(int index)
 {
     UnicodeString.FormatRun r = _string.GetFormatRun(index);
     return(r.FontIndex);
 }
Ejemplo n.º 7
0
 /// <summary>
 /// The index within the string to which the specified formatting run applies.
 /// </summary>
 /// <param name="index">the index of the formatting run</param>
 /// <returns>the index within the string.</returns>
 public int GetIndexOfFormattingRun(int index)
 {
     UnicodeString.FormatRun r = _string.GetFormatRun(index);
     return(r.CharacterPos);
 }
Ejemplo n.º 8
0
        public void TestFormatRun()
        {
            UnicodeString.FormatRun fr = new UnicodeString.FormatRun((short)4, (short)0x15c);
            Assert.AreEqual(4, fr.CharacterPos);
            Assert.AreEqual(0x15c, fr.FontIndex);

            MemoryStream baos = new MemoryStream();
            LittleEndianOutputStream out1 = new LittleEndianOutputStream(baos);

            fr.Serialize(out1);

            byte[] b = baos.ToArray();
            Assert.AreEqual(4, b.Length);
            Assert.AreEqual(4, b[0]);
            Assert.AreEqual(0, b[1]);
            Assert.AreEqual(0x5c, b[2]);
            Assert.AreEqual(0x01, b[3]);

            LittleEndianInputStream inp = new LittleEndianInputStream(
                  new MemoryStream(b)
            );
            fr = new UnicodeString.FormatRun(inp);
            Assert.AreEqual(4, fr.CharacterPos);
            Assert.AreEqual(0x15c, fr.FontIndex);
        }