Path: blob/master/thirdparty/graphite/src/inc/Silf.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 "graphite2/Font.h"6#include "inc/Main.h"7#include "inc/Pass.h"89namespace graphite2 {1011class Face;12class Segment;13class FeatureVal;14class VMScratch;15class Error;1617class Pseudo18{19public:20uint32 uid;21uint32 gid;22CLASS_NEW_DELETE;23};2425class Justinfo26{27public:28Justinfo(uint8 stretch, uint8 shrink, uint8 step, uint8 weight) :29m_astretch(stretch), m_ashrink(shrink), m_astep(step),30m_aweight(weight) {};31uint8 attrStretch() const { return m_astretch; }32uint8 attrShrink() const { return m_ashrink; }33uint8 attrStep() const { return m_astep; }34uint8 attrWeight() const { return m_aweight; }3536private:37uint8 m_astretch;38uint8 m_ashrink;39uint8 m_astep;40uint8 m_aweight;41};4243class Silf44{45// Prevent copying46Silf(const Silf&);47Silf& operator=(const Silf&);4849public:50Silf() throw();51~Silf() throw();5253bool readGraphite(const byte * const pSilf, size_t lSilf, Face &face, uint32 version);54bool runGraphite(Segment *seg, uint8 firstPass=0, uint8 lastPass=0, int dobidi = 0) const;55uint16 findClassIndex(uint16 cid, uint16 gid) const;56uint16 getClassGlyph(uint16 cid, unsigned int index) const;57uint16 findPseudo(uint32 uid) const;58uint8 numUser() const { return m_aUser; }59uint8 aPseudo() const { return m_aPseudo; }60uint8 aBreak() const { return m_aBreak; }61uint8 aMirror() const {return m_aMirror; }62uint8 aPassBits() const { return m_aPassBits; }63uint8 aBidi() const { return m_aBidi; }64uint8 aCollision() const { return m_aCollision; }65uint8 substitutionPass() const { return m_sPass; }66uint8 positionPass() const { return m_pPass; }67uint8 justificationPass() const { return m_jPass; }68uint8 bidiPass() const { return m_bPass; }69uint8 numPasses() const { return m_numPasses; }70uint8 maxCompPerLig() const { return m_iMaxComp; }71uint16 numClasses() const { return m_nClass; }72byte flags() const { return m_flags; }73byte dir() const { return m_dir; }74uint8 numJustLevels() const { return m_numJusts; }75Justinfo *justAttrs() const { return m_justs; }76uint16 endLineGlyphid() const { return m_gEndLine; }77const gr_faceinfo *silfInfo() const { return &m_silfinfo; }7879CLASS_NEW_DELETE;8081private:82size_t readClassMap(const byte *p, size_t data_len, uint32 version, Error &e);83template<typename T> inline uint32 readClassOffsets(const byte *&p, size_t data_len, Error &e);8485Pass * m_passes;86Pseudo * m_pseudos;87uint32 * m_classOffsets;88uint16 * m_classData;89Justinfo * m_justs;90uint8 m_numPasses;91uint8 m_numJusts;92uint8 m_sPass, m_pPass, m_jPass, m_bPass,93m_flags, m_dir;9495uint8 m_aPseudo, m_aBreak, m_aUser, m_aBidi, m_aMirror, m_aPassBits,96m_iMaxComp, m_aCollision;97uint16 m_aLig, m_numPseudo, m_nClass, m_nLinear,98m_gEndLine;99gr_faceinfo m_silfinfo;100101void releaseBuffers() throw();102};103104} // namespace graphite2105106107