コード例 #1
0
 public static bool GetByteSpaceCount(ITextZone zone, int start, ref int count)
 {
     for (int i = start; i >= 0; i--)
     {
         if (zone.Items[i] is ITextTrim)
         {
             ITextTrim trim    = (ITextTrim)(zone.Items[i]);
             int       enterid = trim.ToString().LastIndexOf('\n');
             if (enterid >= 0)
             {
                 string text = trim.ToString().Substring(enterid + 1);
                 foreach (char ch in text)
                 {
                     count += TextChar.GetByteSpaceCount(ch);
                 }
                 return(true);
             }
         }
         if (zone.Items[i] is ITextZone)
         {
             ITextZone _zone = (ITextZone)(zone.Items[i]);
             if (GetByteSpaceCount(_zone, 0, ref count))
             {
                 return(true);
             }
             continue;
         }
         foreach (char ch in zone.Items[i].ToString())
         {
             count += TextChar.GetByteSpaceCount(ch);
         }
     }
     return(false);
 }
コード例 #2
0
 public static bool GetPrevLength(ITextZone zone, int start, ref int count)
 {
     for (int i = start; i >= 0; i--)
     {
         if (zone.Items[i] is ITextTrim)
         {
             ITextTrim trim    = (ITextTrim)(zone.Items[i]);
             int       enterid = trim.ToString().LastIndexOf('\n');
             if (enterid >= 0)
             {
                 count += trim.ToString().Length - enterid - 1; return(true);
             }
         }
         if (zone.Items[i] is ITextZone)
         {
             ITextZone _zone = (ITextZone)(zone.Items[i]);
             if (GetPrevLength(_zone, _zone.Items.Count - 1, ref count))
             {
                 return(true);
             }
             continue;
         }
         count += zone.Items[i].ToString().Length;
     }
     return(false);
 }
コード例 #3
0
 public static bool GetNextLength(ITextZone zone, int start, ref int count)
 {
     for (int i = start; i < zone.Items.Count; i++)
     {
         if (zone.Items[i] is ITextTrim)
         {
             ITextTrim trim    = (ITextTrim)(zone.Items[i]);
             int       enterid = trim.ToString().IndexOf('\n');
             if (enterid >= 0)
             {
                 count += enterid; return(true);
             }
         }
         if (zone.Items[i] is ITextZone)
         {
             ITextZone _zone = (ITextZone)(zone.Items[i]);
             if (GetNextLength(_zone, 0, ref count))
             {
                 return(true);
             }
             continue;
         }
         count += zone.Items[i].ToString().Length;
     }
     return(false);
 }
コード例 #4
0
        public static ITextPosition MovePrevLine(ITextZone zone, int start, ref int lineoffset, ref int line, ref int column)
        {
            for (int i = start; i >= 0; i--)
            {
                if (zone.Items[i] is ITextTrim)
                {
                    ITextTrim trim      = (ITextTrim)(zone.Items[i]);
                    int       previndex = RefPrevLine(trim.ToString(), ref lineoffset, ref line, ref column);
                    if (previndex >= 0)
                    {
                        return new TextPosition()
                               {
                                   Item = trim, ItemIndex = previndex, Line = line, Column = column
                               }
                    }
                    ;
                }
                if (zone.Items[i] is ITextZone)
                {
                    ITextZone _zone = (ITextZone)(zone.Items[i]);
                    if (_zone.LineCount <= lineoffset)
                    {
                        lineoffset -= _zone.LineCount - 1;

                        line -= _zone.LineCount - 1; column = -100000;
                    }
                    else
                    {
                        return(MovePrevLine(_zone, _zone.Items.Count - 1, ref lineoffset, ref line, ref column));
                    }
                }
            }
            return(null);
        }
コード例 #5
0
        public static ITextPosition MoveNextLine(ITextZone zone, int start, ref int lineoffset, ref int line, ref int column)
        {
            for (int i = start; i < zone.Items.Count; i++)
            {
                if (zone.Items[i] is ITextTrim)
                {
                    ITextTrim trim      = (ITextTrim)(zone.Items[i]);
                    int       nextindex = RefNextLine(trim.ToString(), ref lineoffset, ref line, ref column);
                    if (nextindex >= 0)
                    {
                        return new TextPosition()
                               {
                                   Item = trim, ItemIndex = nextindex + 1, Line = line, Column = column
                               }
                    }
                    ;
                }
                if (zone.Items[i] is ITextZone)
                {
                    ITextZone _zone = (ITextZone)(zone.Items[i]);
                    if (_zone.LineCount <= lineoffset)
                    {
                        lineoffset -= _zone.LineCount - 1;

                        line += _zone.LineCount - 1; column = -100000;
                    }
                    else
                    {
                        return(MoveNextLine(_zone, 0, ref lineoffset, ref line, ref column));
                    }
                }
            }
            return(null);
        }
コード例 #6
0
 public static ITextPosition GetPrevLine(ITextZone zone, int start, int line)
 {
     for (int i = start; i >= 0; i--)
     {
         if (zone.Items[i] is ITextTrim)
         {
             ITextTrim trim    = (ITextTrim)(zone.Items[i]);
             int       enterid = trim.ToString().LastIndexOf('\n');
             if (enterid >= 0)
             {
                 return new TextPosition()
                        {
                            Item = trim, ItemIndex = enterid, Line = line, Column = -1
                        }
             }
             ;
         }
         if (zone.Items[i] is ITextZone)
         {
             ITextZone     _zone  = (ITextZone)(zone.Items[i]);
             ITextPosition result = GetPrevLine(_zone, _zone.Items.Count - 1, line);
             if (result != null)
             {
                 return(result);
             }
         }
     }
     return(null);
 }