Exemplo n.º 1
0
        //============================================================

        private static int SeekWithoutClamping(this StringView str, int start, SeekMode mode, Ward1D ward)
        {
            if (mode == SeekMode.MoveOneChar)
            {
                return(start + ward.GetOffset());
            }
            else if (mode == SeekMode.UntilNewline)
            {
                if (ward == Ward1D.Backward)
                {
                    return(str.FindLast('\n', start + 1));
                }
                else if (ward == Ward1D.Forward)
                {
                    return(str.FindFirst('\n', start));
                }
            }
            else
            {
                Debug.Assert((mode
                              & (SeekMode.LiterallySpaced | SeekMode.PassingQuotation | SeekMode.BracketBalanced)) != 0);
                if (ward == Ward1D.Backward)
                {
                    return(str.SeekToSpaceBalanced(start, mode, -1, -1) - 1);
                }
                else if (ward == Ward1D.Forward)
                {
                    return(str.SeekToSpaceBalanced(start + 1, mode, 1, 0));
                }
            }
            throw new Exception();
        }
Exemplo n.º 2
0
 //============================================================
 public static int GetOffset(this Ward1D ward)
 {
     return(ward == Ward1D.Forward ? 1 : -1);
 }
Exemplo n.º 3
0
        //============================================================
        //------------------------------------------------------------
        //private static void TopDownTerms(AirTree<StringView>.Node node, StringView str) {
        //  foreach ((BalancedTermType termType, StringView termStr) in str.EachTerm()) {
        //    AirTree<StringView>.Node child = node.AddChild(termStr);
        //    if (termType == BalancedTermType.Bracketed) {
        //      TopDownTerms(child, termStr.GetSubView(+1, termStr.Length - 1));
        //    }
        //  }
        //}
        //public static AirTree<StringView> TopDownTerms(this StringView str) {
        //  var tree = new AirTree<StringView>(str);
        //  TopDownTerms(tree.root, str);
        //  return tree;
        //}
        //public static string TopDownTerms(this string str) {
        //  return str.GetFullView().TopDownTerms().ToString();
        //}
        //------------------------------------------------------------
        //private static void HeadTail(AirTree<StringView>.Node node, StringView str) {
        //  int count = 0;
        //  foreach ((BalancedTermType termType, StringView termStr) in str.EachTerm()) {
        //    if (count++ == 0) {
        //      node.Value = termStr;
        //    } else {
        //      AirTree<StringView>.Node child = node.AddChild(termStr);
        //      if (termType == BalancedTermType.Bracketed) {
        //        HeadTail(child, termStr.GetSubView(+1, termStr.Length - 1));
        //      }
        //    }
        //  }
        //}
        //public static AirTree<StringView> HeadTail(this StringView str) {
        //  var tree = new AirTree<StringView>(str);
        //  HeadTail(tree.root, str);
        //  return tree;
        //}
        //public static string HeadTail(this string str) {
        //  return str.GetFullView().HeadTail().ToString();
        //}
        //============================================================

        public static int Seek(this StringView str, int start, SeekMode mode, Ward1D ward)
        {
            str.ValidateIndex(start);
            return(Mathf.Clamp(str.SeekWithoutClamping(start, mode, ward), 0, str.Length));
        }