Exemplo n.º 1
0
static bool isSelectionInDocument(const VisibleSelectionTemplate<Strategy>& visibleSelection, const Document& document)
{
    const PositionTemplate<Strategy> start = visibleSelection.start();
    if (start.isNotNull() && (!start.inDocument() || start.document() != document))
        return false;
    const PositionTemplate<Strategy> end = visibleSelection.end();
    if (end.isNotNull() && (!end.inDocument() || end.document() != document))
        return false;
    const PositionTemplate<Strategy> extent = visibleSelection.extent();
    if (extent.isNotNull() && (!extent.inDocument() || extent.document() != document))
        return false;
    return true;
}
Exemplo n.º 2
0
String CreateMarkupAlgorithm<Strategy>::createMarkup(
    const PositionTemplate<Strategy>& startPosition,
    const PositionTemplate<Strategy>& endPosition,
    EAnnotateForInterchange shouldAnnotate,
    ConvertBlocksToInlines convertBlocksToInlines,
    EAbsoluteURLs shouldResolveURLs,
    Node* constrainingAncestor) {
  if (startPosition.isNull() || endPosition.isNull())
    return emptyString();

  RELEASE_ASSERT(startPosition.compareTo(endPosition) <= 0);

  bool collapsed = startPosition == endPosition;
  if (collapsed)
    return emptyString();
  Node* commonAncestor =
      Strategy::commonAncestor(*startPosition.computeContainerNode(),
                               *endPosition.computeContainerNode());
  if (!commonAncestor)
    return emptyString();

  Document* document = startPosition.document();

  DCHECK(!document->needsLayoutTreeUpdate());
  DocumentLifecycle::DisallowTransitionScope disallowTransition(
      document->lifecycle());

  HTMLElement* specialCommonAncestor = highestAncestorToWrapMarkup<Strategy>(
      startPosition, endPosition, shouldAnnotate, constrainingAncestor);
  StyledMarkupSerializer<Strategy> serializer(
      shouldResolveURLs, shouldAnnotate, startPosition, endPosition,
      specialCommonAncestor, convertBlocksToInlines);
  return serializer.createMarkup();
}