В чем разница между 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-длина ведет себя как точки, которые очевидны из-за того, как они определены. Это моя интерпретация документов