// Based on section 6.1.1 of MicroType Express draft spec bool Read255UShort(Buffer* buf, unsignedint* value) { staticconstint kWordCode = 253; staticconstint kOneMoreByteCode2 = 254; staticconstint kOneMoreByteCode1 = 255; staticconstint kLowestUCode = 253;
uint8_t code = 0; if (!buf->ReadU8(&code)) { return FONT_COMPRESSION_FAILURE();
} if (code == kWordCode) {
uint16_t result = 0; if (!buf->ReadU16(&result)) { return FONT_COMPRESSION_FAILURE();
}
*value = result; returntrue;
} elseif (code == kOneMoreByteCode1) {
uint8_t result = 0; if (!buf->ReadU8(&result)) { return FONT_COMPRESSION_FAILURE();
}
*value = result + kLowestUCode; returntrue;
} elseif (code == kOneMoreByteCode2) {
uint8_t result = 0; if (!buf->ReadU8(&result)) { return FONT_COMPRESSION_FAILURE();
}
*value = result + kLowestUCode * 2; returntrue;
} else {
*value = code; returntrue;
}
}
bool ReadBase128(Buffer* buf, uint32_t* value) {
uint32_t result = 0; for (size_t i = 0; i < 5; ++i) {
uint8_t code = 0; if (!buf->ReadU8(&code)) { return FONT_COMPRESSION_FAILURE();
} // Leading zeros are invalid. if (i == 0 && code == 0x80) { return FONT_COMPRESSION_FAILURE();
} // If any of the top seven bits are set then we're about to overflow. if (result & 0xfe000000) { return FONT_COMPRESSION_FAILURE();
}
result = (result << 7) | (code & 0x7f); if ((code & 0x80) == 0) {
*value = result; returntrue;
}
} // Make sure not to exceed the size bound return FONT_COMPRESSION_FAILURE();
}
size_t Base128Size(size_t n) {
size_t size = 1; for (; n >= 128; n >>= 7) ++size; return size;
}
void StoreBase128(size_t len, size_t* offset, uint8_t* dst) {
size_t size = Base128Size(len); for (size_t i = 0; i < size; ++i) { int b = static_cast<int>((len >> (7 * (size - i - 1))) & 0x7f); if (i < size - 1) {
b |= 0x80;
}
dst[(*offset)++] = b;
}
}
} // namespace woff2
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.