代码拉取完成,页面将自动刷新
// Copyright 2020 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.
#include "pdf/accessibility_helper.h"
#include <stdint.h>
#include <vector>
#include "base/numerics/safe_math.h"
#include "base/optional.h"
#include "pdf/accessibility_structs.h"
namespace chrome_pdf {
bool IsCharWithinTextRun(const AccessibilityTextRunInfo& text_run,
uint32_t text_run_start_char_index,
uint32_t char_index) {
return char_index >= text_run_start_char_index &&
char_index - text_run_start_char_index < text_run.len;
}
// If a valid text run range is not found for the char range then return the
// fallback value.
AccessibilityTextRunRangeInfo GetEnclosingTextRunRangeForCharRange(
const std::vector<AccessibilityTextRunInfo>& text_runs,
int start_char_index,
int char_count) {
// Initialize with fallback value.
AccessibilityTextRunRangeInfo text_range = {text_runs.size(), 0};
if (start_char_index < 0 || char_count <= 0)
return text_range;
base::CheckedNumeric<uint32_t> checked_end_char_index = char_count - 1;
checked_end_char_index += start_char_index;
if (!checked_end_char_index.IsValid())
return text_range;
uint32_t end_char_index = checked_end_char_index.ValueOrDie();
uint32_t current_char_index = 0;
base::Optional<uint32_t> start_text_run;
for (size_t i = 0; i < text_runs.size(); ++i) {
if (!start_text_run.has_value() &&
IsCharWithinTextRun(text_runs[i], current_char_index,
start_char_index)) {
start_text_run = i;
}
if (start_text_run.has_value() &&
IsCharWithinTextRun(text_runs[i], current_char_index, end_char_index)) {
text_range.index = start_text_run.value();
text_range.count = i - text_range.index + 1;
break;
}
current_char_index += text_runs[i].len;
}
return text_range;
}
} // namespace chrome_pdf
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。