Path: blob/master/thirdparty/graphite/src/inc/Pass.h
10279 views
// SPDX-License-Identifier: MIT OR MPL-2.0 OR LGPL-2.1-or-later OR GPL-2.0-or-later1// Copyright 2010, SIL International, All rights reserved.23#pragma once45#include <cstdlib>6#include "inc/Code.h"78namespace graphite2 {910class Segment;11class Face;12class Silf;13struct Rule;14struct RuleEntry;15struct State;16class FiniteStateMachine;17class Error;18class ShiftCollider;19class KernCollider;20class json;2122enum passtype;2324class Pass25{26public:27Pass();28~Pass();2930bool readPass(const byte * pPass, size_t pass_length, size_t subtable_base, Face & face,31enum passtype pt, uint32 version, Error &e);32bool runGraphite(vm::Machine & m, FiniteStateMachine & fsm, bool reverse) const;33void init(Silf *silf) { m_silf = silf; }34byte collisionLoops() const { return m_numCollRuns; }35bool reverseDir() const { return m_isReverseDir; }3637CLASS_NEW_DELETE38private:39void findNDoRule(Slot* & iSlot, vm::Machine &, FiniteStateMachine& fsm) const;40int doAction(const vm::Machine::Code* codeptr, Slot * & slot_out, vm::Machine &) const;41bool testPassConstraint(vm::Machine & m) const;42bool testConstraint(const Rule & r, vm::Machine &) const;43bool readRules(const byte * rule_map, const size_t num_entries,44const byte *precontext, const uint16 * sort_key,45const uint16 * o_constraint, const byte *constraint_data,46const uint16 * o_action, const byte * action_data,47Face &, enum passtype pt, Error &e);48bool readStates(const byte * starts, const byte * states, const byte * o_rule_map, Face &, Error &e);49bool readRanges(const byte * ranges, size_t num_ranges, Error &e);50uint16 glyphToCol(const uint16 gid) const;51bool runFSM(FiniteStateMachine & fsm, Slot * slot) const;52void dumpRuleEventConsidered(const FiniteStateMachine & fsm, const RuleEntry & re) const;53void dumpRuleEventOutput(const FiniteStateMachine & fsm, const Rule & r, Slot * os) const;54void adjustSlot(int delta, Slot * & slot_out, SlotMap &) const;55bool collisionShift(Segment *seg, int dir, json * const dbgout) const;56bool collisionKern(Segment *seg, int dir, json * const dbgout) const;57bool collisionFinish(Segment *seg, GR_MAYBE_UNUSED json * const dbgout) const;58bool resolveCollisions(Segment *seg, Slot *slot, Slot *start, ShiftCollider &coll, bool isRev,59int dir, bool &moved, bool &hasCol, json * const dbgout) const;60float resolveKern(Segment *seg, Slot *slot, Slot *start, int dir,61float &ymin, float &ymax, json *const dbgout) const;6263const Silf * m_silf;64uint16 * m_cols;65Rule * m_rules; // rules66RuleEntry * m_ruleMap;67uint16 * m_startStates; // prectxt length68uint16 * m_transitions;69State * m_states;70vm::Machine::Code * m_codes;71byte * m_progs;7273byte m_numCollRuns;74byte m_kernColls;75byte m_iMaxLoop;76uint16 m_numGlyphs;77uint16 m_numRules;78uint16 m_numStates;79uint16 m_numTransition;80uint16 m_numSuccess;81uint16 m_successStart;82uint16 m_numColumns;83byte m_minPreCtxt;84byte m_maxPreCtxt;85byte m_colThreshold;86bool m_isReverseDir;87vm::Machine::Code m_cPConstraint;8889private: //defensive90Pass(const Pass&);91Pass& operator=(const Pass&);92};9394} // namespace graphite2959697