#pragma once #include #include #include #include "File.h" #include "IFont.h" class File; class FontReader { public: ~FontReader(); void setPath(const std::string& path); std::unique_ptr read(); private: struct OffsetSubtable { uint32_t scaler_type{0}; uint16_t num_tables{0}; uint16_t search_range{0}; uint16_t entry_selector{0}; uint16_t range_shift{0}; }; struct Table { std::string name; unsigned checksum{0}; unsigned offset{0}; unsigned length{0}; }; bool readOffsetSubtable(); void logOffsetSubtable(); void logTable(const Table& table); void readTableDirectory(); void readTable(); void readHeadTable(); unsigned mCurrentOffset{0}; OffsetSubtable mOffsetSubtable; std::vector mTables; std::unique_ptr mWorkingFont; std::unique_ptr mFile; std::string mPath; };