whole_func_string: function(type, walk) {
      if (!this.atGroupMarker(type, walk))
        return false;
      // Find the end of the block, checking for adjacent blocks
      var startIdx = walk.position;
      var found = false;
      while (walk.hasCurrent() && !found) {
        walk.scrollToTerm().skipWhitespaces();
        if (!this.atGroupMarker(type, walk))
          found = true;
      }
      var g = this.stripSelector(new SubWalker(walk, startIdx, walk.position));
      this.emitGroup(type, g);
      return true;
    }
func_code_string: function(type, walk) {
      if (!this.atGroupMarker(type, walk))
        return false;
      // Find the end of the block, checking for adjacent blocks
      var startIdx = walk.position;
      var found = false;
      while (walk.hasCurrent() && !found) {
        walk.scrollToTerm().skipWhitespaces();
        if (!this.atGroupMarker(type, walk))
          found = true;
      }
      var g = this.stripSelector(new SubWalker(walk, startIdx, walk.position));
      this.emitGroup(type, g);
      return true;
    }
func_documentation_string: Group controls are `checkboxGroup` and `radioGroup` which share
  the same semantics almost entirely.
  
  Checkboxes are multiple choice controls. Each control begins with
  either `[ ] ` for incorrect choice or `[x] ` for correct choice.
  
  Radios are single choice controls. Each control begins with
  either `( ) ` for incorrect choice or `(x) ` for correct choice.
  Radios should have exactly one correct choice (otherwise the behavior
  is undetermined).
  
  Correct choices can be marked with either `x` or `+` sign.
  
  Examples:
  
  ```
  [ ] one
  [x] two
  [x] three
  [ ] four
  
  ( ) one
  (+) two
  ( ) three
  ( ) four
  ```