#include "third_party/blink/renderer/core/editing/commands/apply_style_command.h"
#include "mojo/public/mojom/base/text_direction.mojom-blink.h"
#include "third_party/blink/renderer/core/css/css_computed_style_declaration.h"
#include "third_party/blink/renderer/core/css/css_numeric_literal_value.h"
#include "third_party/blink/renderer/core/css/css_primitive_value.h"
#include "third_party/blink/renderer/core/css/css_property_names.h"
#include "third_party/blink/renderer/core/css/css_property_value_set.h"
#include "third_party/blink/renderer/core/css_value_keywords.h"
#include "third_party/blink/renderer/core/display_lock/display_lock_utilities.h"
#include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/dom/node_list.h"
#include "third_party/blink/renderer/core/dom/node_traversal.h"
#include "third_party/blink/renderer/core/dom/range.h"
#include "third_party/blink/renderer/core/dom/text.h"
#include "third_party/blink/renderer/core/editing/commands/editing_commands_utilities.h"
#include "third_party/blink/renderer/core/editing/editing_style.h"
#include "third_party/blink/renderer/core/editing/editing_style_utilities.h"
#include "third_party/blink/renderer/core/editing/editing_utilities.h"
#include "third_party/blink/renderer/core/editing/ephemeral_range.h"
#include "third_party/blink/renderer/core/editing/iterators/text_iterator.h"
#include "third_party/blink/renderer/core/editing/plain_text_range.h"
#include "third_party/blink/renderer/core/editing/relocatable_position.h"
#include "third_party/blink/renderer/core/editing/selection_template.h"
#include "third_party/blink/renderer/core/editing/serializers/html_interchange.h"
#include "third_party/blink/renderer/core/editing/visible_position.h"
#include "third_party/blink/renderer/core/editing/visible_selection.h"
#include "third_party/blink/renderer/core/editing/visible_units.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/html/html_anchor_element.h"
#include "third_party/blink/renderer/core/html/html_font_element.h"
#include "third_party/blink/renderer/core/html/html_iframe_element.h"
#include "third_party/blink/renderer/core/html/html_span_element.h"
#include "third_party/blink/renderer/core/html_names.h"
#include "third_party/blink/renderer/core/layout/layout_object.h"
#include "third_party/blink/renderer/core/layout/layout_text.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
#include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
#include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
namespace blink {
static bool HasNoAttributeOrOnlyStyleAttribute(
const HTMLElement* element,
ShouldStyleAttributeBeEmpty should_style_attribute_be_empty) { … }
bool IsStyleSpanOrSpanWithOnlyStyleAttribute(const Element* element) { … }
static inline bool IsSpanWithoutAttributesOrUnstyledStyleSpan(
const Node* node) { … }
bool IsEmptyFontTag(
const Element* element,
ShouldStyleAttributeBeEmpty should_style_attribute_be_empty) { … }
static bool OffsetIsBeforeLastNodeOffset(int offset, Node* anchor_node) { … }
ApplyStyleCommand::ApplyStyleCommand(Document& document,
const EditingStyle* style,
InputEvent::InputType input_type,
PropertyLevel property_level)
: … { … }
ApplyStyleCommand::ApplyStyleCommand(Document& document,
const EditingStyle* style,
const Position& start,
const Position& end)
: … { … }
ApplyStyleCommand::ApplyStyleCommand(Element* element, bool remove_only)
: … { … }
ApplyStyleCommand::ApplyStyleCommand(
Document& document,
const EditingStyle* style,
IsInlineElementToRemoveFunction is_inline_element_to_remove_function,
InputEvent::InputType input_type)
: … { … }
void ApplyStyleCommand::UpdateStartEnd(const EphemeralRange& range) { … }
Position ApplyStyleCommand::StartPosition() { … }
Position ApplyStyleCommand::EndPosition() { … }
void ApplyStyleCommand::DoApply(EditingState* editing_state) { … }
InputEvent::InputType ApplyStyleCommand::GetInputType() const { … }
void ApplyStyleCommand::ApplyBlockStyle(EditingStyle* style,
EditingState* editing_state) { … }
static MutableCSSPropertyValueSet* CopyStyleOrCreateEmpty(
const CSSPropertyValueSet* style) { … }
void ApplyStyleCommand::ApplyRelativeFontStyleChange(
EditingStyle* style,
EditingState* editing_state) { … }
static ContainerNode* DummySpanAncestorForNode(const Node* node) { … }
void ApplyStyleCommand::CleanupUnstyledAppleStyleSpans(
ContainerNode* dummy_span_ancestor,
EditingState* editing_state) { … }
HTMLElement* ApplyStyleCommand::SplitAncestorsWithUnicodeBidi(
Node* node,
bool before,
mojo_base::mojom::blink::TextDirection allowed_direction) { … }
void ApplyStyleCommand::RemoveEmbeddingUpToEnclosingBlock(
Node* node,
HTMLElement* unsplit_ancestor,
EditingState* editing_state) { … }
static HTMLElement* HighestEmbeddingAncestor(Node* start_node,
Node* enclosing_node) { … }
void ApplyStyleCommand::ApplyInlineStyle(EditingStyle* style,
EditingState* editing_state) { … }
void ApplyStyleCommand::FixRangeAndApplyInlineStyle(
EditingStyle* style,
const Position& start,
const Position& end,
EditingState* editing_state) { … }
static bool ContainsNonEditableRegion(Node& node) { … }
class InlineRunToApplyStyle { … };
}
WTF_ALLOW_INIT_WITH_MEM_FUNCTIONS(…)
namespace blink {
void ApplyStyleCommand::ApplyInlineStyleToNodeRange(
EditingStyle* style,
Node* start_node,
Node* past_end_node,
EditingState* editing_state) { … }
bool ApplyStyleCommand::IsStyledInlineElementToRemove(Element* element) const { … }
bool ApplyStyleCommand::ShouldApplyInlineStyleToRun(EditingStyle* style,
Node* run_start,
Node* past_end_node) { … }
void ApplyStyleCommand::RemoveConflictingInlineStyleFromRun(
EditingStyle* style,
Member<Node>& run_start,
Member<Node>& run_end,
Node* past_end_node,
EditingState* editing_state) { … }
bool ApplyStyleCommand::RemoveInlineStyleFromElement(
EditingStyle* style,
HTMLElement* element,
EditingState* editing_state,
InlineStyleRemovalMode mode,
EditingStyle* extracted_style) { … }
void ApplyStyleCommand::ReplaceWithSpanOrRemoveIfWithoutAttributes(
HTMLElement* elem,
EditingState* editing_state) { … }
bool ApplyStyleCommand::RemoveImplicitlyStyledElement(
EditingStyle* style,
HTMLElement* element,
InlineStyleRemovalMode mode,
EditingStyle* extracted_style,
EditingState* editing_state) { … }
bool ApplyStyleCommand::RemoveCSSStyle(EditingStyle* style,
HTMLElement* element,
EditingState* editing_state,
InlineStyleRemovalMode mode,
EditingStyle* extracted_style) { … }
static Element* UnsplittableElementForPosition(const Position& p) { … }
HTMLElement* ApplyStyleCommand::HighestAncestorWithConflictingInlineStyle(
EditingStyle* style,
Node* node) { … }
void ApplyStyleCommand::ApplyInlineStyleToPushDown(
Node* node,
EditingStyle* style,
EditingState* editing_state) { … }
void ApplyStyleCommand::PushDownInlineStyleAroundNode(
EditingStyle* style,
Node* target_node,
EditingState* editing_state) { … }
void ApplyStyleCommand::RemoveInlineStyle(EditingStyle* style,
const EphemeralRange& range,
EditingState* editing_state) { … }
bool ApplyStyleCommand::ElementFullySelected(const HTMLElement& element,
const Position& start,
const Position& end) const { … }
void ApplyStyleCommand::SplitTextAtStart(const Position& start,
const Position& end) { … }
void ApplyStyleCommand::SplitTextAtEnd(const Position& start,
const Position& end) { … }
void ApplyStyleCommand::SplitTextElementAtStart(const Position& start,
const Position& end) { … }
void ApplyStyleCommand::SplitTextElementAtEnd(const Position& start,
const Position& end) { … }
bool ApplyStyleCommand::ShouldSplitTextElement(Element* element,
EditingStyle* style) { … }
bool ApplyStyleCommand::IsValidCaretPositionInTextNode(
const Position& position) { … }
bool ApplyStyleCommand::MergeStartWithPreviousIfIdentical(
const Position& start,
const Position& end,
EditingState* editing_state) { … }
bool ApplyStyleCommand::MergeEndWithNextIfIdentical(
const Position& start,
const Position& end,
EditingState* editing_state) { … }
void ApplyStyleCommand::SurroundNodeRangeWithElement(
Node* passed_start_node,
Node* end_node,
Element* element_to_insert,
EditingState* editing_state) { … }
void ApplyStyleCommand::AddBlockStyle(const StyleChange& style_change,
HTMLElement* block) { … }
void ApplyStyleCommand::AddInlineStyleIfNeeded(EditingStyle* style,
Node* passed_start,
Node* passed_end,
EditingState* editing_state) { … }
Position ApplyStyleCommand::PositionToComputeInlineStyleChange(
Node* start_node,
Member<HTMLSpanElement>& dummy_element,
EditingState* editing_state) { … }
void ApplyStyleCommand::ApplyInlineStyleChange(
Node* passed_start,
Node* passed_end,
StyleChange& style_change,
AddStyledElement add_styled_element,
EditingState* editing_state) { … }
float ApplyStyleCommand::ComputedFontSize(Node* node) { … }
void ApplyStyleCommand::JoinChildTextNodes(ContainerNode* node,
const Position& start,
const Position& end) { … }
void ApplyStyleCommand::Trace(Visitor* visitor) const { … }
}