public HCAnnotateData(HCStyle aStyle) : base(aStyle) { FNextID = 0; FIDStrack = new Stack <uint>(); FAnnotateCount = 0; FHotAnnotate = new HCAnnotateInfo(); FHotAnnotate.Data = this; FActiveAnnotate = new HCAnnotateInfo(); FActiveAnnotate.Data = this; }
public void GetAnnotateFrom(int itemNo, int offset, HCAnnotateInfo annotateInfo) { annotateInfo.Clear(); if (itemNo < 0 || offset < 0) { return; } HCAnnotateItem vAnnotateItem = null; uint vID = 0; if (Items[itemNo].StyleNo == HCStyle.Annotate) // 起始位置就是批注 { vAnnotateItem = Items[itemNo] as HCAnnotateItem; if (vAnnotateItem.MarkType == MarkType.cmtBeg) // 起始位置是起始标记 { if (offset == HC.OffsetAfter) // 光标在起始标记后面 { annotateInfo.Data = this; annotateInfo.BeginNo = itemNo; // 当前即为起始标识 vID = vAnnotateItem.ID; annotateInfo.EndNo = GetAnnotateEndAfter(itemNo + 1, vID); // 这里+1是批注不会出现不配对的前提下 return; } } else // 起始位置是结束标记 { if (offset == HC.OffsetBefor) // 光标在结束标记前面 { annotateInfo.Data = this; annotateInfo.EndNo = itemNo; vID = vAnnotateItem.ID; annotateInfo.BeginNo = GetAnnotateBeginBefor(itemNo - 1, vID); // 这里-1是批注不会出现不配对的前提下 return; } } } FIDStrack.Clear(); for (int i = itemNo; i >= 0; i--) { if (Items[i].StyleNo == HCStyle.Annotate) { vAnnotateItem = Items[i] as HCAnnotateItem; if (vAnnotateItem.MarkType == MarkType.cmtEnd) // 是结束 { FIDStrack.Push(vAnnotateItem.ID); } else // 是起始 { if (FIDStrack.Count > 0) // 有栈 { vID = FIDStrack.Peek(); if (vAnnotateItem.ID == vID) // 消除配对 { FIDStrack.Pop(); } else { annotateInfo.Data = this; annotateInfo.BeginNo = i; vID = vAnnotateItem.ID; break; } } else // 没有栈 { annotateInfo.Data = this; annotateInfo.BeginNo = i; vID = vAnnotateItem.ID; break; } } } } if (annotateInfo.BeginNo >= 0) { annotateInfo.EndNo = GetAnnotateEndAfter(itemNo + 1, vID); } }