TEXT_MARK/MULTILINE_TEXT_MARK

Un TEXT_MARK representa una posición dentro de una línea de texto. Es conceptualmente similar a un iterador, aunque su uso es muy distinto.

Las posiciones guardadas en un TEXT_MARK son puntos inter-caracter. La posición 1 se refiere al punto a la izquierda del primer caracter. La posición 2 al punto entre el primer caracter y al segundo. En una línea de longitud n, la posición n+1 es el punto a la derecha del último caracter.

  1   2   3   4   5    Índices en la cadena (line.text)
+---+---+---+---+---+
| H | e | l | l | o |  Caracteres
+---+---+---+---+---+
1   2   3   4   5   6  Posición (position)

Los TEXT_MARK trabajan en cooperación con TEXT_LINE. La propiedad importante es que se mantienen anclados a un punto lógico del texto en vez de a un índice físico.

Por ejemplo, supongamos que en el esquema anterior hay una marca m en la posición 5 (entre la "l" y la "o"). Si a la línea anterior se le realizan dos operaciones de borrado al principio (borrando la "H" y la "e", la marca se mueve a la posición 3, permaneciendo entre la "l" y la "o":

Antes:
+---+---+---+---+---+
| H | e | l | l | o | 
+---+---+---+---+---+
                ^      posición de m
Después
+---+---+---+
| l | l | o | 
+---+---+---+
        ^      posición de m

Si despues se insertan dos caracteres al principio y uno al final, m vuelve a la posición 5, permaneciendo entre la "l" y la "o".

+---+---+---+---+---+---+
| Y | e | l | l | o | w |
+---+---+---+---+---+---+
                ^      posición de m

Puede saberse la línea asociada y la posición de un TEXT_MARK por sus atributos `line' y `position'. Pueden modificarse estas a través de `set_line' y `set_position'.

Marcas multilínea

Las marcas multilíneas son casi idénticas a las TEXT_MARK, con la diferencia que el atributo line es de tipo MULTI_TEXT_LINE

Comparación

El operador < permite comparar dos marcas. El resultado no tiene sentido si se comparas dos marcas que no están en la misma línea, o dos marcas multilínea que no están en el mismo texto.