| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- namespace System.Net.ApiService.Compression.Brotli {
- /// <summary>Transformations on dictionary words.</summary>
- 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;
- }
- }
- }
|