IUP Text Format Tag Status After Interacting

发布时间 2023-06-30 00:52:12作者: 萝卜L

IUP Text Format Tag Status After Interacting

结论

增加

  • 若前一个操作为移动光标,
    • 若左侧非空,使用左侧的状态;
    • 若左侧为空,使用右侧的状态;
  • 若前一个操作为删除,参见[[#删除]];
  • 若前一个操作为增加,保持状态;
  • 另见[[#覆盖替换]]。

删除

  • 不论单光标或选中了字符串,向左删除(Backspace),会保持被删除对象左端的状态(不论左侧是否为空);
  • 选中了字符串,向右删除(Delete),会保持被删除对象左端的状态;
  • 单光标,向右删除(Delete),
    • 若左侧非空,会使用左侧的状态;
    • 若左侧为空,会使用右侧的状态;
      即:
序号 单光标或选中了字符串 向左(Backspace)
或向右(Delete)删除
删除后的状态
1 单光标 向左删除 保持被删除对象的左端的状态
2 选中了字符串 向左删除 同序号1
3 单光标 向右删除 若左侧非空,使用左侧的状态
若左侧为空,使用右侧的状态
4 选中了字符串 向右删除 同序号1

覆盖替换

  • 选中了字符串,覆盖替换,如同先向左[[#删除]],按删除后的状态,再[[#增加]];

[!tip] 若选中了字符串
状态与光标、锚点的前、后无关。

[!related] 参考
[[#小结]]

过程

(可只看[[#结论]],跳过至结束)

测试

  • 在区域内增加或删除,且不跨区域边界,则不改变所在区域及其后区域的状态。

    1(234)56(789)0
    1(23x4)5y6(7z9)0

  • 在区域边界处,(向后)增加,若左侧非空,则使用左侧区域的状态

    1(234)56(789)0
    1(234x)56x(789x)0

  • 在区域边界处,(向后)增加,若左侧为空,则使用右侧区域的状态

    (234)56(789)0
    (x234)56(789)0

  • 在区域边界处,先向后删除(Delete),再(向后)增加,若左侧非空,则使用左侧区域的状态

  • 在区域边界处,先向后删除(Delete),再(向后)增加,若左侧为空,则使用右侧区域的状态

  • 从区域中或区域尾,向前删除(Backspace),到区域边界处(不进入前一个区域)(不跨区域边界),且不改变光标,状态不变

    1(234)56(789)0
    1(234)56(789)
    1(234)56(789)a

    1(234)56(789)0
    1(234)56(78)0
    1(234)56(7)0
    1(234)56()0
    1(234)56(b)0

    1(234)56(789)0
    1(234)5(789)0
    1(234)(789)0
    1(234)c(789)0

    1(234)56(789)0
    (234)56(789)0
    d(234)56(789)0

小结

  • 增加,
    • 若前一个状态存在,则保持;

    • 若前一个状态不存在,则按如下初始状态,

      • 位于区域内时,为区域的状态;
      • 位于边界处时,
        • 若左侧非空,为左侧的状态;
        • 若左侧为空(字符串首端),为右侧的状态;

      (不论位于区域或边界)

      • 若左侧非空,为左侧的状态;
      • 若左侧为空(字符串首端),为右侧的状态;
  • 向左删除(Backspace),不论是单光标或选中了字符串,会保持被删除对象(光标左侧的字符,或选中的字符串)的状态;
  • 向右删除(Delete),
    • 单光标时,删除后,
      • 若左侧非空,会使用左侧的状态;
      • 若左侧为空(字符串首端),会使用右侧的状态;
    • 选中了字符串时,会使用原字符串首端的状态(与光标、锚点的前、后无关)