1 /* 2 * Copyright 2018 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 8 #ifndef SkPDFTag_DEFINED 9 #define SkPDFTag_DEFINED 10 11 #include "SkPDFDocument.h" 12 #include "SkTArray.h" 13 #include "SkArenaAlloc.h" 14 #include "SkTHash.h" 15 16 class SkPDFDocument; 17 struct SkPDFTagNode; 18 19 class SkPDFTagTree { 20 public: 21 SkPDFTagTree(); 22 ~SkPDFTagTree(); 23 void init(const SkPDF::StructureElementNode*); 24 void reset(); 25 int getMarkIdForNodeId(int nodeId, unsigned pageIndex); 26 SkPDFIndirectReference makeStructTreeRoot(SkPDFDocument* doc); 27 28 private: 29 SkArenaAlloc fArena; 30 SkTHashMap<int, SkPDFTagNode*> fNodeMap; 31 SkPDFTagNode* fRoot = nullptr; 32 SkTArray<SkTArray<SkPDFTagNode*>> fMarksPerPage; 33 34 SkPDFTagTree(const SkPDFTagTree&) = delete; 35 SkPDFTagTree& operator=(const SkPDFTagTree&) = delete; 36 }; 37 38 #endif 39