/* * Copyright 2019 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkShaperJSONWriter_DEFINED #define SkShaperJSONWriter_DEFINED #include #include #include #include #include #include "modules/skshaper/include/SkShaper.h" #include "src/core/SkSpan.h" class SkJSONWriter; class SkShaperJSONWriter final : public SkShaper::RunHandler { public: SkShaperJSONWriter(SkJSONWriter* JSONWriter, const char* utf8, size_t size); void beginLine() override; void runInfo(const RunInfo& info) override; void commitRunInfo() override; Buffer runBuffer(const RunInfo& info) override; void commitRunBuffer(const RunInfo& info) override; void commitLine() override {} using BreakupCluastersCallback = std::function; // Break up cluster into a set of ranges for the UTF8, and the glyphIDs. static void BreakupClusters(size_t utf8Begin, size_t utf8End, SkSpan clusters, const BreakupCluastersCallback& processMToN); using VisualizeClustersCallback = std::function, SkSpan)>; // Gather runs of 1:1 into larger runs, and display M:N as single entries. static void VisualizeClusters(const char utf8[], size_t utf8Begin, size_t utf8End, SkSpan glyphIDs, SkSpan clusters, const VisualizeClustersCallback& processMToN); private: void displayMToN(size_t codePointCount, SkSpan utf8, SkSpan glyphIDs); SkJSONWriter* fJSONWriter; std::vector fGlyphs; std::vector fPositions; std::vector fClusters; std::string fUTF8; }; #endif // SkShaperJSONWriter_DEFINED