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); }
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); }
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); }