whole_func_string: function Block(line, def, parent) {
      this.startNames = [];
      this.thenNames = [];
      this.endNames = [];
      for (var i = 0; i < def.start.length; i++) this.startNames.push(def.start[i].toLowerCase());
      for (var x = 0; x < def.end.length; x++) this.endNames.push(def.end[x].toLowerCase());
      for (var y = 0; y < def.then.length; y++) this.thenNames.push(def.then[y].toLowerCase());
  
      this.line = line;
      this.parent = parent;
      this.searchIndex = line;
      this.start = -1;
      this.intermediateIndexes = {};
      this.intermediateCursors = {};
      this.end = -1;
  }
func_code_string: function Block(line, def, parent) {
      this.startNames = [];
      this.thenNames = [];
      this.endNames = [];
      for (var i = 0; i < def.start.length; i++) this.startNames.push(def.start[i].toLowerCase());
      for (var x = 0; x < def.end.length; x++) this.endNames.push(def.end[x].toLowerCase());
      for (var y = 0; y < def.then.length; y++) this.thenNames.push(def.then[y].toLowerCase());
  
      this.line = line;
      this.parent = parent;
      this.searchIndex = line;
      this.start = -1;
      this.intermediateIndexes = {};
      this.intermediateCursors = {};
      this.end = -1;
  }
func_documentation_string: A block parser
  
  @param {Number} line The current line number
  @param {{start: Array, end: Array, then: Array}} def Properties for block definition
  @param {BlockManager} parent