{
this.key = key;
this.val = val;
- flags |= Flag.RearSticky;
}
public MTextProperty (MSymbol key, object val,
{
check_pos (pos, true);
+ if (from == to)
+ return;
int pos_idx = pos_to_idx (this, pos);
int from_idx = pos_to_idx (mt2, from);
int to_idx = pos_to_idx (mt2, to);
private MInterval LeftMost
{
- get { return (Left == null ? this : Left.LeftMost); }
+ get {
+ if (Left == null)
+ return this;
+ Left.update_from_to ();
+ return Left.LeftMost;
+ }
}
private MInterval RightMost
{
- get { return (Right == null ? this : Right.RightMost); }
+ get {
+ if (Right == null)
+ return this;
+ Right.update_from_to ();
+ return Right.RightMost;
+ }
}
private MInterval Prev {
MInterval i;
if (Left != null)
- for (i = Left; i.Right != null; i = i.Right);
+ for (i = Left; i.Right != null; i = i.Right)
+ i.update_from_to ();
else
{
MInterval child = this;
for (i = Parent; i != null && i.Left == child;
- child = i, i = i.Parent);
+ child = i, i = i.Parent)
+ i.update_from_to ();
}
return i;
}
MInterval i;
if (Right != null)
- for (i = Right; i.Left != null; i = i.Left);
+ for (i = Right; i.Left != null; i = i.Left)
+ i.update_from_to ();
else
{
MInterval child = this;
for (i = Parent; i != null && i.Right == child;
- child = i, i = i.Parent);
+ child = i, i = i.Parent)
+ i.update_from_to ();
}
return i;
}
{
update_from_to ();
M17N.DebugPrint ("insert({0}) at {1} in ", interval.Length, pos);
- DumpOne (false, true);
+ DumpOne (false, false);
interval.set_mtext (mtext);
}
else // (pos > To)
Next.Insert (pos, interval);
+ M17N.DebugPrint (" done\n");
}
private void vacate_node (MInterval interval)