namespace System.Net.ApiService.Compression.Brotli { /// Transformations on dictionary words. internal sealed class Transform { private readonly byte[] prefix; private readonly int type; private readonly byte[] suffix; internal Transform(string prefix, int type, string suffix) { this.prefix = ReadUniBytes(prefix); this.type = type; this.suffix = ReadUniBytes(suffix); } internal static byte[] ReadUniBytes(string uniBytes) { byte[] result = new byte[uniBytes.Length]; for (int i = 0; i < result.Length; ++i) { result[i] = unchecked((byte)uniBytes[i]); } return result; } internal static readonly System.Net.ApiService.Compression.Brotli.Transform[] Transforms = new System.Net.ApiService.Compression.Brotli.Transform[] { new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " "), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.OmitFirst1, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform (string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst, " "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " the "), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform("s ", System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " of "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " and "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.OmitFirst2, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.OmitLast1, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(", ", System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, ", "), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst, " "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " in "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " to "), new System.Net.ApiService.Compression.Brotli.Transform("e ", System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "\""), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "."), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "\">"), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "\n"), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.OmitLast3, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "]"), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType .Identity, " for "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.OmitFirst3, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.OmitLast2, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform (string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " a "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " that "), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst , string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, ". "), new System.Net.ApiService.Compression.Brotli.Transform(".", System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType .Identity, ", "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.OmitFirst4, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " with "), new System.Net.ApiService.Compression.Brotli.Transform (string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "'"), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " from "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity , " by "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.OmitFirst5, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.OmitFirst6, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform (" the ", System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.OmitLast4, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType .Identity, ". The "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseAll, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " on "), new System.Net.ApiService.Compression.Brotli.Transform (string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " as "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " is "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.OmitLast7 , string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.OmitLast1, "ing "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "\n\t"), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty , System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, ":"), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, ". "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "ed "), new System.Net.ApiService.Compression.Brotli.Transform (string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.OmitFirst9, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.OmitFirst7, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType .OmitLast6, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "("), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst, ", "), new System.Net.ApiService.Compression.Brotli.Transform (string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.OmitLast8, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " at "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType .Identity, "ly "), new System.Net.ApiService.Compression.Brotli.Transform(" the ", System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " of "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.OmitLast5, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform( string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.OmitLast9, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst, ", "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst , "\""), new System.Net.ApiService.Compression.Brotli.Transform(".", System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "("), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseAll, " "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType .UppercaseFirst, "\">"), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "=\""), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "."), new System.Net.ApiService.Compression.Brotli.Transform(".com/", System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(" the ", System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " of the "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst , "'"), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, ". This "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, ","), new System.Net.ApiService.Compression.Brotli.Transform(".", System.Net.ApiService.Compression.Brotli.WordTransformType .Identity, " "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst, "("), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst, "."), new System.Net.ApiService.Compression.Brotli.Transform (string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, " not "), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "=\""), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "er " ), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseAll, " "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "al "), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType .UppercaseAll, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "='"), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseAll, "\""), new System.Net.ApiService.Compression.Brotli.Transform (string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst, ". "), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "("), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "ful "), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst, ". "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "ive "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType .Identity, "less "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseAll, "'"), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "est "), new System.Net.ApiService.Compression.Brotli.Transform (" ", System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst, "."), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseAll, "\">"), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "='" ), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst, ","), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, "ize "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType .UppercaseAll, "."), new System.Net.ApiService.Compression.Brotli.Transform("\u00c2\u00a0", System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, string.Empty), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.Identity, ","), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty , System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst, "=\""), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseAll, "=\""), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.Identity , "ous "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseAll, ", "), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst, "='"), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst, ","), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseAll, "=\""), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseAll, ", "), new System.Net.ApiService.Compression.Brotli.Transform (string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseAll, ","), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseAll, "("), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType. UppercaseAll, ". "), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseAll, "."), new System.Net.ApiService.Compression.Brotli.Transform(string.Empty, System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseAll, "='"), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType .UppercaseAll, ". "), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst, "=\""), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseAll, "='"), new System.Net.ApiService.Compression.Brotli.Transform(" ", System.Net.ApiService.Compression.Brotli.WordTransformType .UppercaseFirst, "='") }; internal static int TransformDictionaryWord(byte[] dst, int dstOffset, byte[] word, int wordOffset, int len, System.Net.ApiService.Compression.Brotli.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 = System.Net.ApiService.Compression.Brotli.WordTransformType.GetOmitFirst(op); if (tmp > len) { tmp = len; } wordOffset += tmp; len -= tmp; len -= System.Net.ApiService.Compression.Brotli.WordTransformType.GetOmitLast(op); i = len; while (i > 0) { dst[offset++] = word[wordOffset++]; i--; } if (op == System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseAll || op == System.Net.ApiService.Compression.Brotli.WordTransformType.UppercaseFirst) { int uppercaseOffset = offset - len; if (op == System.Net.ApiService.Compression.Brotli.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; } } }