blob: 6c877e51743a4aa9750a5e018ec1182511287309 [file] [log] [blame]
// Copyright 2010 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <string>
#include <vector>
#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 {
PDFiumRange(PDFiumPage* page, int char_index, int char_count);
PDFiumRange(const PDFiumRange& that);
// 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<gfx::Rect>& GetScreenRects(
const gfx::Point& point,
double zoom,
PageOrientation orientation) const;
// Gets the string of characters in this range.
std::u16string GetText() const;
PDFiumPage::ScopedUnloadPreventer page_unload_preventer_;
// The page containing the range. Must outlive `this`.
raw_ptr<PDFiumPage> 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<gfx::Rect> cached_screen_rects_;
mutable gfx::Point cached_screen_rects_point_;
mutable double cached_screen_rects_zoom_ = 0;
} // namespace chrome_pdf