// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_ACCESSIBILITY_PLATFORM_AX_UTILS_MAC_H_
#define UI_ACCESSIBILITY_PLATFORM_AX_UTILS_MAC_H_
#import <Cocoa/Cocoa.h>
#include "base/component_export.h"
#include "ui/accessibility/platform/ax_platform_node_delegate.h"
@class AXPlatformNodeCocoa;
namespace ui {
// An AXTextMarker is used by applications like Chrome to store a position in
// the accessibility tree's text representation. It is a data structure whose
// contents are opaque to the system but whose allocation and deallocation is
// managed by it. The contents are interpreted by the application that created
// it.
// An AXTextMarkerRange is a pair of AXTextMarkers. The data in each of the
// two AXTextMarkers is provided by the application, but similar to an
// AXTextMarker its memory storage is managed by the system.
// Uses a system API to verify that the given object is an AXTextMarker object.
COMPONENT_EXPORT(AX_PLATFORM) bool IsAXTextMarker(id text_marker);
// Uses a system API to verify that the given object is an AXTextMarkerRange
// object.
COMPONENT_EXPORT(AX_PLATFORM) bool IsAXTextMarkerRange(id marker_range);
// Returns the AXNodePosition representing the given AXTextMarker.
COMPONENT_EXPORT(AX_PLATFORM)
AXPlatformNodeDelegate::AXPosition AXTextMarkerToAXPosition(id text_marker);
// Returns the AXRange representing the given AXTextMarkerRange.
COMPONENT_EXPORT(AX_PLATFORM)
AXPlatformNodeDelegate::AXRange AXTextMarkerRangeToAXRange(id marker_range);
// Returns the AXTextMarker representing the given AXNodePosition.
COMPONENT_EXPORT(AX_PLATFORM)
id AXPositionToAXTextMarker(AXPlatformNodeDelegate::AXPosition);
// Returns the AXTextMarkerRange representing the given AXRange.
COMPONENT_EXPORT(AX_PLATFORM)
id AXRangeToAXTextMarkerRange(AXPlatformNodeDelegate::AXRange);
// Returns the AXTextMarker representing the position within the given node.
COMPONENT_EXPORT(AX_PLATFORM)
id AXTextMarkerFrom(AXPlatformNodeCocoa* anchor,
int offset,
ax::mojom::TextAffinity affinity);
// Returns the AXTextMarkerRange representing the given AXTextMarker objects.
COMPONENT_EXPORT(AX_PLATFORM)
id AXTextMarkerRangeFrom(id anchor_textmarker, id focus_textmarker);
// Returns the start text marker from the given AXTextMarkerRange.
COMPONENT_EXPORT(AX_PLATFORM) id AXTextMarkerRangeStart(id text_marker_range);
// Returns the end text marker from the given AXTextMarkerRange.
COMPONENT_EXPORT(AX_PLATFORM) id AXTextMarkerRangeEnd(id text_marker_range);
} // namespace ui
#endif // UI_ACCESSIBILITY_PLATFORM_AX_UTILS_MAC_H_