SkShaperJSONWriter.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /*
  2. * Copyright 2019 Google Inc.
  3. *
  4. * Use of this source code is governed by a BSD-style license that can be
  5. * found in the LICENSE file.
  6. */
  7. #ifndef SkShaperJSONWriter_DEFINED
  8. #define SkShaperJSONWriter_DEFINED
  9. #include <cstddef>
  10. #include <cstdint>
  11. #include <functional>
  12. #include <string>
  13. #include <vector>
  14. #include "modules/skshaper/include/SkShaper.h"
  15. #include "src/core/SkSpan.h"
  16. class SkJSONWriter;
  17. class SkShaperJSONWriter final : public SkShaper::RunHandler {
  18. public:
  19. SkShaperJSONWriter(SkJSONWriter* JSONWriter, const char* utf8, size_t size);
  20. void beginLine() override;
  21. void runInfo(const RunInfo& info) override;
  22. void commitRunInfo() override;
  23. Buffer runBuffer(const RunInfo& info) override;
  24. void commitRunBuffer(const RunInfo& info) override;
  25. void commitLine() override {}
  26. using BreakupCluastersCallback =
  27. std::function<void(size_t, size_t, uint32_t, uint32_t)>;
  28. // Break up cluster into a set of ranges for the UTF8, and the glyphIDs.
  29. static void BreakupClusters(size_t utf8Begin, size_t utf8End,
  30. SkSpan<const uint32_t> clusters,
  31. const BreakupCluastersCallback& processMToN);
  32. using VisualizeClustersCallback =
  33. std::function<void(size_t, SkSpan<const char>, SkSpan<const SkGlyphID>)>;
  34. // Gather runs of 1:1 into larger runs, and display M:N as single entries.
  35. static void VisualizeClusters(const char utf8[],
  36. size_t utf8Begin, size_t utf8End,
  37. SkSpan<const SkGlyphID> glyphIDs,
  38. SkSpan<const uint32_t> clusters,
  39. const VisualizeClustersCallback& processMToN);
  40. private:
  41. void displayMToN(size_t codePointCount,
  42. SkSpan<const char> utf8,
  43. SkSpan<const SkGlyphID> glyphIDs);
  44. SkJSONWriter* fJSONWriter;
  45. std::vector<SkGlyphID> fGlyphs;
  46. std::vector<SkPoint> fPositions;
  47. std::vector<uint32_t> fClusters;
  48. std::string fUTF8;
  49. };
  50. #endif // SkShaperJSONWriter_DEFINED