Example #1
0
 public virtual void TestCapitalize()
 {
     byte[] output = new byte[8];
     byte[] input  = new byte[] { 113, unchecked ((byte)(-61)), unchecked ((byte)(-90)), unchecked ((byte)(-32)), unchecked ((byte)(-92)), unchecked ((byte)(-86)) };
     // "qæप"
     iText.IO.Codec.Brotli.Dec.Transform transform = new iText.IO.Codec.Brotli.Dec.Transform("[", iText.IO.Codec.Brotli.Dec.WordTransformType.UppercaseAll, "]");
     iText.IO.Codec.Brotli.Dec.Transform.TransformDictionaryWord(output, 0, input, 0, input.Length, transform);
     byte[] expectedOutput = new byte[] { 91, 81, unchecked ((byte)(-61)), unchecked ((byte)(-122)), unchecked ((byte)(-32)), unchecked ((byte)(-92)), unchecked ((byte)(-81)), 93 };
     // "[QÆय]"
     NUnit.Framework.Assert.AreEqual(expectedOutput, output);
 }
Example #2
0
 public virtual void TestTrimAll()
 {
     byte[] output = new byte[2];
     byte[] input  = new byte[] { 119, 111, 114, 100 };
     // "word"
     iText.IO.Codec.Brotli.Dec.Transform transform = new iText.IO.Codec.Brotli.Dec.Transform("[", iText.IO.Codec.Brotli.Dec.WordTransformType.OmitFirst5, "]");
     iText.IO.Codec.Brotli.Dec.Transform.TransformDictionaryWord(output, 0, input, 0, input.Length, transform);
     byte[] expectedOutput = new byte[] { 91, 93 };
     // "[]"
     NUnit.Framework.Assert.AreEqual(expectedOutput, output);
 }
Example #3
0
        internal static int TransformDictionaryWord(byte[] dst, int dstOffset, byte[] word, int wordOffset, int len, iText.IO.Codec.Brotli.Dec.Transform transform)
        {
            int offset = dstOffset;

            // Copy prefix.
            byte[] @string = transform.prefix;
            int    tmp     = @string.Length;
            int    i       = 0;

            // In most cases tmp < 10 -> no benefits from System.arrayCopy
            while (i < tmp)
            {
                dst[offset++] = @string[i++];
            }
            // Copy trimmed word.
            int op = transform.type;

            tmp = iText.IO.Codec.Brotli.Dec.WordTransformType.GetOmitFirst(op);
            if (tmp > len)
            {
                tmp = len;
            }
            wordOffset += tmp;
            len        -= tmp;
            len        -= iText.IO.Codec.Brotli.Dec.WordTransformType.GetOmitLast(op);
            i           = len;
            while (i > 0)
            {
                dst[offset++] = word[wordOffset++];
                i--;
            }
            if (op == iText.IO.Codec.Brotli.Dec.WordTransformType.UppercaseAll || op == iText.IO.Codec.Brotli.Dec.WordTransformType.UppercaseFirst)
            {
                int uppercaseOffset = offset - len;
                if (op == iText.IO.Codec.Brotli.Dec.WordTransformType.UppercaseFirst)
                {
                    len = 1;
                }
                while (len > 0)
                {
                    tmp = dst[uppercaseOffset] & unchecked ((int)(0xFF));
                    if (tmp < unchecked ((int)(0xc0)))
                    {
                        if (tmp >= 'a' && tmp <= 'z')
                        {
                            dst[uppercaseOffset] ^= unchecked ((byte)32);
                        }
                        uppercaseOffset += 1;
                        len             -= 1;
                    }
                    else if (tmp < unchecked ((int)(0xe0)))
                    {
                        dst[uppercaseOffset + 1] ^= unchecked ((byte)32);
                        uppercaseOffset          += 2;
                        len -= 2;
                    }
                    else
                    {
                        dst[uppercaseOffset + 2] ^= unchecked ((byte)5);
                        uppercaseOffset          += 3;
                        len -= 3;
                    }
                }
            }
            // Copy suffix.
            @string = transform.suffix;
            tmp     = @string.Length;
            i       = 0;
            while (i < tmp)
            {
                dst[offset++] = @string[i++];
            }
            return(offset - dstOffset);
        }