Commit 00018286 authored by Yoshifumi Inoue's avatar Yoshifumi Inoue Committed by Commit Bot

Move block related functions to "EditingCommandsUtilities.cpp" from "VisubleUnits.cpp"

This patch moves block related functions
 - EndOfBlock()
 - IsEndOfBlock()
 - IsStartOfBlock()
 - StartOfBlock()
to "EditingCommandsUtilities.cpp" from "VisubleUnits.cpp" because these
functions are used only in files in "editing/commands/" for improving code
health.

Change-Id: Idbf3ebc0c29d44c955fe18d5e4a09b1d38aecfef
Reviewed-on: https://chromium-review.googlesource.com/985340Reviewed-by: default avatarXiaocheng Hu <xiaochengh@chromium.org>
Commit-Queue: Yoshifumi Inoue <yosin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#546752}
parent 88424202
......@@ -559,46 +559,6 @@ PositionInFlatTree PreviousBoundary(
// ---------
VisiblePosition StartOfBlock(const VisiblePosition& visible_position,
EditingBoundaryCrossingRule rule) {
DCHECK(visible_position.IsValid()) << visible_position;
Position position = visible_position.DeepEquivalent();
Element* start_block =
position.ComputeContainerNode()
? EnclosingBlock(position.ComputeContainerNode(), rule)
: nullptr;
return start_block ? VisiblePosition::FirstPositionInNode(*start_block)
: VisiblePosition();
}
VisiblePosition EndOfBlock(const VisiblePosition& visible_position,
EditingBoundaryCrossingRule rule) {
DCHECK(visible_position.IsValid()) << visible_position;
Position position = visible_position.DeepEquivalent();
Element* end_block =
position.ComputeContainerNode()
? EnclosingBlock(position.ComputeContainerNode(), rule)
: nullptr;
return end_block ? VisiblePosition::LastPositionInNode(*end_block)
: VisiblePosition();
}
bool IsStartOfBlock(const VisiblePosition& pos) {
DCHECK(pos.IsValid()) << pos;
return pos.IsNotNull() &&
pos.DeepEquivalent() ==
StartOfBlock(pos, kCanCrossEditingBoundary).DeepEquivalent();
}
bool IsEndOfBlock(const VisiblePosition& pos) {
DCHECK(pos.IsValid()) << pos;
return pos.IsNotNull() &&
pos.DeepEquivalent() ==
EndOfBlock(pos, kCanCrossEditingBoundary).DeepEquivalent();
}
// ---------
template <typename Strategy>
static VisiblePositionTemplate<Strategy> StartOfDocumentAlgorithm(
const VisiblePositionTemplate<Strategy>& visible_position) {
......
......@@ -227,16 +227,6 @@ bool InSameParagraph(const VisiblePosition&,
EditingBoundaryCrossingRule = kCannotCrossEditingBoundary);
EphemeralRange ExpandToParagraphBoundary(const EphemeralRange&);
// blocks (true paragraphs; line break elements don't break blocks)
VisiblePosition StartOfBlock(
const VisiblePosition&,
EditingBoundaryCrossingRule = kCannotCrossEditingBoundary);
VisiblePosition EndOfBlock(
const VisiblePosition&,
EditingBoundaryCrossingRule = kCannotCrossEditingBoundary);
bool IsStartOfBlock(const VisiblePosition&);
bool IsEndOfBlock(const VisiblePosition&);
// document
CORE_EXPORT VisiblePosition StartOfDocument(const VisiblePosition&);
CORE_EXPORT VisiblePositionInFlatTree
......
......@@ -666,4 +666,44 @@ InputEvent::EventIsComposing IsComposingFromCommand(
return InputEvent::EventIsComposing::kNotComposing;
}
// ---------
VisiblePosition StartOfBlock(const VisiblePosition& visible_position,
EditingBoundaryCrossingRule rule) {
DCHECK(visible_position.IsValid()) << visible_position;
Position position = visible_position.DeepEquivalent();
Element* start_block =
position.ComputeContainerNode()
? EnclosingBlock(position.ComputeContainerNode(), rule)
: nullptr;
return start_block ? VisiblePosition::FirstPositionInNode(*start_block)
: VisiblePosition();
}
VisiblePosition EndOfBlock(const VisiblePosition& visible_position,
EditingBoundaryCrossingRule rule) {
DCHECK(visible_position.IsValid()) << visible_position;
Position position = visible_position.DeepEquivalent();
Element* end_block =
position.ComputeContainerNode()
? EnclosingBlock(position.ComputeContainerNode(), rule)
: nullptr;
return end_block ? VisiblePosition::LastPositionInNode(*end_block)
: VisiblePosition();
}
bool IsStartOfBlock(const VisiblePosition& pos) {
DCHECK(pos.IsValid()) << pos;
return pos.IsNotNull() &&
pos.DeepEquivalent() ==
StartOfBlock(pos, kCanCrossEditingBoundary).DeepEquivalent();
}
bool IsEndOfBlock(const VisiblePosition& pos) {
DCHECK(pos.IsValid()) << pos;
return pos.IsNotNull() &&
pos.DeepEquivalent() ==
EndOfBlock(pos, kCanCrossEditingBoundary).DeepEquivalent();
}
} // namespace blink
......@@ -33,6 +33,7 @@
#include "core/CoreExport.h"
#include "core/editing/Forward.h"
#include "core/editing/TextGranularity.h"
#include "core/editing/VisibleUnits.h"
#include "core/events/InputEvent.h"
#include "platform/wtf/text/CharacterNames.h"
#include "platform/wtf/text/WTFString.h"
......@@ -157,6 +158,20 @@ InputEvent::EventIsComposing IsComposingFromCommand(
InputEvent::InputType DeletionInputTypeFromTextGranularity(DeleteDirection,
TextGranularity);
// -------------------------------------------------------------------------
// Blocks (true paragraphs; line break elements don't break blocks)
// -------------------------------------------------------------------------
//
VisiblePosition StartOfBlock(
const VisiblePosition&,
EditingBoundaryCrossingRule = kCannotCrossEditingBoundary);
VisiblePosition EndOfBlock(
const VisiblePosition&,
EditingBoundaryCrossingRule = kCannotCrossEditingBoundary);
bool IsStartOfBlock(const VisiblePosition&);
bool IsEndOfBlock(const VisiblePosition&);
} // namespace blink
#endif
......@@ -33,6 +33,7 @@
#include "core/editing/Position.h"
#include "core/editing/VisiblePosition.h"
#include "core/editing/VisibleUnits.h"
#include "core/editing/commands/EditingCommandsUtilities.h"
#include "core/html/HTMLBRElement.h"
#include "core/html/HTMLElement.h"
#include "core/html_names.h"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment