#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_VISIBLE_SELECTION_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_VISIBLE_SELECTION_H_
#include "base/dcheck_is_on.h"
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/editing/editing_strategy.h"
#include "third_party/blink/renderer/core/editing/forward.h"
#include "third_party/blink/renderer/core/editing/position.h"
#include "third_party/blink/renderer/core/editing/selection_adjuster.h"
#include "third_party/blink/renderer/core/editing/text_affinity.h"
#include "third_party/blink/renderer/core/editing/text_granularity.h"
#include "third_party/blink/renderer/core/editing/visible_units.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
namespace blink {
const TextAffinity kSelDefaultAffinity = …;
template <typename Strategy>
class VisibleSelectionTemplate { … };
extern template class CORE_EXTERN_TEMPLATE_EXPORT
VisibleSelectionTemplate<EditingStrategy>;
extern template class CORE_EXTERN_TEMPLATE_EXPORT
VisibleSelectionTemplate<EditingInFlatTreeStrategy>;
VisibleSelection;
VisibleSelectionInFlatTree;
CORE_EXPORT VisibleSelection CreateVisibleSelection(const SelectionInDOMTree&);
CORE_EXPORT VisibleSelectionInFlatTree
CreateVisibleSelection(const SelectionInFlatTree&);
CORE_EXPORT SelectionInDOMTree
ExpandWithGranularity(const SelectionInDOMTree&,
TextGranularity,
const WordInclusion& = WordInclusion::kDefault);
CORE_EXPORT SelectionInFlatTree
ExpandWithGranularity(const SelectionInFlatTree&,
TextGranularity,
const WordInclusion& = WordInclusion::kDefault);
CORE_EXPORT EphemeralRange FirstEphemeralRangeOf(const VisibleSelection&);
CORE_EXPORT EphemeralRange NormalizeRange(const SelectionInDOMTree&);
CORE_EXPORT EphemeralRangeInFlatTree NormalizeRange(const SelectionInFlatTree&);
CORE_EXPORT std::ostream& operator<<(std::ostream&, const VisibleSelection&);
CORE_EXPORT std::ostream& operator<<(std::ostream&,
const VisibleSelectionInFlatTree&);
PositionInFlatTree ComputeStartRespectingGranularity(
const PositionInFlatTreeWithAffinity&,
TextGranularity);
PositionInFlatTree ComputeEndRespectingGranularity(
const PositionInFlatTree&,
const PositionInFlatTreeWithAffinity&,
TextGranularity);
}
#if DCHECK_IS_ON()
void ShowTree(const blink::VisibleSelection&);
void ShowTree(const blink::VisibleSelection*);
void ShowTree(const blink::VisibleSelectionInFlatTree&);
void ShowTree(const blink::VisibleSelectionInFlatTree*);
#endif
#endif