예제 #1
0
        private HCDomain GetActiveDomain()
        {
            HCDomain Result = null;

            if (FActiveDomain.BeginNo >= 0)
            {
                Result = FActiveDomain;
            }

            return(Result);
        }
예제 #2
0
        private void GetDomainFrom(int AItemNo, int AOffset, HCDomain ADomain)
        {
            ADomain.Clear();
            if ((AItemNo < 0) || (AOffset < 0))
            {
                return;
            }

            /* 找起始标识 }*/
            int vCount = 0;
            // 确定往前找的起始位置
            int vStartNo = AItemNo;
            int vEndNo   = AItemNo;

            if (Items[AItemNo] is HCDomainItem)
            {
                if ((Items[AItemNo] as HCDomainItem).MarkType == MarkType.cmtBeg)
                {
                    if (AOffset == HC.OffsetAfter)
                    {
                        ADomain.BeginNo = AItemNo;  // 当前即为起始标识
                        vEndNo          = AItemNo + 1;
                    }
                    else  // 光标在前面
                    {
                        if (AItemNo > 0)
                        {
                            vStartNo = AItemNo - 1; // 从前一个往前
                        }
                        else  // 是在第一个前面
                        {
                            return;  // 不用找了
                        }
                    }
                }
                else  // 查找位置是结束标记
                {
                    if (AOffset == HC.OffsetAfter)
                    {
                        if (AItemNo < Items.Count - 1)
                        {
                            vEndNo = AItemNo + 1;
                        }
                        else  // 是最后一个后面
                        {
                            return;  // 不用找了
                        }
                    }
                    else  // 光标在前面
                    {
                        ADomain.EndNo = AItemNo;
                        vStartNo      = AItemNo - 1;
                    }
                }
            }

            if (ADomain.BeginNo < 0)
            {
                for (int i = vStartNo; i >= 0; i--)  // 找
                {
                    if (Items[i] is HCDomainItem)
                    {
                        if ((Items[i] as HCDomainItem).MarkType == MarkType.cmtBeg)
                        {
                            if (vCount != 0)
                            {
                                vCount--;
                            }
                            else
                            {
                                ADomain.BeginNo = i;
                                break;
                            }
                        }
                        else  // 结束标记
                        {
                            vCount++;  // 有嵌套
                        }
                    }
                }
            }

            /* 找结束标识 }*/
            if ((ADomain.BeginNo >= 0) && (ADomain.EndNo < 0))
            {
                vCount = 0;
                for (int i = vEndNo; i <= Items.Count - 1; i++)
                {
                    if (Items[i] is HCDomainItem)
                    {
                        if ((Items[i] as HCDomainItem).MarkType == MarkType.cmtEnd)
                        {
                            if (vCount != 0)
                            {
                                vCount--;
                            }
                            else
                            {
                                ADomain.EndNo = i;
                                break;
                            }
                        }
                        else  // 是起始标记
                        {
                            vCount++;  // 有嵌套
                        }
                    }
                }

                if (ADomain.EndNo < 0)
                {
                    throw new Exception("异常:获取数据组结束出错!");
                }
            }
        }
예제 #3
0
 public HCRichData(HCStyle AStyle) : base(AStyle)
 {
     FDomainStartDeletes = new List <int>();
     FHotDomain          = new HCDomain();
     FActiveDomain       = new HCDomain();
 }