Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
        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);
            }
        }