В чем разница между SPAN_POINT_MARK и SPAN_MARK_POINT?

Я читал в документах для Spanned/Spannable для проекта, который я работа над. Я был озадачен определением и использованием пролетов, которые содержат MARK и POINT.

A MARK, как представляется, определяется в Doc как "прикрепленный" к местоположению символа, тогда как POINT определяется как "приклеенный" к символу. Таким образом, MARK не будет перемещаться при изменении текста, а POINT будет перемещаться с символом, который он "приклеил", когда текст будет изменен.

Эти определения, похоже, показывают, что MARK является синонимом INCLUSIVE и что POINT является синонимом EXCLUSIVE.

Однако это не так, поскольку ни SPAN_MARK_MARK, ни SPAN_POINT_POINT не являются синонимами либо SPAN_INCLUSIVE_INCLUSIVE, либо SPAN_EXCLUSIVE_EXCLUSIVE. Фактически, SPAN_INCLUSIVE_INCLUSIVE совпадает с SPAN_MARK_POINT, а SPAN_POINT_MARK совпадает с SPAN_EXCLUSIVE_EXCLUSIVE.

Мои вопросы следующие

  • Почему SPAN_POINT_MARK синоним SPAN_EXCLUSIVE_EXCLUSIVE? и почему SPAN_MARK_POINT синонимом SPAN_INCLUSIVE_INCLUSIVE?

  • Почему не SPAN_MARK_MARK и SPAN_POINT_POINT синонимичны SPAN_INCLUSIVE_INCLUSIVE и SPAN_EXCLUSIVE_EXCLUSIVE соответственно?

  • Каковы истинные определения MARK и POINT в этом использовании?

Ответ 1

Как мне нравится объяснять, что MARK vs POINT представляет их как квадратные скобки при любом смещении, которое они существуют в диапазоне текста. Направление, на которое указывает скобка, показывает символ, на который "привязан" знак или точка.

Итак, для POINT вы должны использовать открытую скобку - она ​​привязана к следующему символу. И для MARK вы должны использовать закрытую скобку - она ​​привязана к предшественнику.

Посмотрим на некоторые примеры каждого типа:

SPAN_MARK_MARK

Вставка со смещением диапазона длины 0: метки остаются фиксированными.

Before: Lorem ]]ipsum dolor sit.
After:  Lorem ]]INSERTipsum dolor sit.

Вставка в начале диапазона без длины: вставленный текст включен в диапазон диапазона.

Before: Lorem ]ipsum] dolor sit.
After:  Lorem ]INSERTipsum] dolor sit.

Вставка в конце диапазона без длины: вставленный текст исключается из диапазона диапазона.

Before: Lorem ]ipsum] dolor sit.
After:  Lorem ]ipsum]INSERT dolor sit.

Вы можете увидеть из двух последних примеров, почему флаг SPAN_MARK_MARK является синонимом флага SPAN_INCLUSIVE_EXCLUSIVE. Текст, вставленный в начале диапазона, включается в диапазон, в то время как текст, вставленный в конец, исключается.

SPAN_POINT_POINT

Вставка со смещением диапазона длины 0: точки выдвинуты вперед.

Before: Lorem [[ipsum dolor sit.
After:  Lorem INSERT[[ipsum dolor sit.

Вставка в начале диапазона без длины: вставленный текст исключается из диапазона диапазона.

Before: Lorem [ipsum[ dolor sit.
After:  Lorem INSERT[ipsum[ dolor sit.

Вставка в конце диапазона без длины: вставленный текст включен в диапазон диапазона.

Before: Lorem [ipsum[ dolor sit.
After:  Lorem [ipsumINSERT[ dolor sit.

Снова вы можете увидеть из двух последних примеров, почему флаг SPAN_POINT_POINT является синонимом флага SPAN_EXCLUSIVE_INCLUSIVE. Текст, вставленный в начале диапазона, исключается из диапазона, в то время как текст, вставленный в конец, включен.

SPAN_MARK_POINT

Вставка в начале диапазона: вставленный текст включен в диапазон.

Before: Lorem ]ipsum[ dolor sit.
After:  Lorem ]INSERTipsum[ dolor sit.

Вставка в конце диапазона: вставленный текст по-прежнему включен в диапазон.

Before: Lorem ]ipsum[ dolor sit.
After:  Lorem ]ipsumINSERT[ dolor sit.

И, следовательно, он имеет синоним SPAN_INCLUSIVE_INCLUSIVE - вставленный текст всегда включается в диапазон диапазона.

SPAN_POINT_MARK

Вставка в начале диапазона: вставленный текст исключается из диапазона.

Before: Lorem [ipsum] dolor sit.
After:  Lorem INSERT[ipsum] dolor sit.

Вставка в конце диапазона: вставленный текст по-прежнему исключается из диапазона.

Before: Lorem [ipsum] dolor sit.
After:  Lorem [ipsum]INSERT dolor sit.

И, следовательно, он имеет синоним SPAN_EXCLUSIVE_EXCLUSIVE - вставленный текст всегда исключается из диапазона диапазона.

Я думаю, что документация путает вещи, разделяя определения некоторых синонимов. Например, при описании SPAN_MARK_MARK они определяют только его использование в терминах длины длины 0. Тогда при определении SPAN_INCLUSIVE_EXCLUSIVE (который является синонимом) они определяют только его использование в терминах не-0-длины. Я думаю, было бы намного яснее, если бы они заявили, что они были синонимами, и имели одно определение, разделяемое обоими терминами.

Ответ 2

Они представляют собой концептуальные концепции и думают о них в том порядке, в каком они появляются

Из документов:

MARK и POINT концептуально расположены между двумя соседними персонажи. MARK "привязан" к персонажу раньше, в то время как POINT будет придерживаться символа после. Курсор вставки концептуально расположенный между MARK и POINT. В результате, вставка нового символа между MARK и POINT оставит MARK без изменений, в то время как POINT будет сдвинут, теперь расположен после вставленный символ и по-прежнему приклеивается к тому же символу после него. В зависимости от того, происходит ли вставка в начале или в конце от диапазона, следовательно, диапазон будет расширен, чтобы включить новый character (когда span использует MARK в начале или POINT в конце), или он будет исключен. Обратите внимание, что до и после здесь ссылайтесь на смещения в String, которые не зависят от визуального представление текста

Ваша точка

Эти определения, похоже, показывают, что MARK является синонимом INCLUSIVE и что POINT является синонимом EXCLUSIVE.

на самом деле не так. В основном думаем отметить как стартовый маркер для диапазона и point в качестве конечной точки. Что происходит между этими двумя точками (стилизация, добавление текста в стилизованный текст и т.д.) Теперь классифицируется как инклюзивный и эксклюзивный и, следовательно, напрямую коррелирует с ними.

Давайте рассмотрим пример: Допустим, у нас есть следующий текст в стиле

Это пример текст

Если мы использовали SPAN_EXCLUSIVE_EXCLUSIVE для жирного шрифта, и мы вставляем текст в середине пролета, он все же полужирный:

Это невероятно хороший пример text

Но если мы вставляем текст в начале или в конце жирного шрифта, текст вставлен не является жирным шрифтом:

Это не пример текст

Если мы используем SPAN_INCLUSIVE_EXCLUSIVE, то вставка текста в начале будет включена как часть диапазона, и мы будем иметь:

Это довольно простой текст, это не он

Теперь все это только моя интерпретация документов. Почему SPAN_POINT_MARK является синонимом SPAN_EXCLUSIVE_EXCLUSIVE - это то, что кто-то из Google должен будет комментировать, я полагаю, но, на мой взгляд, движение MARK_POINT представляет собой включение, а POINT_MARK представляет собой исключение. SPAN_POINT_POINT и SPAN_MARK_MARK представляют 0 строк длины и, следовательно, не могут быть отнесены к включению/исключению.

: EDIT: SPAN_MARK_MARK и SPAN_POINT_POINT - это 0 строк длины, то есть строка начинается с метки в позиции 0, а затем любые последующие добавления добавляются к строке, но позиция метки не изменяется, или строка начинается с позиции точки, и любые последующие добавления к строке перемещают указывают на конец. Эти флаги, по существу, сигнализируют отправную точку для растягиваемой строки и, следовательно, представляют 0 строк длины. Тогда включительные, эксклюзивные флаги могут использоваться в зависимости от того, была ли строка указана mark_mark или point_point для начала. Также SPAN_EXCLUSIVE_INCLUSIVE, когда 0-длина, ведут себя как метки и SPAN_INCLUSIVE_EXCLUSIVE, когда 0-длина ведет себя как точки, которые очевидны из-за того, как они определены. Это моя интерпретация документов