/* * Copyright (c) 2008, 2009, Google Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. * * Neither the name of Google Inc. nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "third_party/blink/renderer/platform/fonts/vdmx_parser.h" #include <stdlib.h> #include <string.h> #include "base/containers/span.h" #include "base/containers/span_reader.h" #include "base/numerics/byte_conversions.h" #include "base/types/optional_util.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" namespace blink { // VDMX parsing code. // // VDMX tables are found in some TrueType/OpenType fonts and contain // ascender/descender overrides for certain (usually small) sizes. This is // needed in order to match font metrics on Windows. // // Freetype does not parse these tables so we do so here. // Parse a TrueType VDMX table. // yMax: (output) the ascender value from the table // yMin: (output) the descender value from the table (negative!) // vdmx: the table bytes // vdmxLength: length of @vdmx, in bytes // targetPixelSize: the pixel size of the font (e.g. 16) // // Returns true iff a suitable match are found. Otherwise, *yMax and *yMin are // untouched. size_t must be 32-bits to avoid overflow. // // See http://www.microsoft.com/opentype/otspec/vdmx.htm bool ParseVDMX(int* y_max, int* y_min, const uint8_t* vdmx_ptr, size_t vdmx_length, unsigned target_pixel_size) { … } } // namespace blink