docs: protected void parseSequencesWithColons(TokenList tokens , Sequence sequence ) {
  
          TokenList.Token t = tokens.getFirst();
          if( t == null )
              return;
  
          int state = 0;
  
          TokenList.Token start = null;
          TokenList.Token middle = null;
          TokenList.Token prev = t;
  
          boolean last = false;
          while( true ) {
              if( state == 0 ) {
                  if( isVariableInteger(t) && (t.next != null && t.next.getSymbol() == Symbol.COLON) ) {
                      start = t;
                      state = 1;
                      t = t.next;
                  } else if( t != null && t.getSymbol() == Symbol.COLON ) {
                      // If it starts with a colon then it must be 'all'  or a type-o
                      IntegerSequence range = new IntegerSequence.Range(null,null);
                      VariableIntegerSequence varSequence = functions.getManagerTemp().createIntegerSequence(range);
                      TokenList.Token n = new TokenList.Token(varSequence);
                      tokens.insert(t.previous, n);
                      tokens.remove(t);
                      t = n;
                  }
              } else if( state == 1 ) {
                  // var : ?
                  if (isVariableInteger(t)) {
                      state = 2;
                  } else {
                      // array range
                      IntegerSequence range = new IntegerSequence.Range(start,null);
                      VariableIntegerSequence varSequence = functions.getManagerTemp().createIntegerSequence(range);
                      replaceSequence(tokens, varSequence, start, prev);
                      state = 0;
                  }
              } else if ( state == 2 ) {
                  // var:var ?
                  if( t != null && t.getSymbol() == Symbol.COLON ) {
                      middle = prev;
                      state = 3;
                  } else {
                      // create for sequence with start and stop elements only
                      IntegerSequence numbers = new IntegerSequence.For(start,null,prev);
                      VariableIntegerSequence varSequence = functions.getManagerTemp().createIntegerSequence(numbers);
                      replaceSequence(tokens, varSequence, start, prev );
                      if( t != null )
                          t = t.previous;
                      state = 0;
                  }
              } else if ( state == 3 ) {
                  // var:var: ?
                  if( isVariableInteger(t) ) {
                      // create 'for' sequence with three variables
                      IntegerSequence numbers = new IntegerSequence.For(start,middle,t);
                      VariableIntegerSequence varSequence = functions.getManagerTemp().createIntegerSequence(numbers);
                      t = replaceSequence(tokens, varSequence, start, t);
                  } else {
                      // array range with 2 elements
                      IntegerSequence numbers = new IntegerSequence.Range(start,middle);
                      VariableIntegerSequence varSequence = functions.getManagerTemp().createIntegerSequence(numbers);
                      replaceSequence(tokens, varSequence, start, prev);
                  }
                  state = 0;
              }
  
              if( last ) {
                  break;
              } else if( t.next == null ) {
                  // handle the case where it is the last token in the sequence
                  last = true;
              }
              prev = t;
              t = t.next;
          }
      }