// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef PDF_PDFIUM_PDFIUM_RANGE_H_ #define PDF_PDFIUM_PDFIUM_RANGE_H_ #include #include #include "base/memory/raw_ptr.h" #include "pdf/page_orientation.h" #include "pdf/pdfium/pdfium_page.h" #include "ui/gfx/geometry/point.h" #include "ui/gfx/geometry/rect.h" namespace chrome_pdf { constexpr char16_t kZeroWidthSpace = 0x200B; constexpr char16_t kPDFSoftHyphenMarker = 0xFFFE; // Helper for identifying characters that PDFium outputs, via FPDFText_GetText, // that have special meaning, but should not be included in things like copied // text or when running find. bool IsIgnorableCharacter(char16_t c); // Describes location of a string of characters. class PDFiumRange { public: PDFiumRange(PDFiumPage* page, int char_index, int char_count); PDFiumRange(const PDFiumRange& that); ~PDFiumRange(); // Update how many characters are in the selection. Could be negative if // backwards. void SetCharCount(int char_count); int page_index() const { return page_->index(); } int char_index() const { return char_index_; } int char_count() const { return char_count_; } // Gets bounding rectangles of range in screen coordinates. const std::vector& GetScreenRects( const gfx::Point& point, double zoom, PageOrientation orientation) const; // Gets the string of characters in this range. std::u16string GetText() const; private: // The page containing the range. Must outlive `this`. raw_ptr page_; // Index of first character. int char_index_; // How many characters are part of this range (negative if backwards). int char_count_; // Cache of ScreenRect, and the associated variables used when caching it. mutable std::vector cached_screen_rects_; mutable gfx::Point cached_screen_rects_point_; mutable double cached_screen_rects_zoom_ = 0; }; } // namespace chrome_pdf #endif // PDF_PDFIUM_PDFIUM_RANGE_H_