whole_func_string: function Range(str) {
  
    var range = str;
  
    // If range starts with A, its approximate
    if(range.charAt(0) == 'A') {
      this._approximate = true;
      range = str.substr(1);
    }
  
    var parts = range.split('/');
  
    if(parts.length != 2 || (!parts[0] && !parts[1])) {
      throw new Error('Invalid Date Range');
    }
  
    if(parts[0]) {
      try {
        this.start = new Simple(parts[0]);
      } catch(e) {
        throw new Error(e.message+' in Range Start Date');
      }
    }
  
    if(parts[1]) {
      if(parts[1].charAt(0) == 'P') {
        if(!this.start) {
          throw new Error('A Range may not end with a duration if missing a start date');
        }
        try {
          this.duration = new Duration(parts[1]);
        } catch(e) {
          throw new Error(e.message+' in Range End Date');
        }
        // Use duration and calculate end date
        this.end = GedUtil.addDuration(this.start, this.duration);
      } else {
        try {
          this.end = new Simple(parts[1]);
        } catch(e) {
          throw new Error(e.message+' in Range End Date');
        }
        if(this.start) {
          this.duration = GedUtil.getDuration(this.start, this.end);
        }
      }
    }
  
  }
func_code_string: function Range(str) {
  
    var range = str;
  
    // If range starts with A, its approximate
    if(range.charAt(0) == 'A') {
      this._approximate = true;
      range = str.substr(1);
    }
  
    var parts = range.split('/');
  
    if(parts.length != 2 || (!parts[0] && !parts[1])) {
      throw new Error('Invalid Date Range');
    }
  
    if(parts[0]) {
      try {
        this.start = new Simple(parts[0]);
      } catch(e) {
        throw new Error(e.message+' in Range Start Date');
      }
    }
  
    if(parts[1]) {
      if(parts[1].charAt(0) == 'P') {
        if(!this.start) {
          throw new Error('A Range may not end with a duration if missing a start date');
        }
        try {
          this.duration = new Duration(parts[1]);
        } catch(e) {
          throw new Error(e.message+' in Range End Date');
        }
        // Use duration and calculate end date
        this.end = GedUtil.addDuration(this.start, this.duration);
      } else {
        try {
          this.end = new Simple(parts[1]);
        } catch(e) {
          throw new Error(e.message+' in Range End Date');
        }
        if(this.start) {
          this.duration = GedUtil.getDuration(this.start, this.end);
        }
      }
    }
  
  }
func_documentation_string: A GedcomX Range.
  It will place a Singel date at this.start and this.end,
  as well as a Duration at this.duration.