Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/gfx/ots/src/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 3 kB image not shown  

Quelle  mvar.cc   Sprache: C

 
// Copyright (c) 2018 The OTS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "mvar.h"

#include "variations.h"

namespace ots {

// -----------------------------------------------------------------------------
// OpenTypeMVAR
// -----------------------------------------------------------------------------

bool OpenTypeMVAR::Parse(const uint8_t* data, size_t length) {
  Buffer table(data, length);

  uint16_t majorVersion;
  uint16_t minorVersion;
  uint16_t reserved;
  uint16_t valueRecordSize;
  uint16_t valueRecordCount;
  uint16_t itemVariationStoreOffset;

  if (!table.ReadU16(&majorVersion) ||
      !table.ReadU16(&minorVersion) ||
      !table.ReadU16(&reserved) ||
      !table.ReadU16(&valueRecordSize) ||
      !table.ReadU16(&valueRecordCount) ||
      !table.ReadU16(&itemVariationStoreOffset)) {
    return DropVariations("Failed to read table header");
  }

  if (majorVersion != 1) {
    return DropVariations("Unknown table version");
  }

  if (reserved != 0) {
    Warning("Expected reserved=0");
  }

  // The spec says that valueRecordSize "must be greater than zero",
  // but we don't enforce this in the case where valueRecordCount
  // is zero.
  // The minimum size for a valueRecord to be valid is 8, for the
  // three fields currently defined in the record (see below).
  if (valueRecordSize < 8) {
    if (valueRecordCount != 0) {
      return DropVariations("Value record size too small");
    }
  }

  if (valueRecordCount == 0) {
    if (itemVariationStoreOffset != 0) {
      // The spec says "if valueRecordCount is zero, set to zero",
      // but having a variation store even when record count is zero
      // should be harmless -- it just won't be useful for anything.
      // But we don't need to reject altogether.
      Warning("Unexpected item variation store");
    }
  } else {
    if (itemVariationStoreOffset < table.offset() || itemVariationStoreOffset > length) {
      return DropVariations("Invalid item variation store offset");
    }
    if (!ParseItemVariationStore(GetFont(), data + itemVariationStoreOffset,
                                 length - itemVariationStoreOffset)) {
      return DropVariations("Failed to parse item variation store");
    }
  }

  uint32_t prevTag = 0;
  size_t offset = table.offset();
  for (unsigned i = 0; i < valueRecordCount; i++) {
    uint32_t tag;
    uint16_t deltaSetOuterIndex, deltaSetInnerIndex;
    if (!table.ReadU32(&tag) ||
        !table.ReadU16(&deltaSetOuterIndex) ||
        !table.ReadU16(&deltaSetInnerIndex)) {
      return DropVariations("Failed to read value record");
    }
    if (tag <= prevTag) {
      return DropVariations(
        "Out-of-order value tag: '%c%c%c%c', previous tag: '%c%c%c%c'",
        OTS_UNTAG(tag), OTS_UNTAG(prevTag));
    }
    prevTag = tag;
    // Adjust offset in case additional fields have been added to the
    // valueRecord by a new minor version (allowed by spec).
    offset += valueRecordSize;
    table.set_offset(offset);
  }

  this->m_data = data;
  this->m_length = length;

  return true;
}

bool OpenTypeMVAR::Serialize(OTSStream* out) {
  if (!out->Write(this->m_data, this->m_length)) {
    return Error("Failed to write MVAR table");
  }

  return true;
}

}  // namespace ots

Messung V0.5
C=93 H=94 G=93

¤ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

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 und die Messung sind noch experimentell.