blob: 38e16d4be3cc89ddd31aaf1e5e16816936601387 [file] [log] [blame]
// Copyright 2017 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 THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_ITERATORS_TEXT_ITERATOR_BEHAVIOR_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_ITERATORS_TEXT_ITERATOR_BEHAVIOR_H_
#include "base/macros.h"
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
namespace blink {
class CORE_EXPORT TextIteratorBehavior final {
DISALLOW_NEW();
public:
class CORE_EXPORT Builder;
TextIteratorBehavior(const TextIteratorBehavior& other);
TextIteratorBehavior();
bool operator==(const TextIteratorBehavior& other) const;
bool operator!=(const TextIteratorBehavior& other) const;
bool DoesNotBreakAtReplacedElement() const {
return values_.bits.does_not_break_at_replaced_element;
}
bool EmitsCharactersBetweenAllVisiblePositions() const {
return values_.bits.emits_characters_between_all_visible_positions;
}
bool EmitsImageAltText() const { return values_.bits.emits_image_alt_text; }
bool EmitsSpaceForNbsp() const { return values_.bits.emits_space_for_nbsp; }
bool EmitsObjectReplacementCharacter() const {
return values_.bits.emits_object_replacement_character;
}
bool EmitsOriginalText() const { return values_.bits.emits_original_text; }
bool EntersOpenShadowRoots() const {
return values_.bits.enters_open_shadow_roots;
}
bool EmitsSmallXForTextSecurity() const {
return values_.bits.emits_small_x_for_text_security;
}
bool EntersTextControls() const { return values_.bits.enters_text_controls; }
bool ExcludeAutofilledValue() const {
return values_.bits.exclude_autofilled_value;
}
// TODO(editing-dev): We should remove unused flag |ForInnerText()|.
bool ForInnerText() const { return values_.bits.for_inner_text; }
bool ForSelectionToString() const {
return values_.bits.for_selection_to_string;
}
bool ForWindowFind() const { return values_.bits.for_window_find; }
bool IgnoresStyleVisibility() const {
return values_.bits.ignores_style_visibility;
}
bool StopsOnFormControls() const {
return values_.bits.stops_on_form_controls;
}
bool DoesNotEmitSpaceBeyondRangeEnd() const {
return values_.bits.does_not_emit_space_beyond_range_end;
}
bool SkipsUnselectableContent() const {
return values_.bits.skips_unselectable_content;
}
bool SuppressesExtraNewlineEmission() const {
return values_.bits.suppresses_newline_emission;
}
bool IgnoresDisplayLock() const { return values_.bits.ignores_display_lock; }
static TextIteratorBehavior EmitsObjectReplacementCharacterBehavior();
static TextIteratorBehavior IgnoresStyleVisibilityBehavior();
static TextIteratorBehavior DefaultRangeLengthBehavior();
static TextIteratorBehavior AllVisiblePositionsRangeLengthBehavior();
static TextIteratorBehavior NoTrailingSpaceRangeLengthBehavior();
private:
union {
unsigned all;
struct {
bool does_not_break_at_replaced_element : 1;
bool emits_characters_between_all_visible_positions : 1;
bool emits_image_alt_text : 1;
bool emits_space_for_nbsp : 1;
bool emits_object_replacement_character : 1;
bool emits_original_text : 1;
bool emits_small_x_for_text_security : 1;
bool enters_open_shadow_roots : 1;
bool enters_text_controls : 1;
bool exclude_autofilled_value : 1;
bool for_inner_text : 1;
bool for_selection_to_string : 1;
bool for_window_find : 1;
bool ignores_style_visibility : 1;
bool stops_on_form_controls : 1;
bool does_not_emit_space_beyond_range_end : 1;
bool skips_unselectable_content : 1;
bool suppresses_newline_emission : 1;
bool ignores_display_lock : 1;
} bits;
} values_;
};
class CORE_EXPORT TextIteratorBehavior::Builder final {
STACK_ALLOCATED();
public:
explicit Builder(const TextIteratorBehavior&);
Builder();
~Builder();
TextIteratorBehavior Build();
Builder& SetDoesNotBreakAtReplacedElement(bool);
Builder& SetEmitsCharactersBetweenAllVisiblePositions(bool);
Builder& SetEmitsImageAltText(bool);
Builder& SetEmitsSpaceForNbsp(bool);
Builder& SetEmitsObjectReplacementCharacter(bool);
Builder& SetEmitsOriginalText(bool);
Builder& SetEmitsSmallXForTextSecurity(bool);
Builder& SetEntersOpenShadowRoots(bool);
Builder& SetEntersTextControls(bool);
Builder& SetExcludeAutofilledValue(bool);
Builder& SetForInnerText(bool);
Builder& SetForSelectionToString(bool);
Builder& SetForWindowFind(bool);
Builder& SetIgnoresStyleVisibility(bool);
Builder& SetStopsOnFormControls(bool);
Builder& SetDoesNotEmitSpaceBeyondRangeEnd(bool);
Builder& SetSkipsUnselectableContent(bool);
Builder& SetSuppressesExtraNewlineEmission(bool);
Builder& SetIgnoresDisplayLock(bool);
private:
TextIteratorBehavior behavior_;
DISALLOW_COPY_AND_ASSIGN(Builder);
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_ITERATORS_TEXT_ITERATOR_BEHAVIOR_H_