public static int GetOmitLast(WordTransformType type) { if (type >= WordTransformType.OMIT_LAST_1 && type <= WordTransformType.OMIT_LAST_9) { return((type - WordTransformType.OMIT_LAST_1) + 1); } return(0); }
public static int TransformDictionaryWord(byte[] dest, int dstOffset, byte[] word, int wordOffset, int len, Transform transform) { int offset = dstOffset; // Copy prefix. byte[] str = transform.prefix; int tmp = str.Length; int i = 0; // In most cases tmp < 10 -> no benefits from System.arrayCopy while (i < tmp) { dest[offset++] = str[i++]; } // Copy trimmed word. WordTransformType op = transform.type; tmp = TransformType.GetOmitFirst(op);// op.omitFirst; if (tmp > len) { tmp = len; } wordOffset += tmp; len -= tmp; len -= TransformType.GetOmitLast(op);//op.omitLast; i = len; while (i > 0) { dest[offset++] = word[wordOffset++]; i--; } if (op == UPPERCASE_ALL || op == UPPERCASE_FIRST) { int uppercaseOffset = offset - len; if (op == UPPERCASE_FIRST) { len = 1; } while (len > 0) { tmp = dest[uppercaseOffset] & 0xFF; if (tmp < 0xc0) { if (tmp >= 'a' && tmp <= 'z') { dest[uppercaseOffset] ^= (byte)32; } uppercaseOffset += 1; len -= 1; } else if (tmp < 0xe0) { dest[uppercaseOffset + 1] ^= (byte)32; uppercaseOffset += 2; len -= 2; } else { dest[uppercaseOffset + 2] ^= (byte)5; uppercaseOffset += 3; len -= 3; } } } // Copy suffix. str = transform.suffix; tmp = str.Length; i = 0; while (i < tmp) { dest[offset++] = str[i++]; } return(offset - dstOffset); }
public Transform(string prefix, WordTransformType type, string suffix) { this.prefix = ReadUniBytes(prefix); this.type = type; this.suffix = ReadUniBytes(suffix); }
internal static int TransformDictionaryWord(byte[] dst, int dstOffset, byte[] word, int wordOffset, int len, BrotliTransform transform) { int offset = dstOffset; // Copy prefix. byte[] prefixBuffer = transform._prefix; int tmp = prefixBuffer.Length; int i = 0; // In most cases tmp < 10 -> no benefits from System.arrayCopy while (i < tmp) { dst[offset++] = prefixBuffer[i++]; } // Copy trimmed word. int op = transform._type; tmp = WordTransformType.GetOmitFirst(op); if (tmp > len) { tmp = len; } wordOffset += tmp; len -= tmp; len -= WordTransformType.GetOmitLast(op); i = len; while (i > 0) { dst[offset++] = word[wordOffset++]; i--; } if (op == WordTransformType.UppercaseAll || op == WordTransformType.UppercaseFirst) { int uppercaseOffset = offset - len; if (op == 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. prefixBuffer = transform._suffix; tmp = prefixBuffer.Length; i = 0; while (i < tmp) { dst[offset++] = prefixBuffer[i++]; } return(offset - dstOffset); }